Kezdőoldal » Számítástechnika » Programozás » Az miért van hogy ez a feltéte...

Az miért van hogy ez a feltétel mindig teljesül?

Figyelt kérdés

void cKeno::i_setTet(void)

{

bool x = false, y = true ;

do

{

if(x == true)

{

cout << "Csak ezekkel a tetekkel rakhatod meg: (0.30),(0.60),(0.90),(1,20) ! \n"

<< "Add be ujra a tetet: " ;

cin >> this->i_tet ;

}


if(x == false)

{

x = true ;

cout << "\nMennyiert adod fel a szelvenyt(0.30),(0.60),(0.90),(1,20): " ;

cin >> this->i_tet ;

if(this->i_tet == 0.30 || 0.60 || 0.90 || 1.20)

y = false ;

}

}while(y) ;

}


2012. nov. 2. 23:09
1 2
 1/13 A kérdező kommentje:

if(this->i_tet == 0.30 || 0.60 || 0.90 || 1.20)

Egész számokat adok be és teljesül mindig.

Hihetetlen.

2012. nov. 2. 23:10
 2/13 anonim ***** válasza:

1., i_tet integer változó?

2., próbáld meg így: if((i_tet == 0.30) || (i_tet == 0.60)...

2012. nov. 2. 23:18
Hasznos számodra ez a válasz?
 3/13 A kérdező kommentje:
float változó.
2012. nov. 2. 23:19
 4/13 iostream ***** válasza:

[link]


Ezt tanulmányozd. Segítek, az == és az || is operátor, precedenciával. Zárójelezd be a kifejezést úgy, ahogy a precedenciájuk adná, és csodálkozz.

2012. nov. 2. 23:30
Hasznos számodra ez a válasz?
 5/13 anonim ***** válasza:

Mit is jelent ez a c++ nyelvén?

if(this->i_tet == 0.30 || 0.60 || 0.90 || 1.20)

Ugyan ezt:

if(this->i_tet == 0.30 || 1 || 1 || 1)


Illetve Ugyan ezt:

if(this->i_tet == 0.30 || true || true || true)

------

Miért is?

if (kif) ...

akkor teljesül ha kif értéke nem 0. 0 hamis nem 0 igaz.

this->i_tet == 0.30 ez a kifejezés visszaad egy értéket a {0,1} halmaz egy elemét, utána "vagy" van ami után lévő kifejezés, konstans változó függvény ... bármi ami nem 0 értéket ad vissza, itt konkrétan egy nem 0 konstans a 0,30 így mindig igaz lesz.

2012. nov. 2. 23:43
Hasznos számodra ez a válasz?
 6/13 A kérdező kommentje:

if(this->i_tet == (0.30 || 0.60 || 0.90 || 1.20))

Most meg állandóan hamisat ad vissza minden esetben.

Miért nem jó.

2012. nov. 2. 23:51
 7/13 anonim ***** válasza:
2. válasz, 2. pont. Úgy értsd az átzárójelezést.
2012. nov. 3. 00:14
Hasznos számodra ez a válasz?
 8/13 A kérdező kommentje:

if((this->i_tet == 0.30) || (this->i_tet == 0.60) || (this->i_tet == 0.90) || (this->i_tet == 1.20))


Így sem jó.

Az i_tet egy float pedig hiába adok be 0.30 vagy 0.60 akkor is rossz minden esetben hamis.

Sosem teljesül a feltétel.

2012. nov. 3. 00:26
 9/13 anonim ***** válasza:

if(this->i_tet == (0.30 || 0.60 || 0.90 || 1.20))

A (0.30 || 0.60 || 0.90 || 1.20) 1-re értékelődik ki, ha megértetted volna amit írtam akkor tudtad volna, azt is hogy miért 1.

--------

"Így sem jó.

Az i_tet egy float pedig hiába adok be 0.30 vagy 0.60 akkor is rossz minden esetben hamis.

Sosem teljesül a feltétel."

Ide meg nem ártana egy kis numerikus matek ismeret, a gép által használt (lebegőpontos) véges pontosságú aritmetikába nem ábrázolható minden szám pontosan, míg egész számoknál az egészek pontosan, addig valósaknál nem ábrázolhatóak pontosan de pl a 0.5 pontosan ábrázolható.

Melleselg nem igaz az az aszociativitás tulajdonsága sem ... a hatékonyság miatt, de ne menjünk bele.

Első megközelítésbe float helyett használj double-t, ez dupla pontosságú több számot ábrázol pontosan. (Viszont lassabb, persze ez itt elhanyagolható.)

2012. nov. 3. 01:09
Hasznos számodra ez a válasz?
 10/13 iostream ***** válasza:

Jók a válaszaid, de azok a -ban-ben ragok fájnak (vagyis a hiányuk, -ba-be raggal kicsúfolásuk).


Az ábrázoláshoz pedig itt egy ökölszabály: lebegőpontos számot soha nem vizsgálunk egyenlőségre. Amúgy a valós az egy hülye név rá, mert az egész számok is valósak, a float semennyivel sem valósabb, mint az int.

2012. nov. 3. 01:20
Hasznos számodra ez a válasz?
1 2

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!