Forum » Programiranje » [C] Naloga
[C] Naloga
Apfelsaft ::
Napisal sem program, ki dana kota v stopinjah, minutah in sekundah pretvori v radiane in sešteje nato pa vsoto pretvori nazaj v stopinje, minute in sekunde.
Ni mi jasno zakaj ne deluje kot bi moral.
Ni mi jasno zakaj ne deluje kot bi moral.
#include <stdio.h> int main(void) { int sekunda1, minuta1, stopinja1; int sekunda2, minuta2, stopinja2; int sekunda, minuta, stopinja; double radian1, radian2, radian; double vsota; printf("Sekunde: "); scanf("%d", &sekunda1); printf("Minute: "); scanf("%d", &minuta1); printf("Stopinje: "); scanf("%d", &stopinja1); radian1 = (stopinja1 * 3600 + minuta1 * 60 + sekunda1) * 4.848e-6; printf("\nSekunde: "); scanf("%d", &sekunda2); printf("Minute: "); scanf("%d", &minuta2); printf("Stopinje: "); scanf("%d", &stopinja2); radian2 = (stopinja2 * 3600 + minuta2 * 60 + sekunda2) * 4.848e-6; radian = radian1 + radian2; vsota = radian * 57.296; stopinja = vsota; vsota = vsota - stopinja; vsota = vsota * 60; minuta = vsota; vsota = vsota - minuta; vsota = vsota * 60; sekunda = vsota + 0.5; printf("\nSekunde: %d", sekunda); printf("\nMinute: %d", minuta); printf("\nStopinje: %d", stopinja); return 0; }
- spremenilo: Apfelsaft ()
epicVoid ::
Ja stopinja je tipa integer vsota pa tipa double in ti shranjujes spremenljivko tipa double v spremenljivko tipa integer.
Apfelsaft ::
Seveda razumem.
Bistveno je, da se bo v spremenljivko stopinja zapisalo realno število shranjeno v spremenljivki vsota. Rezultat bo seveda celoštevilski, kar je tudi cilj. Z ostankom pa delam naprej.
Bistveno je, da se bo v spremenljivko stopinja zapisalo realno število shranjeno v spremenljivki vsota. Rezultat bo seveda celoštevilski, kar je tudi cilj. Z ostankom pa delam naprej.
mallard ::
Ne deluje zato, ker računanje s plavajočo vejico že samo po sebi ni natančno, ti pa situacijo še poslabšaš, ker zaokrožuješ in potem še potenciraš napako. Stopinjo, izraženo v radianih, si zakrožil na 4.848 * 10^-6, prava vrednost (v double tipu) pa je v resnici 4,8481368110953599358991410235795 * 10^-6. Ko to parkrat pomnožiš, npr. z 10^6, in potem pretvoriš v celo številski tip, pa potem spet deliš, se ti napake nabirajo in na koncu ti rezultat striže za cele sekunde. Malo poguglaj, kako plavajoča vejica deluje.
ragezor ::
ja meni je tisto zgledalo kot da dobis 0 oziroma 0.xxx
ampak ce hoces to dobiti potem kul.
ampak ce hoces to dobiti potem kul.
Apfelsaft ::
Ok, hvala vsem. Očitno ni nikoli odveč uporabiti toliko decimalnih mest kot jih je na voljo.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C in računanje kotovOddelek: Programiranje | 6644 (5697) | RatedR |
» | c napaka .c:4:1: error: expected identifier or '(' before '{' tokenOddelek: Programiranje | 1946 (1519) | MrStein |
» | [C] Vsota števil v poljuOddelek: Programiranje | 1284 (1222) | Cvenemir |
» | [c] char zadevaOddelek: Programiranje | 2262 (2060) | TheCyborg |
» | Kako bi naredil en ultra simple programček?Oddelek: Programiranje | 2334 (1615) | AtaStrumf |