000
07.11.2004, 13:00 Uhr
rejo
|
Also ich hab nen kleinen ansatz gemacht und mir kommen einige (16) Fehler... naja zuerst waren es 90 aber die konnt ich irgendwie wegbekommen
hier die quellcodes:
die Datei um die Klasse zu testen
C++: |
#include <iostream> #include "Bruch.h"
void main() { Bruch one; std::cout << "Bitte geben Sie den Bruch ein: "; std::cin >> one; std::cout << std::endl; std::cout << one; }
|
die Implementierung
C++: |
#include "Bruch.h" #include <iostream>
Bruch::Bruch() { z = 0; n = 1; }
Bruch::Bruch(int a, int b) { z = a; n = b; }
Bruch::Bruch(int a) { z = a; n = 1; }
Bruch::Bruch(Bruch &a) { z = a.z; n = a.n; }
void Bruch::setBruch() { Bruch h;
cin >> h;
}
void Bruch::outBruch(void) { Bruch h = *this; cout << h; }
Bruch::~Bruch() { }
double Bruch::todouble(void) { return (double)z / n; }
Bruch Bruch::operator +(Bruch &a) { Bruch h;
h.z = (z * a.n) + (n * a.z); h.n = (n * a.n);
h.kuerzen();
return h; }
Bruch Bruch::operator +(Bruch &a, Bruch &b) { Bruch h;
h.z = (a.z * b.n) + (a.n * b.z); h.n = (a.n * b.n); h.kuerzen(); return h; }
Bruch Bruch::operator -(Bruch &a) { Bruch h;
h.z = (z * a.n) - (n * a.z); h.n = (n * a.n);
h.kuerzen();
return h; }
Bruch Bruch::operator -(Bruch &a, Bruch &b) { Bruch h;
h.z = (a.z * b.n) - (a.n * b.z); h.n = (a.n * b.n);
h.kuerzen();
return h; }
Bruch Bruch::operator *(Bruch &a) { Bruch h;
h.z = (z * a.n) * (n * a.z); h.n = (n * a.n);
h.kuerzen();
return h; }
Bruch Bruch::operator *(Bruch &a, Bruch &b) { Bruch h;
h.z = (a.z * b.n) * (a.n * b.z); h.n = (a.n * b.n);
h.kuerzen();
return h; }
Bruch Bruch::operator /(Bruch &a) { Bruch h;
h.z = (z * a.n) / (n * a.z); h.n = (n * a.n);
h.kuerzen();
return h; }
Bruch Bruch::operator /(Bruch &a, Bruch &b) { Bruch h;
h.z = (a.z * b.n) / (a.n * b.z); h.n = (a.n * b.n);
h.kuerzen();
return h; }
ostream & Bruch::operator <<(ostream &o, Bruch &b) { o << b.z << " / " << b.n << std::endl; return o; }
istream & Bruch::operator >>(istream &i, Bruch &b) { char in[129]; int ok = 0; i >> in;
ok = sscanf(in,"%d / %d", &(b.z), &(b.n));
if(ok == 1) { b.n = 1; } if(ok == 2) { ok = (b.n != 0); }
if(ok) { b.kuerzen(); }
else { b.z = 0; b.n = 1; } return i; }
void Bruch::kuerzen(void) { int hz = z; unsigned hn = n;
do { while(hz < hn) { hn = hn - hz; }
while(hn < hz) { hz = hz - hn; } }while(hz != hn);
z = z / hz; n = n / hn; }
|
die klasse
C++: |
#ifndef _BRUCH_ #define _BRUCH_ #include <iostream> using namespace std;
class Bruch { private: int z; unsigned int n; void kuerzen();
public: Bruch(); Bruch(int,int); Bruch(int); Bruch(Bruch &); static void setBruch(); void outBruch() const; ~Bruch(); double todouble(); Bruch operator+(Bruch &); Bruch operator+(Bruch &,Bruch &); Bruch operator-(Bruch &); Bruch operator-(Bruch &,Bruch &); Bruch operator*(Bruch &); Bruch operator*(Bruch &,Bruch &); Bruch operator/(Bruch &); Bruch operator/(Bruch &,Bruch &); ostream & operator<<(ostream &o, Bruch &b); istream & operator>>(istream &i, Bruch &b); };
#endif
|
|