Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

17. zadatak iz praktičnog kolokvija
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
ceps
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 10. 2010. (13:03:07)
Postovi: (13A)16
Sarma = la pohva - posuda
71 = 74 - 3

PostPostano: 23:32 pon, 22. 11. 2010    Naslov: 17. zadatak iz praktičnog kolokvija Citirajte i odgovorite

Napisati program koji će učitati ulazni double broj, a zatim ispisati onaj broj koji bi nastao zamjenom cijelog i decimalnog dijela. Primjerice, ukoliko je ulazni broj bio 75.125, program će ispisati broj 125.75.
Napomena: Možete pretpostaviti da ulazni broj nije veći od 9999 i da nema više od 4 decimale.


[code:1]#include <stdio.h>
#include <math.h>


int main ()
{
int c1, d1;
double x, d, c;
scanf("%lf", &x);

d = modf(x, &c);
c1 = c;
d1 = d * 10000;

while (d1 % 10 == 0) d1 = d1 / 10;

printf("%d.%d", d1, c1);
return 0;

}[/code:1]

Kao što vidite, ''varao'' sam sa %d.%d zapisom, no mislim da bi mi se problem koji me smeta pojavljivao i da sam išao ''pošteno''.

Sve je u redu za brojeve poput ovog 75.125 u primjeru, no za brojeve kao:

- 125.3333 se ispisuje 3332.125
- 111.0003 se ispisuje 2.111

Vidim da je problem u zapisu brojeva u računalu, tj. floating point standardu, no ne znam kako bih to neutralizirao.

Može kakav hint? Hvala unaprijed!
Napisati program koji će učitati ulazni double broj, a zatim ispisati onaj broj koji bi nastao zamjenom cijelog i decimalnog dijela. Primjerice, ukoliko je ulazni broj bio 75.125, program će ispisati broj 125.75.
Napomena: Možete pretpostaviti da ulazni broj nije veći od 9999 i da nema više od 4 decimale.


Kod:
#include <stdio.h>
#include <math.h>


int main ()
{
   int c1, d1;
   double x, d, c;
   scanf("%lf", &x);

   d = modf(x, &c);
   c1 = c;
   d1 = d * 10000;
   
   while (d1 % 10 == 0) d1 = d1 / 10;
   
   printf("%d.%d", d1, c1);
   return 0;
   
}


Kao što vidite, ''varao'' sam sa %d.%d zapisom, no mislim da bi mi se problem koji me smeta pojavljivao i da sam išao ''pošteno''.

Sve je u redu za brojeve poput ovog 75.125 u primjeru, no za brojeve kao:

- 125.3333 se ispisuje 3332.125
- 111.0003 se ispisuje 2.111

Vidim da je problem u zapisu brojeva u računalu, tj. floating point standardu, no ne znam kako bih to neutralizirao.

Može kakav hint? Hvala unaprijed!


[Vrh]
Korisnički profil Pošaljite privatnu poruku
A-tom
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 18. 05. 2010. (22:18:01)
Postovi: (AB)16
Spol: žensko
Sarma = la pohva - posuda
= 14 - 11

PostPostano: 0:01 uto, 23. 11. 2010    Naslov: Citirajte i odgovorite

Nisam sigurna je li to smijes napraviti (tj. smijes, ali ao ima rupa) no da pri upisu broja varas pa ih upisujes kao int.int i pri ispisu ih samo zamjenis.
Nisam sigurna je li to smijes napraviti (tj. smijes, ali ao ima rupa) no da pri upisu broja varas pa ih upisujes kao int.int i pri ispisu ih samo zamjenis.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
ceps
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 10. 2010. (13:03:07)
Postovi: (13A)16
Sarma = la pohva - posuda
71 = 74 - 3

PostPostano: 0:13 uto, 23. 11. 2010    Naslov: Citirajte i odgovorite

Varam samo pri ispisu! xD

