Mi ebben a hiba?
Most kezdtem C++ programozást tanulni és kifogott rajtam ez a feladat:
Írj programot, amely beolvas a billentyűzetről 5 egész számot, és kiír a monitorra egy megfelelő
üzenetet aszerint, hogy volt-e közöttük negatív páratlan.
Megírtam a kódot és működik, viszont bármilyen értéket is olvasok, az a válasza hogy van közöttük negatív páratlan érték. Valaki segítene megtalálni a hibát, én nem látom. :) Köszönöm előre is!
#include <iostream>
using namespace std;
int main()
{
int x1,x2,x3,x4,x5,y;
y = 0;
cin >> x1 >> x2 >> x3 >> x4 >> x5;
if (x1<0 && x1%2==1) {
y = 1;
}
if (x2<0 && x2%2==1); {
y = 1;
}
if (x3<0 && x3%2==1); {
y = 1;
}
if (x4<0 && x4%2==1); {
y = 1;
}
if (x5<0 && x5%2==1); {
y = 1;
}
if (y==1) {
cout << "van negativ paratlan";
}
else {
cout << "nincs negativ paratlan";
}
return 0;
}
Lépésenként futtasd le és rögtön meglátod.
Egyébként négy felesleges pontosvessző...
Ahogy SImkó úr mondotta, az if statement-ek után végig tettél pontosvesszőt, így még a zárójelben foglalt blokk előtt lezártad magát az elágazást. Egyébiránt ezt sokkal szebben lehetne megoldani, ha ciklussal végeznéd el a dolgot, és egy tömbbe olvasnád be:
int n = 5;
int numbers[n];
for(int i=0; i<n; i++)
{
    std::cout<<"Add meg a(z) "<<i<<". számot: ";
    std::cin>>numbers[i];
}
bool isOddNegative = false;
for(int i=0; i<n; i++)
{
    if(numbers[i] < 0 && numbers[i] % 2 == 1)
        isOddNegative = true;
}
Sőt, mivel a beolvasott adatokkal később semmilyen egyéb dolgot nem akarsz csinálni, ezért nem is kell őket eltárolni egy tömbbe, hanem rögtön ahogy beolvasod, fel si dolgozhatod:
bool isOddNegative = false;
for(int i=0; i<n; i++)
{
    int x;
    std::cout<<"Add meg a(z) "<<i<<". számot: ";
    std::cin>>x;
    if(x < 0 && x % 2 == 1)
        isOddNegative = true;
}
LEhet ezen még tovább okosítani, de kezdetnek ez is nagy előrelépés.
Utolsó válaszoló: ezzel az a baj, hogy minden alkalommal felülírod az isOddNegative változót, és így az utolsó paritását írja majd ki.
A megoldás: mivel nem dolgozol később az adatokkal, egyszerűen egy változóban el lehet intézni, nem kell mindet eltárolni.
Mi ebben a hiba?
Most kezdtem C++ programozást tanulni és kifogott rajtam ez a feladat:
Írj programot, amely beolvas a billentyűzetről 5 egész számot, és kiír a monitorra egy megfelelő
üzenetet aszerint, hogy volt-e közöttük negatív páratlan.
Megírtam a kódot és működik, viszont bármilyen értéket is olvasok, az a válasza hogy van közöttük negatív páratlan érték. Valaki segítene megtalálni a hibát, én nem látom. :) Köszönöm előre is!
#include <iostream>
using namespace std;
int main()
{
int szam;
bool volt_paratlannegativ=false;
for(int i=1; i<=5; i++){
cin >> szam;
if(szam%2!=0 && szam<0)
volt_paratlannegativ=true;
}
if(volt_paratlannegativ)
cout << "Volt";
else
cout << "Nem volt";
return 0;
}
Mindazonáltal még tévedsz is, a bool változó értéke nem az utolsó paritását fogja eltárolni. Nem az szerepel a kódban, hogy
isOddNegative = (x<0 && x%2 == 1);
Ha ez lenne, akkor igazad lenne. Amit én írtam, abban viszont a bool értéke kizárólag true-ra állítódhat a kezdeti inicializálás után, tehát az egyetlen kifogásolható dolog az, hogy fölöslegesen beállítom többször is az értékét, mikor az első teljesülés után már úgysem fog változni. De nem akartam túlcifrázni a kérdezőnek, ezért így hagytam.
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!