Oppure

Loading
04/10/09 11:20
Il Totem
Postato originariamente da microprocessore:
quando dici che l'array delle distanza dovrebbe avere n-1 elementi intendi n-1 celle?
perchè la formula del calcolo delle combinazioni di n elementi presi 2 a 2 è uguale a: n(n-1)/2... quindi considerando che il vettore delle distanze deve memorizzare tutte le combinazioni io ho creato un tot di celle pari a n+(n-1)/2.

per quanto riguarda il problema nel "non numero reale" cosa mi consigli di fare?... anche secondo me è dovuto al fatto dei numeri negativi

usando il tuo codice degli if mi da sempre 0
e poi sbaglio o ci vorrebbe comnque un' else con l'esecuzione del teorema di pitagora?


Non avevo capito che tu volessi calcolare tutte le possibili distanze tra due punti qualsiasi. In questo caso, sì, la formula è per puro caso simile a quella della somma delle successioni aritmetiche parziali. In modo rigoroso si avrebbero delle combinazioni semplici di n elementi di classe 2, ossia:
C(n, 2) = D(n, 2) / P(2) = (n * (n - 1)) / 2! = n * (n - 1) / 2
Ma comunque rimane il fatto che non puoi prendere l'elemento punti[k] con k che varia da 0 a C(n, 2) - 1, perchè andresti puntualmente fuori dai limiti dell'array. Hai sbagliato ad impostare il for, perchè il modo corretto sarebbe:
for(k = 0; k < punti.Length - 1; k++)
    for(z = k + 1, z < punti.Length; z++)
      { ... }

Per indicizzare l'array distanze non puoi fare altro che prendere un'altra variabile contatore, ad esempio y, ed incrementarla di 1 ogni volta che hai eseguito il codice interno al secondo for (ossia ogni volta che hai aggiunto una nuova combinazione di punti).

Se il problema fossero i numeri negativi, dubito che riusciresti a leggere quello che sto scrivendo io, perchè da che mondo è mondo i valori in virgola mobile accettano sempre anche i valori negativi e se così non fosse ogni applicazione crasherebbe. Tutte le regole che valgono nella matematica valgono anche qui... ed il quadrato di un negativo è pur sempre positivo. Dovresti mettere un breakpoint prima dell'esecuzione di Sqrt e verificare i valori.

Il mio codice è esatto e se ti dà 0 sempre devi aver sbagliato qualcosa. Infatti, se la condizione è vera, almeno uno dei due Abs sarà 0: l'altro restituisce esattamente la differenza tra i valori, sia che il primo sia maggiore del secondo sia viceversa.
Ed è ovvio che ci vuole anche la parte dove applichi il teorema di Pitagora...
aaa
04/10/09 23:22
HeDo

direi che il "problema dei negativi" non esiste, in quanto la distanza tra due punti è sempre positiva... Usa Math.Abs per le differenze, che oltretutto è contenuto nella formula di pitagora, se magari qualcuno la sapesse veramente...
aaa