» »

krajšanje ulomkov

krajšanje ulomkov

Karak ::

pozdravljeni
ali mi lahko kdo pomaga pri krajšanju ulomkov.
Sem napisal program s katerim sešteješ ali zmnožiš dva ulomka. Rezultat pa bi moral okrajšati, vendar ne vem kako.
Prosim za pomoč. Pišem v jeziku c++.

Senitel ::

WarpedGone ::

Števec in imenovalec razbiješ na praštevilske faktorje nato pa praštevila, ki so hkrati v števcu in imenovalcu mečeš stran.
Ko zgoraj in spodaj nimaš več nobenga istega si končal, preostala le še zmnožiš med sabo.
Zbogom in hvala za vse ribe

Karak ::

Hvala, samo to vem vse že. Želel sem samo, da bi mi kdo povedal, kako okrajšati s pomočjo skupnega delitelja ali katere druge možnosti.

metalc ::

Z Evklidovim algoritmom poiščeš največji skupni delitelj števca in imenovalca (pri alg.pazi, da se ti v posebnih primerih ne zacikla) in z njim deliš števec in imenovalec.

Karak ::

Ja to sem že vse prebral vendar sem bolj nov v tem. Programiram ali bolje rečeno se učim programirat 3 tedne. Nekajkrat sem naletel na ukaz gcd. Vendar je zelo malo primerov v jeziku c++.

to je moja koda do sedaj. Ja saj vem da je na zelo dolgo napisana, vendar drugače ne znam še
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    string operat_or;
    string sestevanje = "sestevanje";
    
    float stevec1, stevec2, imenovalec1, imenovalec2; //vnosi
    float skupniImenovalec, sest_stevec1, sest_stevec2, konc_stevec, kraj_ulomek; //seštevanje
    
    cout << "Dobrodošli!" <<endl;
    cout << "Vnesite operacijo (sestevanje ali mnozenje): ";
    cin >> operat_or;
    
    
    if(operat_or == "sestevanje") //to se zgodi, ce uporabni vpise na zacetku sestevanje
    { 
                 float stevec1, stevec2, imenovalec1, imenovalec2; //vnosi
                 float skupniImenovalec, sest_stevec1, sest_stevec2, konc_stevec, kraj_ulomek; //spremenljivke za sestevanje
                 
                 cout << "Vpisi stevec prvega ulomka: ";
                 cin >> stevec1; //vpis prvega stevca
                 cout << "Vpisi imenovalec istega ulomka: ";
                 cin >> imenovalec1; //vpis prvega imenovalca
                 cout << endl << endl; //gre dve vrstici dol
                 cout << "Vpisi stevec drugega ulomka: ";
                 cin >> stevec2; //vpis drugega stevca
                 cout << "Vpisi imenovalec istega ulomka: ";
                 cin >> imenovalec2; //vpis drugega imenovalca
                 cout<<endl<<endl;
                 
                 if(imenovalec1!=imenovalec2) //preveri ce sta razlicna (!= ni enako)
                 {
                                          cout << "Vsota je: ";   
                                          skupniImenovalec=imenovalec1*imenovalec2;
                                          sest_stevec1=stevec1*imenovalec2;
                                          sest_stevec2=stevec2*imenovalec1;
                                          konc_stevec=sest_stevec1+sest_stevec2;
                                          cout<< konc_stevec << "/" << skupniImenovalec <<endl;
                                          }
    }
    else
    {
        float stevec1, stevec2, imenovalec3, imenovalec4;
        float zmnozen_imenovalec, zmnozen_stevec;
        
        cout << "Vpisi stevec prvega ulomka: ";
        cin >> stevec1;
        cout << "Vpisi imenovalec istega ulomka: ";
        cin >> imenovalec3;
        cout << endl << endl;
        cout << "Vpisi stevec drugega ulomka: ";
        cin >> stevec2;
        cout << "Vpisi imenovalec istega ulomka: ";
        cin >> imenovalec4;
        cout << endl << endl;
        
        if(imenovalec3!=imenovalec4)
        {
                                    cout << "Produkt je: ";
                                    zmnozen_imenovalec=imenovalec3*imenovalec4;
                                    zmnozen_stevec=stevec1*stevec2;
                                    cout << zmnozen_stevec << "/" << zmnozen_imenovalec << endl;
        }
    }
                                    
    system("PAUSE");
    return EXIT_SUCCESS; // izhod iz funcije in vračanje razultata
}

Zgodovina sprememb…

  • spremenilo: Karak ()

metalc ::

V linkanem članku greš na "implementations", kjer je izvedbo zelo enostavno "prevesti" v skoraj katerikoli jezik. Če slučajno ne veš, mod pomeni ostanek po deljenju (% v C based jezikih vključno s C++).

V glavnem, vsega skupaj je nekaj vrstic.

metalc ::

Evo še C++ implementacija, ki jo lahko komot vstaviš v svoj razred ali kamorkoli že:

unsigned int greatestCommonDivisor(unsigned int first, unsigned int second)
{
    // Najvecji skupni delitelj po Evklidovem algoritmu

    // Ce je katerikoli argument 0, bi se algoritem zaciklal v neskoncni 
    // zanki. V tem primeru takoj vrni 0. Kasneje pazi, da ne bos
    // na vsak nacin delil z 0 !!!!
    if ( 0 == first || 0 == second )
    {
        return 0;
    }

    // Sedaj je garantirano, da bo algoritem skonvergiral proti
    // najvecjemu sk. delitelju oz. 1
    unsigned int a = first;
    unsigned int b = second;
    unsigned int t;

    while ( 0 != b )
    {
        t = b;
        b = a % b;
        a = t;
    }

    return a;
}

Karak ::

hvala lepa metalc.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Naloga iz Putka - UPM

Oddelek: Programiranje
242212 (1548) NejcSSD
»

problem s programiranjem ulomka

Oddelek: Programiranje
191665 (1105) KaRkY
»

Funkcije in prenos po referenci

Oddelek: Programiranje
141850 (1556) xordie
»

[Naloga][Java] Ulomki

Oddelek: Programiranje
62660 (2508) SkIDiver
»

[C++] Ulomek: +, -, *, /

Oddelek: Programiranje
82769 (2664) Vesoljc

Več podobnih tem