Go Down

Topic: Ripetere stesse operazioni su diversi array (Read 140 times) previous topic - next topic

ceccob

Salve,

Come da titolo ho bisogno di compiere operazioni uguali su 10 array diversi; (int array1, int array2, ecc).

Per non scrivere 10 volte le stesse istruzioni (ognuna con riferimenti al rispettivo array) volevo impiegare un ciclo for, ma non trovo un modo per passare alle funzioni impiegate, un nome di array diverso ad ogni ciclo.

Suggerimenti ?

Grazie

ultimo_53

Essendo il tuo primo post Ti invitiamo a presentarti QUI (dicci quali conoscenze hai di elettronica e di programmazione) e a leggere il regolamento QUI se non lo hai già fatto.

Comunque benvenuto sul forum.

Attilio

SukkoPera

#2
Feb 02, 2016, 12:37 am Last Edit: Feb 02, 2016, 12:38 am by SukkoPera
Non devi usare un ciclo for, devi scrivere una funzione che fa quel che serve e prende l'array su cui lavorare come parametro. Poi la chiami tot volte, ogni volta con un array diverso.
Make your Sega MegaDrive/Genesis region-free with Arduino! http://forum.arduino.cc/index.php?topic=350099.0

Dubbi su millis()? https://forum.arduino.cc/index.php?topic=355435.msg2460825#msg2460825

MauroTec

Puoi usare un array di puntatori da scandire con un for al cui interno chiami la funzione e passi il puntatore.
Supponendo 10 array di byte ognuno con dimensione differente.

Code: [Select]

byte *arrayList[10]; // può contenere 10 puntatori di cui ognuno punta ad uno dei dieci array.
// Inizializza arrayList
arrayList[0] = array0;
arrayList[1] = array1;
arrayList[2] = array2;
...
arrayList[9] = array9; // decimo puntatore a decimo array

// se i 10 array hanno dimensione diversa ti serve un altro array che contiene le dimensioni di ognuno.
byte arrayListSize[10];

// devi inizializzare ogni elemento di arrayListSize con la dimensione di ognuno dei 10 array

//  il ciclo for
for( byte idx=0; idx < 10; idx++) {
     myFunction( arrayList [idx], arrayListSize [idx] );
}

// La funzione myFunction
void myFunction( byte *aList, byte LSize ) {
    for ( byte idx=0; idx<LSize; idx++ ) {

   }
}


Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

ceccob

Grazie, almeno so quale strada prendere.
Al momento però mi scontro col problema di passare alla funzione il nome di un array.
Ho scritto questo, che dovrebbe stampare il secondo valore (25) di Array1. Dove sbaglio ?
Code: [Select]

byte array[5]={10,25,30,27,5};

void setup()
{
    Serial.begin(9600); //Avvia comunicazione seriale
}
void loop()
{
    Serial.print (Funzione(array, 1));
}

byte Funzione(byte nomeArray, byte indArray)
{
    byte valore = nomeArray[indArray];
    return valore;
}

SukkoPera

#5
Feb 02, 2016, 07:39 pm Last Edit: Feb 02, 2016, 07:41 pm by SukkoPera
Devi dire alla funzione che il primo parametro è un array, non un singolo byte:

Code: [Select]
byte Funzione(byte nomeArray[], byte indArray) {

che non sono sicuro funzioni, oppure:

Code: [Select]
byte Funzione(byte *nomeArray, byte indArray) {


Nota che, per una serie di motivi, quando in C/C++ si passa un array ad una funzione, è buona norma passarle anche un seconda variabile con la dimensione dell'array, a meno che proprio non sia scolpita nella pietra:

Code: [Select]
byte Funzione(byte *array, unsigned int len, byte index) {
Make your Sega MegaDrive/Genesis region-free with Arduino! http://forum.arduino.cc/index.php?topic=350099.0

Dubbi su millis()? https://forum.arduino.cc/index.php?topic=355435.msg2460825#msg2460825

ceccob

Funziona in entrambi i modi. Io cercavo il problema nella riga della chiamata....
Ti ringrazio molto. Posso andare avanti.

ceccob

Ok. Con le vostre indicazioni, sono riuscito a fare quello che mi serviva.
Ho trovato utile questo tutorial array di arrays Magari può servire a qualcun'altro.
Grazie
Saluti

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy