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 | 7173 (6226) | RatedR |
| » | c napaka .c:4:1: error: expected identifier or '(' before '{' tokenOddelek: Programiranje | 2089 (1662) | MrStein |
| » | [C] Vsota števil v poljuOddelek: Programiranje | 1420 (1358) | Cvenemir |
| » | [c] char zadevaOddelek: Programiranje | 2387 (2185) | TheCyborg |
| » | Kako bi naredil en ultra simple programček?Oddelek: Programiranje | 2483 (1764) | AtaStrumf |