home *** CD-ROM | disk | FTP | other *** search
- // Práce se zlomky - p⌐ipomínky a námêty na adresu:
- // Fr. Sokolovskÿ
- // E-MAIL: sokolovs@pascal.fjfi.cvut.cz
- // WWW stránka: http://pascal.fjfi.cvut.cz/~sokolovs
-
- #pragma hdrfile="TCDEF.SYM" // pro urychlení p⌐ekladu
- #include <iostream.h>
- #include <process.h>
- #include <math.h> //pouæívám funkci sqrt
- #include "zlomky.h"
- #ifndef __zlomky_cpp
- #define __zlomky_cpp
-
- int SpolecnyJmenovatel(int c1,int c2) {
- if (c1*c2==0) {cout << "V jednom ze zlomkû je nula." << endl;exit;}
- if (c1%c2==0) return c1; //c1 je násobek c2 a je tedy vêt¿í
- if (c2%c1==0) return c2; //c2 je násobek c1 a je tedy vêt¿í
- return c1*c2;
- }
-
- void zlomky::Test()
- {
- int p=sqrt(min(citatel,jmenovatel))+1;
- if (jmenovatel==0) {cout << "Zlomek obsahuje nulu ve jmenovateli." << endl;exit(1);}
- if (citatel%jmenovatel==0) {citatel=citatel/jmenovatel;jmenovatel=1;} //çitatel je násobkem jmenovatele, çitatel je tedy vêt¿í
- if (jmenovatel%citatel==0) {jmenovatel=jmenovatel/citatel;citatel=1;} //jmenovatel je násobkem çitatele, jmenovatel je tedy vêt¿í
- // krácení zlomku
- for(int i=2;i<=p;i++) {
- if ((citatel%i==0) && (jmenovatel%i==0)) {citatel=citatel/i;jmenovatel=jmenovatel/i;}
- }
- }
-
- zlomky zlomky::operator +(zlomky z)
- {
- int spol;
- zlomky pom;
- Test();z.Test();
- spol=SpolecnyJmenovatel(jmenovatel,z.jmenovatel);
- pom.jmenovatel=spol;
- pom.citatel=spol/jmenovatel*citatel+spol/z.jmenovatel*z.citatel;
- return pom;
- }
-
- zlomky zlomky::operator -(zlomky z)
- {
- int spol;
- zlomky pom;
- Test();z.Test();
- spol=SpolecnyJmenovatel(jmenovatel,z.jmenovatel);
- pom.jmenovatel=spol;
- pom.citatel=spol/jmenovatel*citatel-spol/z.jmenovatel*z.citatel;
- return pom;
- }
-
- zlomky zlomky::operator *(zlomky z)
- {
- zlomky pom;Test();z.Test();
- pom.citatel=citatel*z.citatel;
- pom.jmenovatel=jmenovatel*z.jmenovatel;
- return pom;
- }
-
- zlomky zlomky::operator /(zlomky z)
- {
- zlomky pom;Test();z.Test();
- pom.citatel=citatel*z.jmenovatel;
- pom.jmenovatel=jmenovatel*z.citatel;
- return pom;
- }
-
- ostream& operator << (ostream& proud, zlomky z)
- {
- proud << z.citatel << '/' << z.jmenovatel;
- return proud;
- }
-
- istream& operator >> (istream& proud, zlomky& z) //nutné p⌐edat referenci, protoæe promênná z je zde jako vÿstup
- {
- cout << "Zadejte çitatel: ";
- proud >> z.citatel;
- do {
- cout << "Zadejte jmenovatel: ";
- proud >> z.jmenovatel;
- } while (z.jmenovatel==0);
- return proud;
- }
- #endif
-