Ebben az egyszerű c++ programban miért működik a páros, páratlan megállapíts?
#include <iostream>
#include <math.h>
using namespace std;
int main ()
{
setlocale(LC_ALL,"Hun");
int a;
cout<<"________________________________________________________________________________"<<endl;
cout<<"Feladatom ez volt: Kérj be egy számot, ha negatív vedd az abszolút értékét,"<<endl;
cout<<"utána döntsd el páros-e vagy páratlan és a végen szorozd meg 10-zel!"<<endl;
cout<<"________________________________________________________________________________"<<endl;
cout<<endl;
cout<<"Kérem a számot: ";
cin>>a;
if (a<0)
{
cout<<"Csak pozitív szám lehet, így az abszolút értéke: "<<a*-1<<endl;
}
else
{
cout<<"A szám pozitív, tehát nem változik: "<<a*1<<endl;
}
if (a%2)
{
if (a>0)
{
cout<<"A megadott szám: PÁRATLAN!"<<endl;
}
if (a==0)
{
cout<<"A megadott szám: PÁROS!"<<endl;
}
}
cout<<"Végül a szám szorozva 10-zel: "<<a*10<<endl;
return 0;
}
Nemtom', ki hogy van vele, de szerintem ez nem korrekt:
if (a%2)
{
..if (a>0)
..{
....cout<<"A megadott szám: PÁRATLAN!"<<endl;
..}
..if (a==0)
..{
....cout<<"A megadott szám: PÁROS!"<<endl;
..}
}
(a%2) feltétellel eleve csak páratlanokra fut le, belül meg az előjel alapján dönti el a paritást, aminek nem sok értelme van.
Szóval a kérdést úgy módosítanám, hogy miért NEM működik ez az egyszerű kód. Válasz 2 sorral feljebb.
Jah...
"Ez egy elég szar kód." De indoklás hol marad?
Érted... Most mit értsünk "szar kód" alatt?
Mellesleg ez nem szar kód, hanem szemantikai hiba. Hívjuk nevén, ha már van rá szakszó.
Szerintem nem szemantikai hanem logikai hiba. A szemantika az a típusrendszer meg egyéb, a szintaktikára ráépülő szarok.
"A C/C++ nyelvben a 0 felel meg a hamis értéknek és minden más az igaznak."
Ez meg hazugság. C-ben igen. C++-ban van egy bool típus. A számok KONVERTÁLÓDNAK a fent említett szabályok alapján bool-lá.
@iostream
Tévedsz... A bool-t is számként ábrázolja háttérben, de sebaj.
Probáld ki:
int i = 0;
bool b = false;
if(i == b) { ... }
Ezzel most mit akartál bizonyítani? Mert nekem úgy tűnik, hogy össze akarsz hasonlítani két különböző típusú elemet, amik először közös típusra lesznek hozva (valószínűleg intre, de utána kéne nézni pontosan), majd össze lesznek hasonlítva. Bool konvertálódik intre: true -> 1, false -> 0.
Az, hogy a HÁTTÉRBEN hogy van ábrázolva, a legkevésbé sem érdekel, legalábbis abból a szempontból, hogy
"A C/C++ nyelvben a 0 felel meg a hamis értéknek és minden más az igaznak."
C++-ban bool van, aminek két lehetséges értéke van, próbáld ki:
bool b(200);
int x(b);
if (x == 200)
{
system("format c:");
}
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!