Kezdőoldal » Számítástechnika » Programozás » C programozásnál az megoldható...

C programozásnál az megoldható, hogy addig szorozzon egy számot 0,2-vel amíg el nem éri az x számot és aztán kiírja, hogy hányszor kellett neki beszorozni ahhoz, hogy elérje az x számot? Do while ciklussal próbálkozok de valahogy nem akarja kiírni.

Figyelt kérdés

Így állok eddig nagyjából. (Ez a programomnak a lényege).

ora =0.2,i=0;

Do {

ora=(ora*x)

i++;

}while (ora==x);

printf ("%d",ora);



2016. okt. 11. 20:39
1 2
 1/20 anonim ***** válasza:

Pro tip #1: Ha lebegőpontos számokkal számolsz, akkor nem ==-vel nézed meg, hogy egyenlőek-e, hanem így: abs(ora-x) < 1e-15


Pro tip #2: ora = (ora*x) az ugyanaz, mint az ora *= x

2016. okt. 11. 20:55
Hasznos számodra ez a válasz?
 2/20 A kérdező kommentje:
Ezt most nem értem. do {}while()<-- ez azt jelenti,hogy eddig mennyen nem? Akkor miért nem jó,hogy ora==x. Előtte ott egy i++ tehát elvileg növelnie kellene ora==x-ig,majd ciklus után kiiratni,hogy hányszor kellett növelnie,bár lehet ahhoz még egy count változót is be kellene vezetni.
2016. okt. 11. 21:01
 3/20 anonim válasza:
Pro tip #3: ha elöl vizsgálós ciklust használsz, akkor működni fog akkor is, ha x eleve 0,2.
2016. okt. 11. 21:02
Hasznos számodra ez a válasz?
 4/20 A kérdező kommentje:
De x nem lehet 0,2 mert az x az egy szám lesz mondjuk 20 (de mindig más). 0,2*100=20. Ezt szeretném megadni,hogy mindig addig szorozzon míg el nem éri a jelenesetben a 20-t.
2016. okt. 11. 21:04
 5/20 anonim ***** válasza:

"Akkor miért nem jó,hogy ora==x"

Egyrészt a lebegőpontos számábrázolás pontatlanságai miatt, másrészt mert mi a garancia, hogy egyszer is egyenlő lesz a két szám?

Egyébként te most az osztást akarod feltalálni?

Mert arra meg kitalálták az osztás operátort.

2016. okt. 11. 21:22
Hasznos számodra ez a válasz?
 6/20 A kérdező kommentje:

Ne haragudjatok meg,de mi nem érthető ezen amit kérdezek?

Ezt szeretném megcsinálni -> A 0,2 -t addig szorozza be nem tudom mennyivel ez a számtól függ amíg el nem éri az x számot (amit a felhasználó ad meg). Majd írassa ki,hogy hányszor kellett beszoroznia a 0,2-t,hogy elérje az x számot.

2016. okt. 11. 21:27
 7/20 anonim ***** válasza:

Az, hogy ezt úgy kell kiszámolni, hogy

double result = x / 0.2;

2016. okt. 11. 21:30
Hasznos számodra ez a válasz?
 8/20 anonim ***** válasza:
Egyébként a programod véletlenül sem ezt csinálja.
2016. okt. 11. 21:36
Hasznos számodra ez a válasz?
 9/20 A kérdező kommentje:
Ez még kezdetleges változatban van, ezért is tettem fel a kérdést, mert tudom,hogy nem így kell megcsinálni.
2016. okt. 11. 21:41
 10/20 tabaki ***** válasza:

„Ezt most nem értem. do {}while()<-- ez azt jelenti,hogy eddig mennyen nem? Akkor miért nem jó,hogy ora==x.”


Nem azt jelenti, hogy ora==x-ig menjen, hanem, hogy ora==x esetén álljon le, ami marha nagy különbség. A te változatodban akkor is ismételget, ha ora<x, meg akkor is, ha ora>x. A lebegőpontos műveletek pontossága köztudomásúlag nem végtelen, ezért mindig számítani kell rá, hogy a számábrázolás korlátaiból adódó számolási hibák galibát okozhatnak. Ha az ismétlődő műveletek során felhalmozódik mondjuk 0.000000001 eltérés a számtanilag helyes és az ábrázolható eredmény között, akkor az egyenlőséged soha sem fog teljesülni. A programod nagyon lelkiismeretesen megvizsgálja, hogy azonos-e a két szám, és mivel nyilvánvalóan nem azonos, szépen elmegy az x-ed mellett, és onnantól már mehet is ítéletnapig, mert többször már a büdös életben nem fordul elő ez a csillagállás. Ezért kell azt vizsgálni, hogy egy tartományon belül van-e, esetleg, hogy az összehasonlított számok különbsége kisebb-e valamekkora tűrésnél.

2016. okt. 11. 21:52
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!