C++ kiakad "nagy" számoktól, mint pl 2000?
É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;
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];
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.
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)
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ó.
"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..
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!