Kao što vidiš, upis je normalan, %lf, x...
Gle, zadatak je da se ispiše ''decimalni dio''.''cijeli dio'' i to je to. Nigdje nema nekih posebnih napomena kako to napraviti, ali okej, siguran sam da postoji način sa dijeljenjem cijelog dijela broja, odnosno množenjem decimalnog dijela... no opet bih naletio na isti problem sa zapisom brojeva u računalu.
Varam samo pri ispisu! xD

Kao što vidiš, upis je normalan, %lf, x...
Gle, zadatak je da se ispiše ''decimalni dio''.''cijeli dio'' i to je to. Nigdje nema nekih posebnih napomena kako to napraviti, ali okej, siguran sam da postoji način sa dijeljenjem cijelog dijela broja, odnosno množenjem decimalnog dijela... no opet bih naletio na isti problem sa zapisom brojeva u računalu.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Flame
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 12. 08. 2009. (02:14:39)
Postovi: (53)16
Spol: muško
Sarma = la pohva - posuda
19 = 23 - 4

PostPostano: 23:34 uto, 23. 11. 2010    Naslov: Citirajte i odgovorite

Ne, ne smije se tako varati pri upisu jer su ulazni podaci definirani, unos je tipa double.

No problem je na sreću lako riješiti:

[code:1]d1 = (int) (10000*x + 0.5);[/code:1]

Naime, 10000*x nikad neće napraviti apsolutnu grešku od 0.5, tj. za 10000*x očekuješ dobiti cijeli broj (zbog uvjeta u zadatku), ali on može u računalu zbog aritmetike doubleova primiti vrijednost <10000x - 0.5, 10000x + 0.5> pri čemu je 10000x njegova prava, cijelobrojna vrijednost. Sad kad tome dodaš 0.5 dobivaš nešto unutar intervala <10000x, 10000x + 1>. Sad dolazi (int) što je naredba da se 10000*x + 0.5 prebaci u nešto tipa integer, a to će napraviti na način da jednotavno uzme cijeli dio realnog broja,a to je 10000x.

Opaska: 10000*x je u racunalu, 10000x je prava vrijednost mnozenja 10000 s realnim brojem x.
Ne, ne smije se tako varati pri upisu jer su ulazni podaci definirani, unos je tipa double.

No problem je na sreću lako riješiti:

Kod:
d1 = (int) (10000*x + 0.5);


Naime, 10000*x nikad neće napraviti apsolutnu grešku od 0.5, tj. za 10000*x očekuješ dobiti cijeli broj (zbog uvjeta u zadatku), ali on može u računalu zbog aritmetike doubleova primiti vrijednost <10000x - 0.5, 10000x + 0.5> pri čemu je 10000x njegova prava, cijelobrojna vrijednost. Sad kad tome dodaš 0.5 dobivaš nešto unutar intervala <10000x, 10000x + 1>. Sad dolazi (int) što je naredba da se 10000*x + 0.5 prebaci u nešto tipa integer, a to će napraviti na način da jednotavno uzme cijeli dio realnog broja,a to je 10000x.

Opaska: 10000*x je u racunalu, 10000x je prava vrijednost mnozenja 10000 s realnim brojem x.


[Vrh]
Korisnički profil Pošaljite privatnu poruku MSNM
sailor m
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 23. 10. 2010. (10:46:13)
Postovi: (4E)16
Sarma = la pohva - posuda
= 2 - 2

PostPostano: 15:24 sri, 24. 11. 2010    Naslov: Citirajte i odgovorite

jedno pitanje u vezi tog 17.zadatka...

Ako mi program učita neki cijeli broj (npr. 356) da li onda mora ispisati 0.356 ili ne treba ništa napravit.
jedno pitanje u vezi tog 17.zadatka...

Ako mi program učita neki cijeli broj (npr. 356) da li onda mora ispisati 0.356 ili ne treba ništa napravit.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3562)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 18:33 sri, 24. 11. 2010    Naslov: Citirajte i odgovorite

Logicno bi bilo 0.356.
Logicno bi bilo 0.356.



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan