Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » einfaches Bruch Programm - was is hier falsch??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.04.2005, 17:09 Uhr
spit



Also ich habe eine Bruch Klasse geschrieben in der ich Brüche addieren, subtrahieren, multiplizieren und dividieren kann. Aber irgendwas stimmt da nicht ganz. Findet wer den Fehler?? (habs in Visual C++ 6.0 gemacht)

Das Ergebniss wird aus irgend einem Grund nicht ausgegeben, bin mir aber nicht sicher ob es überhaupt richtig rechnet.

so hier das proggi:

Code:
////////// Bruch.h //////////
#ifndef BRUCH_H
#define BRUCH_H

#include <iostream.h>

class Bruch{
    friend ostream& operator << (ostream &os,const Bruch &next){
        os<<next.getZaehler()<<"/"<<next.getNenner();
        return os;
    }
    friend istream& operator >> (istream &is,Bruch &next){
        is>>next.zaehler;
        is>>next.nenner;
        return is;
    }
public:
    Bruch();
    Bruch(int a, int b);
    ~Bruch();

    int getZaehler()const{return zaehler;}
    int getNenner()const{return nenner;}

    Bruch operator + (const Bruch &next);
    Bruch operator - (const Bruch &next);
    Bruch operator * (const Bruch &next);
    Bruch operator / (const Bruch &next);

    int kgV();
    void kurz();
private:
    int zaehler, nenner;
    int ggT(int a,int b);
};

#endif




Code:
////////// Bruch.cpp //////////
#include "Bruch.h"

Bruch::Bruch(){
    zaehler=0;
    nenner=1;
}

Bruch::Bruch(int a, int b){
    zaehler=a;
    nenner=b;
}

Bruch::~Bruch(){
}

Bruch Bruch::operator + (const Bruch &next){
    Bruch tmp((zaehler * next.nenner) + (next.zaehler * nenner), nenner * next.nenner);
    tmp.kurz();
    return tmp;
}

Bruch Bruch::operator - (const Bruch &next){
    Bruch tmp((zaehler * next.nenner) - (next.zaehler * nenner), nenner * next.nenner);
    tmp.kurz();
    return tmp;
}

Bruch Bruch::operator * (const Bruch &next){
    Bruch tmp (zaehler*next.zaehler, nenner*next.nenner);
    tmp.kurz();
    return tmp;
}
    
Bruch Bruch::operator / (const Bruch &next){
    Bruch tmp (zaehler*next.nenner, nenner*next.zaehler);
    tmp.kurz();
    return tmp;
}

int Bruch::kgV(){
    return((zaehler*nenner)/ggT(zaehler,nenner));
}

int Bruch::ggT(int a,int b){
    return ((b == 0)? a:ggT(b,a%b));
}

void Bruch::kurz(){
    int zahl;
    do{
        zahl=kgV();
        nenner=nenner/zahl;
        zaehler=zaehler/zahl;
    }while(zahl!=1);
}




Code:
////////// Hauptprogramm.cpp //////////
#include "Bruch.h"
#include <stdlib.h>
int main(){
    int a,b;
    cout<<endl<<"   Bitte geben Sie einen Bruch ein!"<<endl;
    cout<<"   Zaehler: ";
     cin>>a;
    cout<<"   Nenner: ";
     cin>>b;
    Bruch bruch_one(a,b);

    system("cls");
    cout<<endl<<"   Was wollen Sie nun tun??";
    cout<<endl<<"   Addieren...........1";
    cout<<endl<<"   Subtrahieren.......2";
    cout<<endl<<"   Multiplizieren.....3";
    cout<<endl<<"   Dividieren.........4";
    cout<<endl<<"   EINGABE: ";

    int eingabe;
    cin>>eingabe;
    system("cls");

    if(eingabe==1){
        cout<<endl<<"   Welchen Bruch moechten Sie addieren?";
        cout<<endl<<"   Zaehler: ";
         cin>>a;
        cout<<"   Nenner: ";
         cin>>b;
         Bruch bruch_two(a,b);
        cout<<endl<<endl<<"   Ergebniss: "<<bruch_one+bruch_two;
    }else if(eingabe==2){
        cout<<endl<<"   Welchen Bruch moechten Sie subtrahieren?";
        cout<<endl<<"   Zaehler: ";
         cin>>a;
        cout<<"   Nenner: ";
         cin>>b;
         Bruch bruch_two(a,b);
        cout<<endl<<endl<<"   Ergebniss: "<<bruch_one-bruch_two;
    }else if(eingabe==3){
        cout<<endl<<"   Welchen Bruch moechten Sie multiplizieren?";
        cout<<endl<<"   Zaehler: ";
         cin>>a;
        cout<<"   Nenner: ";
         cin>>b;
         Bruch bruch_two(a,b);
        cout<<endl<<endl<<"   Ergebniss: "<<bruch_one*bruch_two;
    }else if(eingabe==4){
        cout<<endl<<"   Welchen Bruch moechten sie dividieren?";
        cout<<endl<<"   Zaehler: ";
         cin>>a;
        cout<<"   Nenner: ";
         cin>>b;
         Bruch bruch_two(a,b);
        cout<<endl<<endl<<"   Ergebniss: "<<bruch_one/bruch_two;
    }
    system("pause");
    return 0;
}



Danke im voraus an den der mir sagen kann was falsch is!!!
mfg spit
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.04.2005, 17:10 Uhr
spit



mhhh naja das Programm funktioniert eigentlich, nur am ende soll dann das ergebniss ausgegeben werden von z.b. einer addition zweier Brüche.... und danach auf Tastendruck warten (system("pause"); ) doch nachdem ich den bruch den ich dazu addieren subtrahieren usw,,, will eingegeben habe kommt das "Bitte Tastendruck für Weiter" und dann glaub ich zeigts gnz kurz was an...

Ist eigentlich ein simples Programm mit einer Klasse!!
Naja ich hoffe einer der sich damit auskennt sieht sich das mal an.

mfg spit
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.04.2005, 17:24 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Schau Dir mal die kurz()-Methode mit ihren Sub-Aufrufen an, da gibts bei mir ne Division durch null. Außerdem schmeiß system() raus, nimm lieber

C++:
string s;
getline(cin, s);


--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.04.2005, 21:29 Uhr
spit



Ja du hast recht, hab die kurz() funktion auch schon geändert, doch beim ergebniss kommt immer noch 0/0 raus


an dieser zeile gehts nicht mehr:

Code:
cout<<endl<<"Ergebniss"<<bruch_one+bruch_two;



plzz help
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.04.2005, 21:42 Uhr
Bruder Leif
dances with systems
(Operator)


Schmeiß die kurz()-Funktion mal ganz raus. Auf einmal funktionierts einwandfrei, nur sind die Brüche nicht gekürzt. Also liegt der Fehler dort...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.04.2005, 22:03 Uhr
spit



danke leute es funktioniert jetzt, der fehler war die kurz funktioniert.... da stand 2 mal int zahl -> scope fehler oder so nennt man das!!!

thx an alle und closed ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.04.2005, 09:09 Uhr
(un)wissender
Niveauwart


Nimm mal statt iostream,h iostream und deine operatoren sollten const werden
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: