Arduino – Tömbök

A tömb egy memóriahely, amelyek azonos típusú elemeket tárol. A tömb adott helyére vagy elemére való hivatkozásként megadjuk a tömb nevét és az adott elem pozíciószámát a tömbben.

Tömbök deklarálása

A tömb elemek bármelyikére hivatkozhatunk úgy, hogy a tömb neve melletti szögletes zárójelben [] adjuk meg az adott elem pozíciójának számát. A pozíció számát indexnek hívjuk, ez a szám határozza meg az elem tömb elejétől számított helyét. Az első elem indexe 0 (nulla). A char típusú tömb deklarálásakor az inicializálásnál még egy elemre van szükség a szükséges null karakter jelzi a tömb végét.

A tömbök helyet foglalnak el a memóriában. A tömb típusa és az elemeinek a száma meghatározza a lefoglalt memoria mennyiségét. Figyeljünk fokozottan a tömbök deklarálásakor, hogy a tömb mérete elegendő legyen a benne tárolando elemek számára. A fordító lefoglalja a megfelelő memóriamennyiséget.  Az alábbi példában lefoglalunk a memoriában a myIntArray nevű 4 elemű tömb számára elegendő területet.

type arrayName[arraySize];
int myIntArray[4]; // 4 elemű int tipusú tömb

A tömb métete (arraySize) állandó, nullánál nagyobb egész szám.

const int arraySize = 4;
int myIntArray[arraySize];

Adhatunk értéket is a deklarálással egyidőben. Ebben a példában bevezetjük a myIntArray nevű int típusú tömböt és feltöltjük 4 elemmel, ebben az esetben számmal. Így is le lesz foglalva a megfelelő mennyiségű memoria.

int myIntArray[] = {1,2,3,4};

Műveletek a tömbökkel

A tömb elemeihez az indexükkel hivatkozhatunk. Például a myIntArray tömb harmadik elemét a 2. indexen találjuk.

int myIntArray[] = {1,2,3,4};
Serial.println(myIntArray[2]);

A konzolra kiírja: 3

Egy for ciklussal kiírathatjuk a tömb összes elemét.

int myIntArray[] = {1,2,3,4};
for ( int i = 0; i < 4; ++i )
{
  Serial.print(myIntArray[i]);
  Serial.print (", ") ;
}

A kimenet a következő lesz: 1, 2, 3, 4,

Végezhetünk műveleteket is a tömb elemeivel.

int myIntArray[] = {1,2,3,4};
Serial.println(myIntArray[0] + myIntArray[2]);
Serial.println(myIntArray[3] - myIntArray[1]);
Serial.println(myIntArray[3] * myIntArray[1]);
Serial.println(myIntArray[3] / myIntArray[1]);
Serial.println(myIntArray[3] % myIntArray[2]);

De használhatunk ciklust is.

int myIntArray[] = {1,2,3,4};
int sum = 0;

for ( int i = 0; i < 4; ++i )
{
  sum += myIntArray[i];
}

Serial.println(sum);

Az eredmény a konzolon 10 lesz.

A többdimenziós tömbök

A két- vagy több- dimenziós tömbök gyakran táblázatok értékeit tárolják, amelyek sorokban és oszlopokban rendezett információkból állnak. Egy adott táblaelem azonosításához két indexet kell megadnunk. Az első azonosítja az elem sorát (row), a második pedig az elem oszlopét (column). Azokat a tömböket, amelyekhez két index szükséges egy adott elem azonosításához, kétdimenziós tömbnek vagy 2-D tömbnek nevezzük. A két vagy több dimenziós tömböket multidimenziós tömböknek is nevezhetjük.

Lássunk egy példát.

const int rows = 2;
const int cols = 3;

int myIntArray[rows][cols] = {
  {1,2,3},
  {4,5,6}
};
myIntArray[0][0] ==> 1myIntArray[0][1] ==> 2myIntArray[0][2] ==> 3
myIntArray[1][0] ==> 4myIntArray[1][1] ==> 5myIntArray[1][2] ==> 6
2 dimenziós tömb

Létrehozhatunk stringet egy karakterlánc tömbbel. Ezeket az alábbi példák szerint lehet deklarálni, mindegyik érvényes. A karaktertömbök utolsó eleme a 0 (nulla), innen ismeri fel a fordító a string végét.

char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '
char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
'}; char Str4[ ] = "arduino"; char Str5[8] = "arduino"; char Str6[15] = "arduino";

Karaktereket aposztrofok közé írhatunk a tömbökbe.

char myArray[2][5] = { 
  {'A','B','C','D'},
  {'1','2','3','4'} 
};

A karakterláncokkat idézőjelek közé kell tenni.

const int rows = 4;
const int cols = 5;

char myCharArray[rows][cols] = {
  "row1",
  "row2",
  "row3", 
  "row4"
};

void setup()
{
  Serial.begin(115200);
  Serial.println(myCharArray[3][3]);   // console => 4
}

void loop(){}

Ha beír egy karakterláncot a tömbbe, hivatkozhat a karakterekre az indexükkel. A for ciklussal kinyomtathatjuk a tömb tartalmát a konzolra.

const int rows = 4;
const int cols = 5;
char myCharArray[rows][cols] = {
  "row1",
  "row2",
  "row3",
  "row4"
};
void setup()
{
  Serial.begin(115200);
  for ( int i = 0; i < 4; ++i )
  {
    for (int j = 0; j < 4; j++)
    {
      Serial.print(myCharArray[i][j]);
    }
  }
}
void loop(){}

Hosszabb szövegeket is tárolhatunk tömbben.

char myString[] = 
   "Első sor"
   "Második sor"
   "Harmadik";

Serial.println (myString[7]);

Egyenlőre ennyit a tömbökről. Lapozz tovább, és a karakterláncokról megtudhatsz még pár érdekességet.