Kezdőoldal » Számítástechnika » Programozás » C Feladat probléma?

Qaxqaxqax kérdése:

C Feladat probléma?

Figyelt kérdés

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:

[link]

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.



2014. szept. 30. 16:16
 1/9 anonim ***** válasza:

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.

2014. szept. 30. 16:48
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

#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.

2014. szept. 30. 18:19
 3/9 A kérdező kommentje:
Gondolkodtam és szerintem lehetséges a cserével van a gond. A sorba rendezésnél, vagy nem tudom:/
2014. szept. 30. 18:29
 4/9 anonim ***** válasza:
100%

#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?).

2014. szept. 30. 18:52
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:
Ja, amúgy nekem codepad-on elszáll segfaulttal, tovább nem nézegettem.
2014. szept. 30. 18:58
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:

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).

2014. okt. 3. 02:43
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:
Meg a relációs jel tényleg fordítva van. Most látom, hogy négyes válaszban is leírták, mi a baj ezzel.
2014. okt. 3. 02:45
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:
Átolvastam az összes választ, a tárolásra azért került sor, mert kíváncsi voltam sikerülne e úgy is. Egyébként igazad van abban hogy csak a legkisebbet kéne, elnézést ezt nem említettem. Végül ez alapján sikerült kijavítani a kódot, szóval köszönöm mindenki idejét és segítségét(:
2014. okt. 4. 15:08
 9/9 anonim ***** válasza:
Persze, sikerülhetne úgy is, csak rendezésnél rendezd azokat is.
2014. okt. 4. 15:09
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!