Kezdőoldal » Számítástechnika » Programozás » C++ kiakad "nagy" számoktól,...

C++ kiakad "nagy" számoktól, mint pl 2000?

Figyelt kérdés

Évfolyam zh-ra gyakorlok és belefutottam ebbe a problémába, hogy ha a programot tesztelésnél teleírom olyan számokkal, mint 2-3-4-5 stb, akkor tökéletesen lefut, azonban ha mondjuk valahova 2000-et írok, az már nagy neki és nem fut le a program. Olyan feladatok, ahol meg kell adni, hogy hányféle különböző adat lett megadva. Ha az ezt vizsgáló részt kiszedem a programból, akkor tökéletesen lefut nagy számokkal is. Ami felettébb érdekes, hogy több ilyen feladatot megírtam már, az első ilyennél egyik haverom segítségét kértem, sikerült is megírni egy ilyen feladatot, azonban akármikor máskor megpróbáltam ilyen feladatot megoldani az alapján, ez történik, hogy lefagy. Megírtam "kicsiben" is ezt a programrészt, ugyanúgy lefagy, ha 2000-et írok be. Mi lehet a gond? Ti találkoztatok már ilyennel? Még annyi, hátha segít, hogy Code::Blocks-ot használok, 16.01 és GNU CCC compiler.

Spórolás végett az int main() előtti meg return 0; utáni dolgokat nem másoltam be.


int n;

cerr<<"n= ";

cin>>n;

int tomb[100],hanyfele;

bool vizsgal[100];

for (int i=0;i<n;i++)

{

vizsgal[i]=false;

cerr<<i+1<<". elem= ";

cin>>tomb[i];

}

hanyfele=0;

for (int i=0;i<n;i++)

{

if (vizsgal[tomb[i]-1]==false)

{

vizsgal[tomb[i]-1]=true;

hanyfele++;

}

}

cout<<hanyfele<<endl;



2016. dec. 29. 12:52
1 2 3
 1/29 anonim ***** válasza:
100%

cin>>tomb[i];


vizsgal[tomb[i]-1]


Ha tomb[i]-be beírsz 2000-et, akkor a vizsgal tömbből szerencsétlen program az 1999-es indexű elemet szeretné kivenni, holott a vizsgal tömb is csak 100 elemű:


bool vizsgal[100];

2016. dec. 29. 12:57
Hasznos számodra ez a válasz?
 2/29 A kérdező kommentje:
Megkerestem a maximum értéket, a bool változót addig false-ra állítottam, de ugyanúgy nem jó, lefagy a program.
2016. dec. 29. 13:08
 3/29 A kérdező kommentje:
Amúgy így végig gondolva méginkább nem értem, mert az 1999-es indexet szeretné kivenni, de mondjuk a 652-es indexel meg működik.
2016. dec. 29. 13:17
 4/29 anonim ***** válasza:

Hova írsz be 2000-et? A konzolba, az n változó értékének? Akkor továbbra is, még jó, hogy kiakad, ha egyszer a tömböd csak 100 elemű...


Megtippelem, hogy ELTE-IK első évfolyam, progalap, szóval maradjunk annyiban, hogy ilyet ne csinálj. Ilyenkor a C++ megkeresi a tömb kezdetétől számított n-edik memóriaértékrészt, kiolvassa, és általában memóriaszemetet fog ott találni, nem intet, azért nem tetszik neki.

2016. dec. 29. 13:26
Hasznos számodra ez a válasz?
 5/29 anonim ***** válasza:

int tomb[100];


Emiatt nem működik a programod megfelelően 100-nál több adattal. Az hogy működHET 100-nál több adatra pusztán amiatt van, hogy a C++ attól hogy túlindexeled a tömböt, még nem fog szólni se hibát dobni, csak például akkor ha a memóriaterületet már valami más lefoglalta és te úgy próbálsz ráírni. Ha az a memóriaterület történetesen szabad, akkor enged ráírni.


De ez nyilván nem jó, nem helyes, nem lehet így használni. A tömböd méretét növeld és működni fog megfelelően minden mennyiségű adatra. (gondolom ELTE IK Prog. alapismeretek évfolyamzh, szóval a vectort nem használhatod ami lehetővé tenné a dinamikusabb adatmennyiség kezelését)

2016. dec. 29. 13:29
Hasznos számodra ez a válasz?
 6/29 A kérdező kommentje:
Telitalálat az ELTE-t illetően. Bár azt hiszem most nincsenek megkötések, hogy mit használhatunk és mit nem, mert kvázi egy program ellenőrzi le a programomat és az ott elért pontszám fogja meghatározni, hogy átmentem e vagy sem. Az a program meg nem tudja ellenőrizni, hogy a program hogy számolja ki az eredményt. Egyébként ez a megnövelt tömb méret beválni látszik, amennyivel megfelelően nagy számra növelem a méretét. Nagyon szépen köszönöm a segítséget!
2016. dec. 29. 13:35
 7/29 A kérdező kommentje:
#4-es: Természetesen nem az n-nek írok be 2000-et, bár ezt is leírhattam volna a pontosítás kedvéért. A tomb-be írtam be 2000-et, de az 5-ös hozzászólónak hála már megoldódott a problémám!
2016. dec. 29. 13:36
 8/29 anonim ***** válasza:

Nembaj, hogy a vizsgál tömbödet a másik tömb elemeivel indexeled?

Így ugyanúgy túlindexelhetsz, sőt, akár még negatív irányba is.

Amúgy mi akar ez lenni?

Különböző elemek számlálása?

Mert annak borzasztó.

2016. dec. 29. 14:00
Hasznos számodra ez a válasz?
 9/29 anonim ***** válasza:
Jah a bíró egy csodálatos tesztelő, de asszem figyeli az include-okat, és ha az iostream-en kívül más is van, akkor nem ad pontot. Bár nem tudom ez mennyire városi legenda (ugye a vectorhoz kéne egy #include<vector>). Ismerek olyat akivel kijavítatták a beadandóját mert vectorokat használt és tömböt kell, szóval LEHET benne igazság.
2016. dec. 29. 14:04
Hasznos számodra ez a válasz?
 10/29 anonim ***** válasza:
100%

"Ismerek olyat akivel kijavítatták a beadandóját mert vectorokat használt és tömböt kell"


Ebben mondjuk van ráció, aki még azt se tudja, hogy C++-ban hogy működik az (túl)indexelés, az ne rögtön a vector felüldefiniált indexelő operátorával kezdjen programozni, mert abból nagy baj lesz..

2016. dec. 29. 16:00
Hasznos számodra ez a válasz?
1 2 3

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!