[RISOLTO] Prendere valore maggiore da più variabili long

Salve, devo prendere il numero maggiore fra molte variabili long (es. 10). Sapete un metodo efficace?

Detta così non ha molto senso. I dati saranno qualcosa che hanno un senso tra loro, no ? Quindi sarebbe meglio memorizzarli dentro ad un vettore già in origine. Poi avendo N valori nel vettore/array è semplice trovare il max.

I dati vengono raccolti e sono 11 distanze in cm. Non saprei come memorizzarle in un array...

Se non vuoi usare un array non è che tu abbia molta scelta...

long max = a;

if (b > max)
  max = b;

if (c > max)
  max = c;

...

Rendo l'idea?

Occhio che max è anche il nome di una funzione, meglio evitarlo e, anzi, usare proprio quella …

long massimo = 0;

massimo = max(massimo, lettura1);
...
massimo = max(massimo, lettura2);
...
...
// alla fine in massimo c'è il valore massimo che si è letto

Guglielmo

Giusto!

Avevo abagliato a scrivere :smiley:
Mi serviva il min ma ho risolto con la funzione min. :slight_smile:

Grazie :slight_smile:

Ernesto0: I dati vengono raccolti e sono 11 distanze in cm. Non saprei come memorizzarle in un array...

Ma raccogli N volte un dato e devi saperne il massimo oppure hai proprio N variabili ? Se hai 11 variabili A,B,C, etc. fai un array Misure[11]

Dopo averle raccolte come array come faccio a prendere il minore?? :slight_smile:

gpb01: Occhio che max è anche il nome di una funzione, meglio evitarlo e, anzi, usare proprio quella ...

long massimo = 0;

massimo = max(massimo, lettura1); ... massimo = max(massimo, lettura2); ... ... // alla fine in massimo c'è il valore massimo che si è letto




Guglielmo

Si ma a me interessa anche sapere da quale variabile è uscito questo valore...

Ernesto0: Si ma a me interessa anche sapere da quale variabile è uscito questo valore...

Allora, come ti ha detto Nid, memorizzi le varie letture in un array e poi confronti, a scalare, ciascun elemento con i successivi alla ricerca del minore ... quando lo hai trovato sai quanto è il valore minimo e sai anche in quale misura lo hai.

Guglielmo

Ernesto0: Dopo averle raccolte come array come faccio a prendere il minore?? :)

IN poche parole con un ciclo for su tutti gli elementi

Quindi le raccolgo in un array, ma come posso prendere il minore con un ciclo for?

long distanza[11]; //11 distanze
distanza[9]= 12; //esempio
distanza[11]= 15; //esempio

Giusto??

ho array distanza di N elementi (indice da 0 a N-1)

valmin=distanza[0];
idxmin=0;
for(int i=1; i<N ; i++)
{ if(distanza[i]<valmin)
  { idxmin=i; 
    valmin=distanza[i];
  }
}
// il valore minore è valmin e nell'array è in posizione idxmin

Ernesto0: long distanza[11]; //11 distanze distanza[9]= 12; //esempio distanza[11]= 15; //esempio

Giusto??

No. Se dichiari che distanza ha 11 elementi, questi sono numerati da 0 a 10, l'elemento 11 non esiste, quindi non puoi assegnargli un valore.

long distanza[12]; //distanza[0] non verrà usata, ma userò da 1 a 11
long valmin=distanza[1];
idxmin=1;

//Esempi di distanze
distanza[2]=23;
distanza[3]=120;
distanza[9]=122;
distanza[10]=76;
distanza[11]=233;

//Recuperare valore minimo
for (int x=1;x<=11;x++) {
if (distanza[x]<valmin) {
idxmin=x;
valmin=distanza[x]
}
}

Tanto per saperlo

Perché non usi indice 0?

docsavage: Tanto per saperlo

Perché non usi indice 0?

Comodità in quanto i sensori li ho nominati da 1 a 11 :)

Perche quando faccio:

distanza[1]=distanza

mi dà errore:

invalid types 'long int[int]' for array subscript

Sono tutte e due variabili long!

Cioé hai due variabili che si chiamano distanza? Un vettore e un singolo valore? Non ti sembra che crei un po' di confusione??? In ogni caso non è ammesso...

SukkoPera: Cioé hai due variabili che si chiamano distanza? Un vettore e un singolo valore? Non ti sembra che crei un po' di confusione??? In ogni caso non è ammesso...

sono variabili locali tipo

long distanza[12];

void aaa() {
long distanza=200 //variabile locale
distanza[1]=distanza //variabile globale
}