C Feladat probléma?
Nos a kérdés arra irányul, hogy valaki megtudná nekem mondani miért kerül memóriaszemét (nem biztos de azt hiszem prímek esetén) a tenyezoksize-ba?
A kód:
A feladat:
Olvass be egy tízelemű tömböt
Tárold el minden elemhez a prímtényezős felbontásában szereplő legkisebb prímszámot
Rendezd a beolvasott tömböt a prímtényezős felbontásban szereplő legkisebb prímszám szerinti csökkenő sorrendbe
A válaszokat és az időtöket előre is köszi.
Megnéztem a forráskódot.
1) Egyrészt C-ben a változókat a függvénynév után kell létrehozni, és nem akármilyen parancs után. Oké, tudom, hogy vannak olyan fordítók, amiknek nem okoz gondot, de az nem azt jelenti, hogy mind tudja. Szóval először minden létező változót felviszünk utána írjuk a kódot.
2) 2. forodban while-on belül, mikor az l-t növeled "l++" nincs ellenőrzés arra, hogy meddig mehet.
Igen az "int tenyezok[100];" azaz 0-99ig mehet, de mi van akkor, ha még is tovább növeli az l értékét és nem áll meg? Akkor persze, hogy memóriaszemétre tér át. Azaz túlindexeli.
#1
1, Eddig más nyelveken programoztam, nem tudtam, hogy ezt nem minden fordító eszi meg szóval köszönöm a figyelmeztetést.
2, Nem az a probléma mivel direkt olyan számokat használtam hogy az intervallumból ne essen ki. Illetve ha belegondolsz ahhoz elég hatalmas 2 hatványa számot kéne mondanod hogy kifusson belőle, pl. 2^100-on, ez a program nem arra készült hogy az ilyen hatalmas számokkal számoljon. Nem ez okozza a memóriaszemetet.
#1:
"Egyrészt C-ben a változókat a függvénynév után kell létrehozni, és nem akármilyen parancs után."
Egyrészt C-ben nincsenek "parancsok", másrészt a C99 egy ANSI szabvány, ami engedi a kevert deklarációt.
@kérdező:
Miért kell a legkisebbnek, meg a tényezők méretének minden számhoz 10 db-os tömböt foglalni, mikor ezekből egy van?
Miért kell egy 100 elemű tömb a tényezőknek, ha csak az egyik kell?
Miért kell fölbontani prímtényezőkre, és belepakolni ezeket egy 100-as tömbbe ha csak az egyik kell?
A rendezésedben a relációs jel szerintem kapásból fordítva van, amellett, hogy nem is jó (milyen rendezést akartál írni?).
A legnagyobb baj, hogy a struktúrádban a legkisebb és a tenyezoksize tagoknak tömb helyett csak egy sima számnak kéne lennie.
Mert addig oké, hogy mindenhol úgy hivatkozol rá, hogy pl. tomb[i].legkisebb[i] (azonos index), de mivel a sorba rendezés után megváltozik a tomb elemeinek a sorrendje, nem azon a helyen lesz az az érték a legkisebb vagy tenyezoksize tömbben, ahol később keresnéd.
Amúgy ha a 0 vagy 1-es számot adsz meg a bemenetben valahol, akkor a legkisebb tényező megkeresésénél az inicializálatlan tenyezok tömb első elemét választja ki legkisebbnek.
Az "egyszerű cserés" rendezésnél a belső ciklusban a j változó indulhat i+1-től is (önmagával nem kell összehasonlítani).
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!