home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 March
/
Chip_2002-03_cd1.bin
/
chplus
/
cecko
/
CPP
/
ZLOMKY.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1998-10-05
|
2KB
|
88 lines
// 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