Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 10 odgovora
  • 8.868 pregleda

Najnovija ↓

konverzija decimalnog broja u razlomak 25.11.2009. u 21:46 · pre 206 meseci #1
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?
Re: konverzija decimalnog broja u razlomak 26.11.2009. u 08:18 · pre 206 meseci #3
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.
Re: konverzija decimalnog broja u razlomak 26.11.2009. u 19:31 · pre 206 meseci #4
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
Re: konverzija decimalnog broja u razlomak 26.11.2009. u 20:13 · pre 206 meseci #5
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.
Re: konverzija decimalnog broja u razlomak 26.11.2009. u 22:32 · pre 206 meseci #6
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š.
Re: konverzija decimalnog broja u razlomak 27.11.2009. u 13:30 · pre 206 meseci
izmenjeno 1 put, poslednji put X Files 27.11.2009. u 13:42
  1. X Files27.11.2009. u 13:42zapis iz teksta poruke
#7
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.
Re: konverzija decimalnog broja u razlomak 27.11.2009. u 13:39 · pre 206 meseci #8
int brojilac = round(dec*1e6);
int imenilac = 1e6;
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: konverzija decimalnog broja u razlomak 27.11.2009. u 14:26 · pre 206 meseci #9
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;
}
Re: konverzija decimalnog broja u razlomak 28.11.2009. u 20:44 · pre 206 meseci #10
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;
Re: konverzija decimalnog broja u razlomak 29.11.2009. u 01:56 · pre 206 meseci #11
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme