Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Kaksiulotteinen taulukko (C)

Sepe [25.02.2005 15:53:35]

#

Tilanne on tämä: Kaksiulotteiseen taulukkoon tallennetaan tietoja eli tieto1, tieto2, tieto3. Tiedot ovat int-tyyppisiä. Taulukon kokoa (rivimäärää) ei kuitenkaan tunneta entuudestaan. Miten tällaisen taulukon sais väsättyä vai onnistuuko se edes?? Jos ei, niin pystyykö tämän kiertämään jollakin keinolla?
Toinenki ongelma löytyy: Tieto3 voi olla väliltä 0-5. Tieto1 (0 tai1) ollessa esim. 0 pitäisi laskea vastaava tieto3 summaan jne. Miten tämä tehdään?
Jos homma ei onnistu ihan tällä tavalla niin olisiko jotain muuta tapaa tehdä sama asia?
Kiitoksia kaikista mahdollisista neuvoista.

Metabolix [25.02.2005 16:51:51]

#

Käytä linkitettyä listaa, sitä on helppo laajentaa :)

Taulukolla onnistuu varmaan helpoiten näin:
Tee taulukon alkiosta oma struct, jolloin taulukko on oikeastaan yksiulotteinen. Jos sen pitää venyä toiseenkin suuntaan, pitää tietenkin käyttää 2D-taulua. Joka tapauksessa, teet fuinktiot, joilla varaat lisää tilaa, ja niitä voit sitten kutsua aina, kun tarvitset lisää tilaa.

Tutustu funktioihin malloc, free ja realloc. <stdlib.h>

typedef struct _TTaulukonKohta
{
  int tieto1, tieto2, tieto3;
} TTaulukonKohta;
// Jos käyttäisit 2D-taulukkoa, voisit määritellä tähän
// typedef int * TTaulukonKohta;

TTaulukonKohta *Taulu = 0; // Taulukko on osoitin.
int Taulukon_Koko = 0;

void LaajennaTaulua()
{
  // Merkitään alkioiden määrä suuremmaksi ja varataan lisää tilaa
  Taulukon_Koko++;
  Taulu = realloc(Taulu, Taulukon_Koko * sizeof(TTaulukonKohta));
  // Taulukossa on nyt Taulukon_Koko alkiota, [0 .. (Taulukon_Koko - 1)]
  // 2D-taulukon tapauksessa uudelle riville pitäisi nyt varata tilaa.
}

void TuhoaTaulukko()
{
  // Vapautetaan koko taulukko kerralla
  free(Taulu);
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta