Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
GauSs_ Moderator
Pridružen/a: 28. 01. 2004. (21:01:17) Postovi: (53C)16
Spol:
Lokacija: 231
|
Postano: 21:32 pon, 29. 4. 2013 Naslov: |
|
|
[quote="dalmatinčica"]Trokut t(0.9999, 1.0001, 1);
[/quote]
Takav se primjer nece pojaviti. Svi ce primjeri biti lijepi ;)
[quote]
Što treba vratiti t.tipTrokuta()?
što treba vratiti t.kutovi() ako su kutevi 60, 60.01, 59.99?[/quote]
jednakostranican. Uvijek radite s uzim tipom. Znaci, ako nesto moze biti jednakostranican (do na 0.01) onda je jednakostranican
dalmatinčica (napisa): | Trokut t(0.9999, 1.0001, 1);
|
Takav se primjer nece pojaviti. Svi ce primjeri biti lijepi
Citat: |
Što treba vratiti t.tipTrokuta()?
što treba vratiti t.kutovi() ako su kutevi 60, 60.01, 59.99? |
jednakostranican. Uvijek radite s uzim tipom. Znaci, ako nesto moze biti jednakostranican (do na 0.01) onda je jednakostranican
_________________ The purpose of life is to end
Prosle su godine kolokviji bili laksi, zar ne?
|
|
[Vrh] |
|
Loo Forumaš(ica)
Pridružen/a: 11. 06. 2012. (16:02:07) Postovi: (D0)16
Spol:
|
Postano: 11:10 uto, 30. 4. 2013 Naslov: |
|
|
a je li Trokut(1.01, 1.02, 1.03) lijep primjer? :wink:
ne znam pod što bi ga svrstala, odnosno čini mi se da je za ovakve primjere nezgodno odlučiti na što ćemo "zaokružiti" koju stranicu.
treba li zapravo uopće zaokruživati stranice i kuteve? ili se ona primjedba da je dopuštena greška 0.01 odnosila više na ispis, odnosno da nije problem ako nam umjesto 59.01 ispiše 59 i slično.
zanimalo me i treba li funkcija za površinu računati površinu ako npr pozovemo JednakostranicanTrokut t(2,2,3)?
a je li Trokut(1.01, 1.02, 1.03) lijep primjer?
ne znam pod što bi ga svrstala, odnosno čini mi se da je za ovakve primjere nezgodno odlučiti na što ćemo "zaokružiti" koju stranicu.
treba li zapravo uopće zaokruživati stranice i kuteve? ili se ona primjedba da je dopuštena greška 0.01 odnosila više na ispis, odnosno da nije problem ako nam umjesto 59.01 ispiše 59 i slično.
zanimalo me i treba li funkcija za površinu računati površinu ako npr pozovemo JednakostranicanTrokut t(2,2,3)?
|
|
[Vrh] |
|
GauSs_ Moderator
Pridružen/a: 28. 01. 2004. (21:01:17) Postovi: (53C)16
Spol:
Lokacija: 231
|
Postano: 15:40 uto, 30. 4. 2013 Naslov: |
|
|
[quote="Loo"]a je li Trokut(1.01, 1.02, 1.03) lijep primjer? :wink:
ne znam pod što bi ga svrstala, odnosno čini mi se da je za ovakve primjere nezgodno odlučiti na što ćemo "zaokružiti" koju stranicu.
treba li zapravo uopće zaokruživati stranice i kuteve? ili se ona primjedba da je dopuštena greška 0.01 odnosila više na ispis, odnosno da nije problem ako nam umjesto 59.01 ispiše 59 i slično.[/quote]
ne treba zaokruzivati ulazne podatke. Da, primjedba se odnosi na rezultate
[quote]
zanimalo me i treba li funkcija za površinu računati površinu ako npr pozovemo JednakostranicanTrokut t(2,2,3)?[/quote]
jednakostranican ne bi trebao imati takav konstruktor
Loo (napisa): | a je li Trokut(1.01, 1.02, 1.03) lijep primjer?
ne znam pod što bi ga svrstala, odnosno čini mi se da je za ovakve primjere nezgodno odlučiti na što ćemo "zaokružiti" koju stranicu.
treba li zapravo uopće zaokruživati stranice i kuteve? ili se ona primjedba da je dopuštena greška 0.01 odnosila više na ispis, odnosno da nije problem ako nam umjesto 59.01 ispiše 59 i slično. |
ne treba zaokruzivati ulazne podatke. Da, primjedba se odnosi na rezultate
Citat: |
zanimalo me i treba li funkcija za površinu računati površinu ako npr pozovemo JednakostranicanTrokut t(2,2,3)? |
jednakostranican ne bi trebao imati takav konstruktor
_________________ The purpose of life is to end
Prosle su godine kolokviji bili laksi, zar ne?
|
|
[Vrh] |
|
Bole13 Forumaš(ica)
Pridružen/a: 01. 11. 2008. (00:33:50) Postovi: (5A)16
Spol:
|
|
[Vrh] |
|
GauSs_ Moderator
Pridružen/a: 28. 01. 2004. (21:01:17) Postovi: (53C)16
Spol:
Lokacija: 231
|
Postano: 16:15 uto, 30. 4. 2013 Naslov: |
|
|
[quote="Bole13"]Je li onda dovoljno recimo u metodi ispravanTip u klasi Trokut provjeriti standardnu nejednakost trokuta ili moramo uzimati u obzir kod takvih provjera tu dozvoljenu razliku od 0.01?
Mislim dosta je razlike hoću li u tipTrokuta imati samo provjeru je li str1==str2 i str2==str3 za jednakostranican ili ću gledati upada li stranica str1 npr. u interval [str2-0.01, str2+0.01].[/quote]
ne treba provjeravati dozvoljenu razliku u tom slucaju
Bole13 (napisa): | Je li onda dovoljno recimo u metodi ispravanTip u klasi Trokut provjeriti standardnu nejednakost trokuta ili moramo uzimati u obzir kod takvih provjera tu dozvoljenu razliku od 0.01?
Mislim dosta je razlike hoću li u tipTrokuta imati samo provjeru je li str1==str2 i str2==str3 za jednakostranican ili ću gledati upada li stranica str1 npr. u interval [str2-0.01, str2+0.01]. |
ne treba provjeravati dozvoljenu razliku u tom slucaju
_________________ The purpose of life is to end
Prosle su godine kolokviji bili laksi, zar ne?
|
|
[Vrh] |
|
rom Forumaš(ica)
Pridružen/a: 26. 10. 2010. (11:10:35) Postovi: (2D)16
|
Postano: 19:00 uto, 30. 4. 2013 Naslov: |
|
|
ne razumijem , sada ste rekli
[quote="GauSs_"]ne treba provjeravati dozvoljenu razliku u tom slucaju[/quote]
a par postova gore
[quote="GauSs_"]jednakostranican. Uvijek radite s uzim tipom. Znaci, ako nesto moze biti jednakostranican (do na 0.01) onda je jednakostranican[/quote]
ako svom programu posaljem tocke (1,2) (4,2) (2.5,4.59808) konstruktoru za Trokut meni ce ispisati za kuteve da su 59.9999 i 60, a za tipTrokuta() ce mi ispisati da je jednakokracan jer provjeravam samo jednakost stranica bez dopustene greske
a ako te tocke posaljem konstruktoru za JednakostranicanTrokut past ce mi funkcija ispravanTip() jer mi je jedna stranica 3 a druge dvije 3.000001.
pretpostavljam da ce takvih primjera biti, a to znaci da ipak trebamo provjeravati i uz odstupanje od 0.01?
ne razumijem , sada ste rekli
GauSs_ (napisa): | ne treba provjeravati dozvoljenu razliku u tom slucaju |
a par postova gore
GauSs_ (napisa): | jednakostranican. Uvijek radite s uzim tipom. Znaci, ako nesto moze biti jednakostranican (do na 0.01) onda je jednakostranican |
ako svom programu posaljem tocke (1,2) (4,2) (2.5,4.59808) konstruktoru za Trokut meni ce ispisati za kuteve da su 59.9999 i 60, a za tipTrokuta() ce mi ispisati da je jednakokracan jer provjeravam samo jednakost stranica bez dopustene greske
a ako te tocke posaljem konstruktoru za JednakostranicanTrokut past ce mi funkcija ispravanTip() jer mi je jedna stranica 3 a druge dvije 3.000001.
pretpostavljam da ce takvih primjera biti, a to znaci da ipak trebamo provjeravati i uz odstupanje od 0.01?
|
|
[Vrh] |
|
GauSs_ Moderator
Pridružen/a: 28. 01. 2004. (21:01:17) Postovi: (53C)16
Spol:
Lokacija: 231
|
Postano: 19:58 uto, 30. 4. 2013 Naslov: |
|
|
[quote="rom"]ne razumijem , sada ste rekli
[quote="GauSs_"]ne treba provjeravati dozvoljenu razliku u tom slucaju[/quote]
a par postova gore
[quote="GauSs_"]jednakostranican. Uvijek radite s uzim tipom. Znaci, ako nesto moze biti jednakostranican (do na 0.01) onda je jednakostranican[/quote]
[/quote]
To se odnosilo na kutove. Stvari koje vi racunate (vase rezultate mozete gledati do tocnosti 0.01).
[quote]
ako svom programu posaljem tocke (1,2) (4,2) (2.5,4.59808) konstruktoru za Trokut meni ce ispisati za kuteve da su 59.9999 i 60, a za tipTrokuta() ce mi ispisati da je jednakokracan jer provjeravam samo jednakost stranica bez dopustene greske
a ako te tocke posaljem konstruktoru za JednakostranicanTrokut past ce mi funkcija ispravanTip() jer mi je jedna stranica 3 a druge dvije 3.000001.
pretpostavljam da ce takvih primjera biti, a to znaci da ipak trebamo provjeravati i uz odstupanje od 0.01?[/quote]
Nece biti takvih primjera!!!
rom (napisa): | ne razumijem , sada ste rekli
GauSs_ (napisa): | ne treba provjeravati dozvoljenu razliku u tom slucaju |
a par postova gore
GauSs_ (napisa): | jednakostranican. Uvijek radite s uzim tipom. Znaci, ako nesto moze biti jednakostranican (do na 0.01) onda je jednakostranican |
|
To se odnosilo na kutove. Stvari koje vi racunate (vase rezultate mozete gledati do tocnosti 0.01).
Citat: |
ako svom programu posaljem tocke (1,2) (4,2) (2.5,4.59808) konstruktoru za Trokut meni ce ispisati za kuteve da su 59.9999 i 60, a za tipTrokuta() ce mi ispisati da je jednakokracan jer provjeravam samo jednakost stranica bez dopustene greske
a ako te tocke posaljem konstruktoru za JednakostranicanTrokut past ce mi funkcija ispravanTip() jer mi je jedna stranica 3 a druge dvije 3.000001.
pretpostavljam da ce takvih primjera biti, a to znaci da ipak trebamo provjeravati i uz odstupanje od 0.01? |
Nece biti takvih primjera!!!
_________________ The purpose of life is to end
Prosle su godine kolokviji bili laksi, zar ne?
|
|
[Vrh] |
|
Loo Forumaš(ica)
Pridružen/a: 11. 06. 2012. (16:02:07) Postovi: (D0)16
Spol:
|
Postano: 21:25 sri, 1. 5. 2013 Naslov: |
|
|
[quote="GauSs_"]
[quote]
zanimalo me i treba li funkcija za površinu računati površinu ako npr pozovemo JednakostranicanTrokut t(2,2,3)?[/quote]
jednakostranican ne bi trebao imati takav konstruktor[/quote]
da, isprike, napisala sam to napamet. mislila sam pitati treba li funkcija računati površinu ako stvorimo JednakostranicanTrokut tako da pošaljemo koordinate nečega što je trokut, ali nije jednakostraničan. ili neće biti takvih situacija?
GauSs_ (napisa): |
Citat: |
zanimalo me i treba li funkcija za površinu računati površinu ako npr pozovemo JednakostranicanTrokut t(2,2,3)? |
jednakostranican ne bi trebao imati takav konstruktor |
da, isprike, napisala sam to napamet. mislila sam pitati treba li funkcija računati površinu ako stvorimo JednakostranicanTrokut tako da pošaljemo koordinate nečega što je trokut, ali nije jednakostraničan. ili neće biti takvih situacija?
|
|
[Vrh] |
|
GauSs_ Moderator
Pridružen/a: 28. 01. 2004. (21:01:17) Postovi: (53C)16
Spol:
Lokacija: 231
|
Postano: 22:45 sri, 1. 5. 2013 Naslov: |
|
|
[quote="Loo"][quote="GauSs_"]
[quote]
zanimalo me i treba li funkcija za površinu računati površinu ako npr pozovemo JednakostranicanTrokut t(2,2,3)?[/quote]
jednakostranican ne bi trebao imati takav konstruktor[/quote]
da, isprike, napisala sam to napamet. mislila sam pitati treba li funkcija računati površinu ako stvorimo JednakostranicanTrokut tako da pošaljemo koordinate nečega što je trokut, ali nije jednakostraničan. ili neće biti takvih situacija?[/quote]
nece biti takvih situacija
Loo (napisa): | GauSs_ (napisa): |
Citat: |
zanimalo me i treba li funkcija za površinu računati površinu ako npr pozovemo JednakostranicanTrokut t(2,2,3)? |
jednakostranican ne bi trebao imati takav konstruktor |
da, isprike, napisala sam to napamet. mislila sam pitati treba li funkcija računati površinu ako stvorimo JednakostranicanTrokut tako da pošaljemo koordinate nečega što je trokut, ali nije jednakostraničan. ili neće biti takvih situacija? |
nece biti takvih situacija
_________________ The purpose of life is to end
Prosle su godine kolokviji bili laksi, zar ne?
|
|
[Vrh] |
|
moni_poni Forumaš(ica)
Pridružen/a: 25. 01. 2010. (19:48:19) Postovi: (49)16
|
|
[Vrh] |
|
GauSs_ Moderator
Pridružen/a: 28. 01. 2004. (21:01:17) Postovi: (53C)16
Spol:
Lokacija: 231
|
Postano: 13:20 čet, 2. 5. 2013 Naslov: |
|
|
[quote="moni_poni"]Moraju li se u testnom primjeru kutevi 120 i 30 ispisivati tim redoslijedom ili redoslijed nije bitan?[/quote]
Ispisivat ce se kao 30 i 120 jer je set sortiran uzlazno za double-ove
moni_poni (napisa): | Moraju li se u testnom primjeru kutevi 120 i 30 ispisivati tim redoslijedom ili redoslijed nije bitan? |
Ispisivat ce se kao 30 i 120 jer je set sortiran uzlazno za double-ove
_________________ The purpose of life is to end
Prosle su godine kolokviji bili laksi, zar ne?
|
|
[Vrh] |
|
Pavlek Forumaš(ica)
Pridružen/a: 30. 11. 2011. (21:05:53) Postovi: (E)16
Spol:
|
|
[Vrh] |
|
GauSs_ Moderator
Pridružen/a: 28. 01. 2004. (21:01:17) Postovi: (53C)16
Spol:
Lokacija: 231
|
Postano: 21:58 čet, 2. 5. 2013 Naslov: |
|
|
[quote="Pavlek"]Što treba vratiti funkcija tipTrokuta() za Trokut A(2,2,5) tj. ako nije trokut?[/quote]
Nista jer ju necu ni pozivati u tom slucaju. funkcije cu pozivati samo ako je ispravanTip() true
Pavlek (napisa): | Što treba vratiti funkcija tipTrokuta() za Trokut A(2,2,5) tj. ako nije trokut? |
Nista jer ju necu ni pozivati u tom slucaju. funkcije cu pozivati samo ako je ispravanTip() true
_________________ The purpose of life is to end
Prosle su godine kolokviji bili laksi, zar ne?
|
|
[Vrh] |
|
Phoenix Forumaš(ica)
Pridružen/a: 15. 05. 2010. (18:46:07) Postovi: (164)16
Sarma: -
|
Postano: 17:33 pet, 3. 5. 2013 Naslov: |
|
|
Povezano s onim što je vsego napisao [url=http://degiorgi.math.hr/forum/viewtopic.php?p=181794#181794]u ovom postu[/url], imam potrebu nadodati malu napomenu...
Dobio sam nekoliko upita na mail oko zadaće i do sada se svi upiti zasnivaju na to zašto izračuna dva identična broja, a uvjet jednakosti padne.
Dakle, vi napišete ovakav dio koda:
[code:1]double i, j;
// ovdje ide neko računanje i pohranjivanje rezultata u varijable i i j
cout << i << " " << j << endl;
if( i==j )
cout << "jednaki su";
else
cout << "nisu jednaki";[/code:1]
Ali, iz nekog razloga, program ispiše, recimo, sljedeće:
[code:1]8 8
nisu jednaki[/code:1]
I kako ovo popraviti?
Nekako je jasno prihvatiti činjenicu da ono što ispisuje na ekran nije baš identično kao i stanje zapisano u memoriji (inače bi [tt]if[/tt] uvjet prošao). No, razlikuju se u nekoj dovoljno malenoj znamenci zbog koje gornji uvjet pada.
Jedan način je da napišete uvjet kakav je vsego napisao. Nekim kolegama sam već napisao identičan uvjet, no u nešto drugačijem zapisu (a sada ga pišem s manje nula jer vidim da nije potrebna tolika točnost koliku sam na mail pisao):
[code:1]
if( i+0.001 >= j && j+0.001 >= i)
[/code:1]
Kada umjesto uvjeta jednakosti napišete gornji vsegin ili ovaj moj uvjet, dobit ćete ispis:
[code:1]8 8
jednaki su[/code:1]
Ako navedete neki manji broj u zbrajanju, recimo [tex]0.00001[/tex], dobit ćete veću preciznost i bolje računanje u zadatku, no ako stavite previše nula program će se ponašati kao da varijablama pribraja broj [tex]0[/tex], tako da niste ništa novo dobili.
Slične probleme imat ćete i na drugim mjestima u programu. Primjerice: događa li vam se da u zadatku imate jednakokračan trokut, a pri ispisivanju kuteva trokuta dvaput ili čak triput ispiše kut [tex]60°[/tex] umjesto jedan put? Pripazite koje vrijednosti zapravo ubacujete u dani set!
Ovo je inače koristan trik u praksi u slučaju da vam program ne računa najbolje neke vrijednosti. Meni osobno je pomogao u prošlogodišnjoj prvoj zadaći u zadatku Petshop (kada je trebalo pretvarati kupovnu cijenu u prodajnu, pa smo morali množiti dva doublea; nešto slično tome). :)
Povezano s onim što je vsego napisao u ovom postu, imam potrebu nadodati malu napomenu...
Dobio sam nekoliko upita na mail oko zadaće i do sada se svi upiti zasnivaju na to zašto izračuna dva identična broja, a uvjet jednakosti padne.
Dakle, vi napišete ovakav dio koda:
Kod: | double i, j;
// ovdje ide neko računanje i pohranjivanje rezultata u varijable i i j
cout << i << " " << j << endl;
if( i==j )
cout << "jednaki su";
else
cout << "nisu jednaki"; |
Ali, iz nekog razloga, program ispiše, recimo, sljedeće:
I kako ovo popraviti?
Nekako je jasno prihvatiti činjenicu da ono što ispisuje na ekran nije baš identično kao i stanje zapisano u memoriji (inače bi if uvjet prošao). No, razlikuju se u nekoj dovoljno malenoj znamenci zbog koje gornji uvjet pada.
Jedan način je da napišete uvjet kakav je vsego napisao. Nekim kolegama sam već napisao identičan uvjet, no u nešto drugačijem zapisu (a sada ga pišem s manje nula jer vidim da nije potrebna tolika točnost koliku sam na mail pisao):
Kod: |
if( i+0.001 >= j && j+0.001 >= i)
|
Kada umjesto uvjeta jednakosti napišete gornji vsegin ili ovaj moj uvjet, dobit ćete ispis:
Ako navedete neki manji broj u zbrajanju, recimo [tex]0.00001[/tex], dobit ćete veću preciznost i bolje računanje u zadatku, no ako stavite previše nula program će se ponašati kao da varijablama pribraja broj [tex]0[/tex], tako da niste ništa novo dobili.
Slične probleme imat ćete i na drugim mjestima u programu. Primjerice: događa li vam se da u zadatku imate jednakokračan trokut, a pri ispisivanju kuteva trokuta dvaput ili čak triput ispiše kut [tex]60°[/tex] umjesto jedan put? Pripazite koje vrijednosti zapravo ubacujete u dani set!
Ovo je inače koristan trik u praksi u slučaju da vam program ne računa najbolje neke vrijednosti. Meni osobno je pomogao u prošlogodišnjoj prvoj zadaći u zadatku Petshop (kada je trebalo pretvarati kupovnu cijenu u prodajnu, pa smo morali množiti dva doublea; nešto slično tome).
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
GauSs_ Moderator
Pridružen/a: 28. 01. 2004. (21:01:17) Postovi: (53C)16
Spol:
Lokacija: 231
|
Postano: 22:35 pet, 3. 5. 2013 Naslov: |
|
|
[quote="Anonymous"]Jesu li jednakostranični trokuti podvrsta jednakokračnih, odnosno što bi trebala vratiti fja ispravanTip za JednakokracanTrokut a(2,2)?[/quote]
Jednakostranicni su podvrsta jednakokracnih. Vraca true
Anonymous (napisa): | Jesu li jednakostranični trokuti podvrsta jednakokračnih, odnosno što bi trebala vratiti fja ispravanTip za JednakokracanTrokut a(2,2)? |
Jednakostranicni su podvrsta jednakokracnih. Vraca true
_________________ The purpose of life is to end
Prosle su godine kolokviji bili laksi, zar ne?
|
|
[Vrh] |
|
dalmatinčica Forumaš(ica)
Pridružen/a: 01. 10. 2011. (18:46:54) Postovi: (AC)16
|
Postano: 8:47 sub, 4. 5. 2013 Naslov: |
|
|
[quote="Phoenix"]Povezano s onim što je vsego napisao [url=http://degiorgi.math.hr/forum/viewtopic.php?p=181794#181794]u ovom postu[/url], imam potrebu nadodati malu napomenu...
Dobio sam nekoliko upita na mail oko zadaće i do sada se svi upiti zasnivaju na to zašto izračuna dva identična broja, a uvjet jednakosti padne.
Dakle, vi napišete ovakav dio koda:
[code:1]double i, j;
// ovdje ide neko računanje i pohranjivanje rezultata u varijable i i j
cout << i << " " << j << endl;
if( i==j )
cout << "jednaki su";
else
cout << "nisu jednaki";[/code:1]
Ali, iz nekog razloga, program ispiše, recimo, sljedeće:
[code:1]8 8
nisu jednaki[/code:1]
I kako ovo popraviti?
Nekako je jasno prihvatiti činjenicu da ono što ispisuje na ekran nije baš identično kao i stanje zapisano u memoriji (inače bi [tt]if[/tt] uvjet prošao). No, razlikuju se u nekoj dovoljno malenoj znamenci zbog koje gornji uvjet pada.
Jedan način je da napišete uvjet kakav je vsego napisao. Nekim kolegama sam već napisao identičan uvjet, no u nešto drugačijem zapisu (a sada ga pišem s manje nula jer vidim da nije potrebna tolika točnost koliku sam na mail pisao):
[code:1]
if( i+0.001 >= j && j+0.001 >= i)
[/code:1]
Kada umjesto uvjeta jednakosti napišete gornji vsegin ili ovaj moj uvjet, dobit ćete ispis:
[code:1]8 8
jednaki su[/code:1]
Ako navedete neki manji broj u zbrajanju, recimo [tex]0.00001[/tex], dobit ćete veću preciznost i bolje računanje u zadatku, no ako stavite previše nula program će se ponašati kao da varijablama pribraja broj [tex]0[/tex], tako da niste ništa novo dobili.
Slične probleme imat ćete i na drugim mjestima u programu. Primjerice: događa li vam se da u zadatku imate jednakokračan trokut, a pri ispisivanju kuteva trokuta dvaput ili čak triput ispiše kut [tex]60°[/tex] umjesto jedan put? Pripazite koje vrijednosti zapravo ubacujete u dani set!
Ovo je inače koristan trik u praksi u slučaju da vam program ne računa najbolje neke vrijednosti. Meni osobno je pomogao u prošlogodišnjoj prvoj zadaći u zadatku Petshop (kada je trebalo pretvarati kupovnu cijenu u prodajnu, pa smo morali množiti dva doublea; nešto slično tome). :)[/quote]
znači li onda to da kad provjeravamo da li stranice čine trokut da pišemo:
abs(a+b-c)<0.01 ili 0.02
Phoenix (napisa): | Povezano s onim što je vsego napisao u ovom postu, imam potrebu nadodati malu napomenu...
Dobio sam nekoliko upita na mail oko zadaće i do sada se svi upiti zasnivaju na to zašto izračuna dva identična broja, a uvjet jednakosti padne.
Dakle, vi napišete ovakav dio koda:
Kod: | double i, j;
// ovdje ide neko računanje i pohranjivanje rezultata u varijable i i j
cout << i << " " << j << endl;
if( i==j )
cout << "jednaki su";
else
cout << "nisu jednaki"; |
Ali, iz nekog razloga, program ispiše, recimo, sljedeće:
I kako ovo popraviti?
Nekako je jasno prihvatiti činjenicu da ono što ispisuje na ekran nije baš identično kao i stanje zapisano u memoriji (inače bi if uvjet prošao). No, razlikuju se u nekoj dovoljno malenoj znamenci zbog koje gornji uvjet pada.
Jedan način je da napišete uvjet kakav je vsego napisao. Nekim kolegama sam već napisao identičan uvjet, no u nešto drugačijem zapisu (a sada ga pišem s manje nula jer vidim da nije potrebna tolika točnost koliku sam na mail pisao):
Kod: |
if( i+0.001 >= j && j+0.001 >= i)
|
Kada umjesto uvjeta jednakosti napišete gornji vsegin ili ovaj moj uvjet, dobit ćete ispis:
Ako navedete neki manji broj u zbrajanju, recimo [tex]0.00001[/tex], dobit ćete veću preciznost i bolje računanje u zadatku, no ako stavite previše nula program će se ponašati kao da varijablama pribraja broj [tex]0[/tex], tako da niste ništa novo dobili.
Slične probleme imat ćete i na drugim mjestima u programu. Primjerice: događa li vam se da u zadatku imate jednakokračan trokut, a pri ispisivanju kuteva trokuta dvaput ili čak triput ispiše kut [tex]60°[/tex] umjesto jedan put? Pripazite koje vrijednosti zapravo ubacujete u dani set!
Ovo je inače koristan trik u praksi u slučaju da vam program ne računa najbolje neke vrijednosti. Meni osobno je pomogao u prošlogodišnjoj prvoj zadaći u zadatku Petshop (kada je trebalo pretvarati kupovnu cijenu u prodajnu, pa smo morali množiti dva doublea; nešto slično tome). |
znači li onda to da kad provjeravamo da li stranice čine trokut da pišemo:
abs(a+b-c)<0.01 ili 0.02
|
|
[Vrh] |
|
Phoenix Forumaš(ica)
Pridružen/a: 15. 05. 2010. (18:46:07) Postovi: (164)16
Sarma: -
|
|
[Vrh] |
|
rom Forumaš(ica)
Pridružen/a: 26. 10. 2010. (11:10:35) Postovi: (2D)16
|
|
[Vrh] |
|
GauSs_ Moderator
Pridružen/a: 28. 01. 2004. (21:01:17) Postovi: (53C)16
Spol:
Lokacija: 231
|
Postano: 12:02 sub, 4. 5. 2013 Naslov: |
|
|
[quote="rom"]mi se zapravo ne trebamo zamarati sa tim jednakostima odnosno nejednakostima, jer je asistent rekao da nece stavljati takve primjere, ovo je samo savjet za bolje programiranje, jel?[/quote]
Ne, trebate se zamarati! Ja cu davati lijepe primjere na ulazu. Dakle, necu dati nesto poput Trokut(2,2.001,1.999). Medjutim, kutovi mogu imati pogresku pri izracunu pa cete vi morati paziti na taj dio.
rom (napisa): | mi se zapravo ne trebamo zamarati sa tim jednakostima odnosno nejednakostima, jer je asistent rekao da nece stavljati takve primjere, ovo je samo savjet za bolje programiranje, jel? |
Ne, trebate se zamarati! Ja cu davati lijepe primjere na ulazu. Dakle, necu dati nesto poput Trokut(2,2.001,1.999). Medjutim, kutovi mogu imati pogresku pri izracunu pa cete vi morati paziti na taj dio.
_________________ The purpose of life is to end
Prosle su godine kolokviji bili laksi, zar ne?
|
|
[Vrh] |
|
|