Quindi noto che x diventa di volta in volta uno dei tre valori dell'array, e piu' precisamente partendo dall'ultimo verso il primo (indice 2 dell'array, poi 1 e poi 0 ). Serve a questo la percentuale ? non c'entra nulla con l'operatore per avere il resto di un intero con la virgola ?
Grazie in anticipo
11 : 3 fa 3 con il resto di 2 quindi x = pippo[2];
10 : 3 fa 3 con il resto di 1 quindi x = pippo[1];
9: 3 fa 3 con il resto di 0 quindi x = pippo[0];
8 : 3 fa 2 con il resto di 2 quindi x = pippo[2];
7 : 3 fa 2 con il resto di 1 quindi x = pippo[1];
6 : 3 fa 2 con il resto di 0 quindi x = pippo[0];
ecc ecc
L' operatore % o modulo Ti da come risultato il resto della divisione.
In questo esempio ricavi dalla variabile i un numero da 0 a 2 per l' indice dell'array.
yes,
come puoi leggere nella domanda iniziale sapevo a cosa serviva il simbolo della percentuale, ma nessun neurone si era connesso al punto da farmi vedere l'uso in questo caso. Avevo anche notato che l'uso che ne faceva era quello di selezionare i tre indici nell'array, partendo dal 2 per arrivare allo 0, ma ancora non vedevo la luce.
Pelletta mi ha rischiarato la mente
Comunque una cosa e' leggere il codice una cosa e' scriverlo, io non avrei mai pensato ad una cosa del genere per selezionare i dati nell'array. E' una tecnica comune o uno spunto di inventiva personale ?
E' sicuramente un trucco inventato dall'autore del codice per semplificare le operazioni.
Sicuramente avrebbe dovuto usare un altro indice per far sì di scorrere gli elementi dell'array durante il ciclo principale. Al posto di qualcosa tipo il codice seguente:
byte j = 0;
for (int i = 11; i >= 0; i--) {
int x = pippo[j];
j++;
if (j > 2) then j = 0;
}
Si è inventato quel trucchetto lì. E' una cosa che fo spesso anch'io quando mi serve un trucco per una semplificazione.
Ovviamente però se devi dare il codice ad altri poi possono nascere delle curiosità ma anche delle incomprensioni perché bisogna andare a capire cos'è che voleva fare l'autore
Se la dichiari e basta, il compilatore semplicemente va a riservare lo spazio in RAM ma non ci mette dentro nessun valore.
Se la dichiari ed inizializzi, come nell'esempio che avevi postato prima (int pippo[3] = {2200, 1900, 2300} il compilatore inserisce già quei numeri nelle rispettive celle.
Quindi una variabile dichiarata ma non ancora usata può contenere quello che c'era nella RAM usata al momento dell'operazione, quindi valori senza senso.
x Guglielmo: ma come, gia' Microsoft Word 20 anni fa aveva il correttore non solo ortografico, ma grammaticale e logico, l'arduino Ide dovrebbe indicare in rosso: "Che xxxxx stai tentando di fare ? Hai mai pensato alla zappa come alternativa alla programmazione !"
Che c'entra il correttore ortografico col compilatore (non c'entra l'IDE in questo caso)?
Anche con Word tu puoi scrivere
"pistola canotto luna sul sole viaggiando sul fuoco" e non ti segna errori, sono tutte parole valide... peccato che siano messe insieme senza senso
Un conto è la sintassi, un conto è la logica del programma. I comandi possono essere scritti in modo corretto... qui però non c'è un sistema operativo dietro che controlla che il tuo programma non esca dall'area di memoria assegnata e, nel caso lo faccia, lo secchi all'istante. Qui in teoria puoi anche provare ad accedere alla cella 23000 della RAM, non c'è ma istruzione se sintatticamente corretta è valida
certo, voleva essere una battuta,
comunque quando lavoravo per una societa' e tra le varie cose gestivo una rivista word davvero aveva opzioni di correzione grammaticale, non solo ortografico. Sulla frase da te scritta ti uscivano una marea di errori e suggerimenti. Per capirci se sbagliavi il condizionale lui ti avvisava.
Credo fosse un'opzione a pagamento, parliamo di MIcrosoft Word per Mac, avevo un Quadra qualcosa
Il compilatore ti dice se quello che stai scrivendo è sintatticamente scorretto ma non semanticamente.
Un esempio: io voglio fare
int c;
c = a + b;
un errore di sintassi può essere questo:
int c;
c = a + ;b;
In quanto è, secondo le regole del C++, sbagliato mettere quel ; prima di b. Invece non ti da nessun errore se invece scrivi
int c;
c = a + 'b';
In quanto lui prende il carattere b, lo converte nella sua corrispondente codifica ascii, lo somma ad a e mette il risultato in c. E' un'operazione del tutto lecita, ma non è quello che volevi fare, ma il compilatore non può sapere quello che volevi fare...
Un esempio di utilizzare i caratteri come numeri è quello di voler verificare se un carattere è maiuscolo o minuscolo, e si può fare così:
char c;
if (c >= 'A' && c <= 'Z') { //Se c è un carattere maiuscolo
...
};
Quel ; mi ricorda molto l'errore visto in uno sketch ieri sera:
if (test); {
...codice...
}
Il codice compila senza errori... MA c'è il punto e virgola dopo il test e prima della graffa. Il compilatore termina l'istruzione dell'if al segno ";" e poi il blocco di codice dopo viene eseguito sempre perché diventa indipendente dall'if.