Kezdőoldal » Számítástechnika » Programozás » Hogyan kell megszámolni a...

Hogyan kell megszámolni a különböző elemek számát egy struktúrában C nyelven?

Figyelt kérdés

Pontosabban nem a struktúra különböző elemeit szeretném megszámolni, hanem, hogy egy oszlopban hány különböző elem van. Így néz ki a struktúrám

struct helyjegy

{

int le;

int fel;

int jegyar;

};

Így deklaráltam a struktúrát:

struct helyjegy tomb[sor]

A tomb[i].le különböző elemeit szeretném megszámolni.

Gondolom ehhez for ciklus kell, csak nem tudom, mit kell beleírni, hogy csak a különbözőeket számolja meg, ne azt, hogy hány sora van a fájlnak, amiből a struktúrát készítettem.



2014. máj. 9. 12:00
 1/3 Tengor ***** válasza:

Nagyon egyszerű és pazarló megoldás: fogj egy üres int tömböt. Menj végig a struktúra tömbön és minden elemre: menj végig az int tömbön és nézd meg, hogy a le érték benne van-e. Ha nincs, akkor tedd bele, majd minden esetben lépj a következő struktúra elemre.

Sokkal szebb megoldás lehet, ha egy int-re úgy tekintesz, mint egy 0-ákból és 1-esekből álló tömbre, aminek az x. helyén ha 0 van, akkor az x, mint érték még nem szerepelt a struktúrában, ha 1-es van, akkor szerepelt. Ekkor mégy végig a struktúrán és bitmüveletekkel tudod ellenőrizni, hogy volt-e már az adott int v. sem.

Ezt lényegesen komplikáltabb megcsinálni, de sokkal gyorsabban fog futni.

2014. máj. 9. 12:38
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:

Van valamilyen megkötés a "le" értékkészletére? (Pl. -100-tól 100-ig vehet fel értéket)


Ha igen, akkor:

- csinálj még egy tömböt: int voltmar[201]; // a [-100;100] intervallumnak 201 eleme van (egész szám); ez tartalamzza a már előfordult elemeket


- for (int i=0; i < 201; ++i) voltmar[i]=0; // kinullázunk mindent


- for ciklussal járd be a "tomb" nevű tömbödet:


for (int i=0; i < sor; ++i) {

if (voltmar[tomb[i].le+100]==0) { // a -100 miatt hozzá kell adni 100-at!

voltmar[tomb[i].le+100]=1;

++c; // ebben számolod a különböző elemeket

}

}

2014. máj. 9. 12:40
Hasznos számodra ez a válasz?
 3/3 Srapnel ***** válasza:

A tárhelyben nagyon spórolós és időben nagyon pazarló megoldás pedig az alábbi:


Rendezed a tömböt quicksort-tal először az első oszlopra. Ha megvan, akkor egy számlálót beállítasz 1-re, majd végigmész a tömbön i-vel 1-től a tömb végéig. Ekkor a hányszor tömb[i] nem egyenlő tömb[i-1]-gyel, annyiszor növeled a számlálót 1-gyel. A ciklus végén a számlálóban van az oszlopra vonatkozó érték.


PL. ha a tömböd egy oszlopa sorra az alábbi értékeket veszi föl:


6 2 8 3 1 0 9 4 1 6 3


rendezés után:


0 1 1 2 3 3 4 6 6 8 9


a számláló értéke a ciklus lépései után:


1 2 2 3 4 4 5 6 6 7 8


Tehát 8-féle érték volt.

2014. máj. 9. 23:11
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!