Mit ronthatok el a következő C++ kódnál? Van egy megoldásom, de szerettem volna másképp megcsinálni, de valami nem stimmel. Szerintetek?
int main(){
char szo[20];
cin >> szo;
int db = 0;
db = strlen(szo);
bool tukorkep = false;
for (int i = 0; i<=db/2; i++){
for (int j = db; j >= db/2; j--){
if (szo[i] == szo[j]){
tukorkep=true;
}
else{
tukorkep = false;
}
}
}
if (tukorkep){
cout << "tukorkepe"<<endl;
}
else{
cout << "nem tukorkepe"<<endl;
}
system("pause");
return 0;
}
Több mindent.
- a tömbök 0-tól indulnak, így pl. egy 4 hosszúságú tömb 0-3-ig tart, tehát nem a 4. indexű az utolsó karakter, hanem a 3.
- két for ciklus helyett elég egy, ahol az i. elemet hasonlítod össze a hossz-i-1. elemmel.
@#2:
Az csak másképp van, de nem megoldás, ha a programod egészen mást művel, mint a példa. Szerintem egyáltalán nem gondoltad át, hogy mit csinálsz a j-ciklussal. Ha mindenáron bele akarsz erőltetni egy j változót, azt elég beállítani a szó végére, és az i-ciklusban már csak csökkentgetni. És igen, mi a csudának ide-oda állítgatni a tukorkep értékét? Nem, mintha átlátnám, hogy pontosan mi történik, de ez jóra nem vezethet. Már eleve nem értem a kezdeti false-ra állítását sem. Nem egyszerűbb lett volna, ha eleve feltételezed, hogy tükörszóról van szó, és akkor vált false-ra, amikor a betűpár két tagja nem azonos -- akár már az első összehasonlításnál? És azzal aztán kész, abban a pillanatban vége is a vizsgálatnak. A ciklusnak csak akkor kéne végigfutnia, ha tényleg minden stimmel, és ki lehet írni boldogan a változatlanul maradt true értéket.
Ez egy klasszikus eldöntés, amire programozási tétel is van:
1. Feltételezzük, hogy igaz az állítás.
2. Végigmegyünk az elemeken és ha találunk ellenpéldát, akkor az állítás hamis (rögtön kilépünk)
3. Ha végigértünk kilépés nélkül, akkor valóban igaz volt az állítás.
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!