Problem s double aritmetikom
Select messages from
# through # FAQ
[/[Print]\]

Forum@DeGiorgi -> Programiranje 1 i 2

#1: Problem s double aritmetikom Autor/ica: krilo PostPostano: 22:36 sri, 30. 11. 2016
    —
Pozdrav forumaši.
Imam 2 pitanja:
1) Postoji li u c-u neki %nešto za ispis u binarnom obliku (kao što su %x i %o za ispis u heksadecimalnom i oktalnom obliku)?
2) Kolokvij 2011.: Zadatak 5 (10 bodova) Napišite program koji učitava realni broj dvostruke točnosti t, znak d te cijele brojeve k, c i a.
Program treba na ekran ispisati tri linije. U prvoj liniji treba 4 puta ispisati znak d, u drugoj liniji treba u **aritmetici dvostruke
točnosti izračunati i ispisati vrijednost izraza [tex]t^5 + (k^3+a)/c^3[/tex] **, a u trećoj liniji treba ispisati ostatak koji se dobije pri cjelobrojnom
dijeljenju izraza k-a s brojem c.
Program treba biti napisan u skladu s ANSI C standardom. Nije dozvoljeno korištenje biblioteke math.

Program mi nije problem napisati, osim dijela označenog s **. Ne mogu dobiti dobre rezultate jer se izraz [tex](k^3+a)/c^3[/tex] računa pomoću integera i onda kad se zbroji s [tex]t^5[/tex] opet dobijem int (npr. za t=1, k=c=a=2), a trebam dobiti decimalni broj. Kako zaobići taj problem?

Hvala unaprijed.

#2: Re: Problem s double aritmetikom Autor/ica: mdokoLokacija: Heriot-Watt University, Edinburgh PostPostano: 3:16 čet, 1. 12. 2016
    —
krilo (napisa):

1) Postoji li u c-u neki %nešto za ispis u binarnom obliku (kao što su %x i %o za ispis u heksadecimalnom i oktalnom obliku)?


Ne postoji, ali takav ispis nije pretjerano često koristan. Ako ti treba, nije problem napisati funkciju koja će ispisivati binarni zapis broja. Probaj sam, a ako ne ide, baci pogled ovamo:
Spoiler [hidden; click to show]:


Citat:
2) Napišite program koji učitava realni broj dvostruke točnosti t, [...] te cijele brojeve k, c i a.
Program treba [...] u **aritmetici dvostruke točnosti izračunati i ispisati vrijednost izraza [tex]t^5 + (k^3+a)/c^3[/tex] ** [...]

Program mi nije problem napisati, osim dijela označenog s **. Ne mogu dobiti dobre rezultate jer se izraz [tex](k^3+a)/c^3[/tex] računa pomoću integera i onda kad se zbroji s [tex]t^5[/tex] opet dobijem int (npr. za t=1, k=c=a=2), a trebam dobiti decimalni broj. Kako zaobići taj problem?


Treba reći programu da izračun obavi s doubleovima umjesto s intovima. To je moguće na više načina, a ja ću ovdje prezentirati samo najčitljiviji.

Ideja je "prekopirati" vrijednosti iz cjelobrojnih varijabli u floating point varijable:
Kod:

int main(void) {
  double t;
  int k, c, a;
  double k_dbl, c_dbl, a_dbl; /* ove varijable će nam biti korisne za izbjegavanje integer aritmetike */
  double rezultat;

  scanf("%g%d%d%d", &t, &k, &c, &a);

  k_dbl = k;
  c_dbl = c;
  a_dbl = a;

  rezultat = t * t * t * t * t + (k_dbl * k_dbl * k_dbl + a_dbl) / (c_dbl * c_dbl * c_dbl);

  printf("%g", rezultat);

  return 0;
}

#3:  Autor/ica: krilo PostPostano: 11:41 čet, 1. 12. 2016
    —
Hvala na odgovoru, sad sve radi kako treba Smile Još jedno pitanje, vezano za zadaće... Treba riješiti zadatke tipa:
Napišite program koji učitava tri realna broja x, y i z, te ispisuje vrijednost izraza [tex] f = m^2 + M^3 [/tex], pri čemu je m= min{x,y,z} i M = max{x,y,z}.

Program super radi s "normalnim" (manjim) brojevima, i ja pošaljem .c file na stranicu (tako svih 5 zadataka tog tipa), a on meni na mail vrati poruku da niti jedan program ne valja s argumentom tipa "netočno za input: 3342.7814, 9564.9266, 5550.5548". I tako za sve zadatke. Kako da ga "natjeram" da prihvaća takve monstrozitete od brojeva i je li to uopće moguće?

#4:  Autor/ica: mdokoLokacija: Heriot-Watt University, Edinburgh PostPostano: 11:49 čet, 1. 12. 2016
    —
krilo (napisa):

Program super radi s "normalnim" (manjim) brojevima, i ja pošaljem .c file na stranicu (tako svih 5 zadataka tog tipa), a on meni na mail vrati poruku da niti jedan program ne valja s argumentom tipa "netočno za input: 3342.7814, 9564.9266, 5550.5548". I tako za sve zadatke. Kako da ga "natjeram" da prihvaća takve monstrozitete od brojeva i je li to uopće moguće?


Nisu to baš nešto jako veliki brojevi. Možeš li zalijepiti kod ovdje za neki od tih primjera, pa da vidimo što se događa?

#5:  Autor/ica: krilo PostPostano: 12:27 čet, 1. 12. 2016
    —
Kod:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    double x, y, z;
    printf ("Upisi tri realna broja: ");
    scanf ("%lf %lf %lf", &x, &y, &z);

    double m, M;
    m=x;
    if (y<m) m=y;
    if (z<m) m=z;
    M=x;
    if (y>M) M=y;
    if (z>M) M=z;

    double a= m*m + M*M*M;
    printf ("f = m^2+M^3 = %g", a);

return 0;
}


Kad uvrstim problematične brojeve, izbaci rezultat 8.75085e+011 (što mi se čini da u kalkulatoru izbaci dobro).

#6:  Autor/ica: hendrix PostPostano: 12:51 čet, 1. 12. 2016
    —
Davno sam rjesavao zadace iz Proga, ali sam 99% siguran da u ispisu ne smijes imati nista osim trazenog izlaza (tj. brojeva), cak mislim da to negdje i podebljano pise.

(Naknadno dodano: Vidi ovdje, točka 3. Very Happy )

Dakle, makni sve ove dodatke iz prvog printf() argumenta, ostavi samo %g pa probaj onda.

Opcenito, ako ti na takvim algoritamski jednostavnim zadacima sve na izlazu izgleda tocno, problem ce gotovo uvijek biti u necem popratnom na sto ne obracas paznju. Smile

#7:  Autor/ica: krilo PostPostano: 13:15 čet, 1. 12. 2016
    —
Eeeeee puno ti hvala... Ne sjećam se da je itko ta pravila spomenuo. Poslala sam ponovno sve pa će valjda bar nešto biti dobro. Smile



Forum@DeGiorgi -> Programiranje 1 i 2


output generated using printer-friendly topic mod. Vremenska zona: GMT + 01:00.

Stranica 1 / 1.

Powered by phpBB © 2001,2002 phpBB Group
Theme created by Vjacheslav Trushkin