TFeri.hu

A C++ nyelv alapjai 4. rész PDF Nyomtatás E-mail
  
Tartalomjegyzék
A C++ nyelv alapjai 4. rész
Hivatkozási-operátor
Minden oldal

7. fejezet: Mutatók és tömbök

Minden komolyabb programozási nyelvben vannak tömbök, amelyek gondos kezekben komoly fegyvert jelenthetnek. Először is tanuljunk meg tömböt deklarálni!

 

---------------------------------------------
//Tömbök használata
#include <iostream>
using namespace std;
#define SPACE " "

int main()
{
cout <<"Ez o:t szamot ir ki...\n ";
int tomb [5] = {1,2,3,4,5};
for (int szam = 0; szam<5; szam++)
{
cout <<tomb[szam] <<SPACE;
}
cout <<endl;
}

---------------------------------------------

A fenti egyszerű példából is jól látható, hogy maga a deklaráció semmi gondot nem okoz, mivel egyszerűen beírjuk a tömb típusát (jelen esetben: int), majd elnevezését (most: tomb), végül az egyes elemek számát (most: 5). Fontos, hogy a C++ esetén minden tömb a 0-ás index-szel kezdődik. Tehát a tömb egyes elemei: tomb[0], tomb[1], ...
Persze a deklaráció történhet külön-külön is. Erre példa a következő:

---------------------------------------------
//Tömbök használata
#include <iostream>
using namespace std;
#define SPACE " "
int main()
{
int tomb[5];
cout <<"Ez o:t szamot ir ki...\n ";
for (int szam = 0; szam<5; szam++)
{
tomb[szam] = szam*10;
cout <<tomb[szam] <<SPACE;
}
cout <<endl;
}

---------------------------------------------
Itt jól látható, hogy a tömb deklarációja már a main() függvény elején megtörtént, ám a konkrét értékeket csak menet közben adjuk meg (miután 10-zel megszoroztuk az index-et). Ezek, mint látható, csupán egydimenziós tömbök, azaz vektorok. Természetesen kellenek többdimenziósok is, azaz mátrixok.
Lássuk példaként erre egy igen egyszerű tömböt, egy 10x10-es szorzótáblát!

---------------------------------------------
//Tömbök használata: szorzótábla
#include <iostream>
using namespace std;
#define SPACE " "
int main()
{
int tabla[11][11]; //Azért 11-es mindkét tömb indexe, mert így 1-től 10-ig lehet futtatni mindkét irányt
cout <<"Ez egy 10x10-es szorzotablat ir ki:...\n";

for (int xindex = 1; xindex<11; xindex++)
{
for (int yindex=1; yindex<11; yindex++)
{
tabla[xindex][yindex] = xindex*yindex; // Ez a tulajdonképpeni szorzás
cout <<xindex <<"x" <<yindex <<"="; // Mit is akarunk összeszroozni?
if (tabla[xindex][yindex]<10) cout <<SPACE; // Ha túl nagy lenne az eredmény, tesz eléje egy SPACE-t
cout <<tabla[xindex][yindex] <<SPACE; // Kiírja a szorzás eredményét
}
cout << endl; // Sorok végét le kell zárni
}
cout <<endl;
}

---------------------------------------------
Igen, tisztában vagyok azzal, hogy ezt simán meg lehet oldani tömbök nélkül is, de ez véleményem szerint egy tökéletes példa a tömbök használatára.
Fontos, túl sok index használata veszélyes lehet, mert igen gyorsan túlterheli a memóriát. Vegyük például a következő tömböt: char century [100][365][24][60][60];
Mérete: 100*365*24*60*60 = 3 153 600 000 byte!

Érdekesség, hogy a vektorokat az egyes alprogramok is elfogadják paraméterként. Lássuk például a következőt:

---------------------------------------------
// Vektor, mint paraméter

#include <iostream>
using namespace std;

void tombkiir (int arg[], int length) {
for (int n=0; n<length; n++) // Számláló ciklus 0-tól a ciklus hosszáig
cout << arg[n] << " "; // A konkrét kiíratás
cout << "\n";
}

int main ()
{
int tomb1[] = {5, 10, 15}; // Első tömb deklarálása
int tomb2[] = {2, 4, 6, 8, 10}; // Második tömb deklarálása
tombkiir (tomb1,3); // Első tömb kiíratása
tombkiir (tomb2,5); // Második tömb deklarálása
return 0;
}

---------------------------------------------

Kicsit másképpen kell kezelni a mutatókat és egészen másképp kell értelmezni!

Már láttuk, hogy a változókat, illetve az állandókat többféleképpen is el lehet érni a memóriában. A pointerek (mutatók) esetében nem kell azzal törődni, hogy hol is vannak a memóriában, hanem egyszerűen használhatjuk az azonosítójukat, ha rá akarunk utalni.

Magát a számítógép memóriáját úgy is el lehet képzelni, mint egymás utáni cellák sorozatát, ha egy cella mérete 1-1 byte. Így minden egyes cella könnyedén azonosítható, mert van egyedi azonosító száma, melyet a következő azonosító számot tartalmazó cella követ. Például, ha az 1777-es cellát keressük, akkor pontosan tudhatjuk, hogy az 1776-os és az 1778-as között lesz megtalálható.



 
Ulti Clocks content

Hirdetés