Kezdőoldal » Számítástechnika » Programozás » Mi ebben a hiba?

Mi ebben a hiba?

Figyelt kérdés

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;

}



2017. szept. 30. 16:06
 1/8 SimkoL ***** válasza:
100%
Pontosvessző...
2017. szept. 30. 16:14
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
100%

Lépésenként futtasd le és rögtön meglátod.

Egyébként négy felesleges pontosvessző...

2017. szept. 30. 16:20
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:
Kitöröltem őket, viszont így minden esetben a másik lehetőséget írja ki.
2017. szept. 30. 16:22
 4/8 anonim ***** válasza:
0%
Mi a búbánatos rosseb f#sza akar ez lenni?
2017. szept. 30. 16:26
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:
100%

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.

2017. szept. 30. 16:26
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:
0%

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;

}

2017. okt. 1. 15:07
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:
utolsó vagyok, bocsi, a ctrl+c nél megszaladt az egér :D
2017. okt. 1. 15:08
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:

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.

2017. okt. 1. 15:31
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!