Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

konverzija decimalnog broja u razlomak

[es] :: C/C++ programiranje :: konverzija decimalnog broja u razlomak

[ Pregleda: 7788 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ena_m
BiH

Član broj: 240982
Poruke: 8
*.tel.net.ba.



Profil

icon konverzija decimalnog broja u razlomak25.11.2009. u 20:46 - pre 175 meseci
problem je sljedeci: ako imam decimalan broj 1,23456789 i hocu da ga pretvorim u razlomak, ali da prije toga "odsjecem" cifre iza seste cifre iza decimalnog zareza(znaci dobijem decimalni broj1,234567) tj. trebam dobiti ovo: 1234567/1000000. moze li mi iko pomoci?
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.dynamic.sbb.rs.



+9 Profil

icon Re: konverzija decimalnog broja u razlomak26.11.2009. u 02:54 - pre 175 meseci
A gde tačno imaš problem?
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: konverzija decimalnog broja u razlomak26.11.2009. u 07:18 - pre 175 meseci
floor(x * 1E6 + 0.5) / 1E6

Ovo +0.5 služi da bi se zokruživalo na bližu celu vrednost, a bez njega bi se zaokruživalo na manju. Ovo rešenje važi za pozitivne brojeve.
 
Odgovor na temu

ena_m
BiH

Član broj: 240982
Poruke: 8
*.tel.net.ba.



Profil

icon Re: konverzija decimalnog broja u razlomak26.11.2009. u 18:31 - pre 175 meseci
pa ne funkcionise mi bas ovo: floor(x * 1E6 + 0.5) / 1E6; problem tacno imam u funkciji doubleUrazlomak koja treba da uzme decimalni broj pretvori ga u razlomak i vrati rjesenje, a ne znam kako to da postignem
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.dynamic.sbb.rs.



+9 Profil

icon Re: konverzija decimalnog broja u razlomak26.11.2009. u 19:13 - pre 175 meseci
Citat:
ena_m: pa ne funkcionise mi bas ovo: floor(x * 1E6 + 0.5) / 1E6; problem tacno imam u funkciji doubleUrazlomak koja treba da uzme decimalni broj pretvori ga u razlomak i vrati rjesenje, a ne znam kako to da postignem


(int)floor(x * 1E6 + 0.5) je brojilac, a 1E6 imenilac.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: konverzija decimalnog broja u razlomak26.11.2009. u 21:32 - pre 175 meseci
Nema dovoljno informacija da bismo mogli da ti pomognemo. Da ne bi nagađali šta i kako može da ne valja bolje je da ti ovde staviš spornu funkciju, ili sporni deo koda, kao i ulazne podatke, očekivane izlazne podatke, i izlazne podatke koje zapravo dobiješ.
 
Odgovor na temu

ena_m
BiH

Član broj: 240982
Poruke: 8
*.tel.net.ba.



Profil

icon Re: konverzija decimalnog broja u razlomak27.11.2009. u 12:30 - pre 175 meseci
Code:

double mojRazlomak :: doubleUrazlomak(double dec)
         {

               int i,b;
               int n=10;
               int a[10];
               int decimals=0;
               double dec = 4.64789;
               int x=int (dec);
               a[1]=x;
               cout <<"a[1]="<< x <<endl<<endl;
               cout << dec<<endl<<endl;
               double ostatak = dec - int(dec);
               double temp=ostatak;
               do
               {                  
                      for(i=2; i<n; i++)
                      {
                               temp = temp-int(temp);
                               temp=temp*10;
                               decimals++;
                               cout<<temp<<"\n";
                               int x=int(temp);
                              
                               a[i]=x;
                               cout<<"a["<<i<<"] = "<<a[i]<<endl<<endl; 

                      }

               }
               while(temp>1);
               
               for(i=1; i<n; i++)
                        
                        cout<<a[i];
    
               b=a[i]/1000000;
               return b;                            
    
         }

evo taj dio koda, ja sam to pokusala uraditi ovako, i dobila sam taj trazeni decimalni broj bez decimala kao niza a[ i ], sada je samo problem sastavit taj niz a[ i ] da pretstavlja jedan broj i da ga prikazem kao razlomak tj da mi ispise 464789/1000000. mislim da problem predstavljaju zadnje dvije linije koda jer mi ispisuje razlomak 0/1, a moguce je i da nisam dobro uradila poziv fje u main programu jer me zbunjuju pozivi fja koje su u izvedenim klasama.evo kako sam pozvala tu fju:

Code:

    mojRazlomak razlomak;             //mojRazlomak mi je izvedena klasa, a Razlomak je osnovna klasa (problem nije u fji ispis, jer savrseno radi u ostalim fjama)
    Razlomak raz12;
    raz12=razlomak.mojRazlomak::doubleUrazlomak(4.64789)/1000000;
    raz12.ispis();



EDIT X Files :: Sanjam noću CODE tagove.




[Ovu poruku je menjao X Files dana 27.11.2009. u 13:42 GMT+1]
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.telenor.co.yu.



+2789 Profil

icon Re: konverzija decimalnog broja u razlomak27.11.2009. u 12:39 - pre 175 meseci
int brojilac = round(dec*1e6);
int imenilac = 1e6;
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: konverzija decimalnog broja u razlomak27.11.2009. u 13:26 - pre 175 meseci
Ti želiš da imaš funkciju koja ima double kao ulaz a Razlomak kao izlaz. I da se od ulaznog broja uzimaju samo cifre do šeste decimale.

Ako je to tačno onda:
1. Funkcija mora da vraća Razlomak, a ne double
2. Promenljiva b (koja je povratna vrednost funkcije) mora da bude Razlomak, a ne int
3. Ta promenljiva b (koja je Razlomak) valjda ima dve članice, brojnik i nazivnik. brojnik treba da dobije vrednost floor(dec*1000000), a nazivnik treba da dobije vrednost 1000000.

I to je to, nema neke velike mudrosti. Funkcija mora da bude statička, i poziva se sa raz12=mojRazlomak::doubleUrazlomak(4.64789). Evo rešenja:

Code:
class mojRazlomak : public Razlomak
{
public:
  static Razlomak doubleUrazlomak(double dec);
  ...
};

Razlomak mojRazlomak::doubleUrazlomak(double dec)
{
  Razlomak b(floor(dec*1000000), 1000000); // pretpostavljam da postoji ovakav konstruktor

  // ako ne postoji kostruktor kao gore onda treba nekako ovako
  b.brojnik = floor(dec*1000000);
  b.nazivnik = 1000000;

  return b;
}
 
Odgovor na temu

ena_m
BiH

Član broj: 240982
Poruke: 8
92.36.160.*



Profil

icon Re: konverzija decimalnog broja u razlomak28.11.2009. u 19:44 - pre 175 meseci
uradila sam tako ali mi sada javlja gresku da mi konvertuje double u int (sto meni u biti i treba).evo taj dio sto sam ubacila


Razlomak b(floor(dec*1000000), 1000000); // ako stavim konstruktor kaze mi ovako: In static member function `static Razlomak mojRazlomak::doubleUrazlomak(double)': [Warning] passing `double' for converting 1 of `Razlomak::Razlomak(int, int)'

Razlomak b;
int br, naz;
br = floor(dec*1000000); //a ako stavim bez konstruktora kaze mi ovo: [Warning] converting to `int' from `double' i ja vlja mi gresku u ovoj liniji
naz = 1000000;

return b;
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: konverzija decimalnog broja u razlomak29.11.2009. u 00:56 - pre 175 meseci
Promaklo mi je da su imenilac i sadržalac celi brojevi. Pa dobro, dodaj (int) pre floor(dec*1000000), tako da bude (int)floor(dec*1000000). Time ćeš ućutkati kompajler.

Primećujem da ne razumeš neke stvari. U drugom delu koda (koji je višak, al nema veze) imamo promenljivu b koja je tipa Razlomak, a onda nešto petljaš sa dve promenljive tipa int koje se zovu br i naz, a onda pozivaš return b. Koja je svrha tog return b, kad se nigde nije postavio na neku vrednost? Male su vajde od toga što ćeš dobiti od nas rešenje, ako se ne udubiš malo u celo to programiranje.
 
Odgovor na temu

[es] :: C/C++ programiranje :: konverzija decimalnog broja u razlomak

[ Pregleda: 7788 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.