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

  1. // Práce se zlomky - p⌐ipomínky a námêty na adresu:
  2. // Fr. Sokolovskÿ
  3. // E-MAIL: sokolovs@pascal.fjfi.cvut.cz
  4. // WWW stránka: http://pascal.fjfi.cvut.cz/~sokolovs
  5.  
  6. #pragma hdrfile="TCDEF.SYM" // pro urychlení p⌐ekladu
  7. #include <iostream.h>
  8. #include <process.h>
  9. #include <math.h> //pouæívám funkci sqrt
  10. #include "zlomky.h"
  11. #ifndef __zlomky_cpp
  12. #define __zlomky_cpp
  13.  
  14. int SpolecnyJmenovatel(int c1,int c2) {
  15.  if (c1*c2==0) {cout << "V jednom ze zlomkû je nula." << endl;exit;}
  16.  if (c1%c2==0) return c1; //c1 je násobek c2 a je tedy vêt¿í
  17.  if (c2%c1==0) return c2; //c2 je násobek c1 a je tedy vêt¿í
  18.  return c1*c2;
  19. }
  20.  
  21. void zlomky::Test()
  22. {
  23.  int p=sqrt(min(citatel,jmenovatel))+1;
  24.  if (jmenovatel==0) {cout << "Zlomek obsahuje nulu ve jmenovateli." << endl;exit(1);}
  25.  if (citatel%jmenovatel==0) {citatel=citatel/jmenovatel;jmenovatel=1;} //çitatel je násobkem jmenovatele, çitatel je tedy vêt¿í
  26.  if (jmenovatel%citatel==0) {jmenovatel=jmenovatel/citatel;citatel=1;} //jmenovatel je násobkem çitatele, jmenovatel je tedy vêt¿í
  27.  // krácení zlomku
  28.  for(int i=2;i<=p;i++) {
  29.   if ((citatel%i==0) && (jmenovatel%i==0)) {citatel=citatel/i;jmenovatel=jmenovatel/i;}
  30.  }
  31. }
  32.  
  33. zlomky zlomky::operator +(zlomky z)
  34. {
  35.  int spol;
  36.  zlomky pom;
  37.  Test();z.Test();
  38.  spol=SpolecnyJmenovatel(jmenovatel,z.jmenovatel);
  39.  pom.jmenovatel=spol;
  40.  pom.citatel=spol/jmenovatel*citatel+spol/z.jmenovatel*z.citatel;
  41.  return pom;
  42. }
  43.  
  44. zlomky zlomky::operator -(zlomky z)
  45. {
  46.  int spol;
  47.  zlomky pom;
  48.  Test();z.Test();
  49.  spol=SpolecnyJmenovatel(jmenovatel,z.jmenovatel);
  50.  pom.jmenovatel=spol;
  51.  pom.citatel=spol/jmenovatel*citatel-spol/z.jmenovatel*z.citatel;
  52.  return pom;
  53. }
  54.  
  55. zlomky zlomky::operator *(zlomky z)
  56. {
  57.  zlomky pom;Test();z.Test();
  58.  pom.citatel=citatel*z.citatel;
  59.  pom.jmenovatel=jmenovatel*z.jmenovatel;
  60.  return pom;
  61. }
  62.  
  63. zlomky zlomky::operator /(zlomky z)
  64. {
  65.  zlomky pom;Test();z.Test();
  66.  pom.citatel=citatel*z.jmenovatel;
  67.  pom.jmenovatel=jmenovatel*z.citatel;
  68.  return pom;
  69. }
  70.  
  71. ostream& operator << (ostream& proud, zlomky z)
  72. {
  73.  proud << z.citatel << '/' << z.jmenovatel;
  74.  return proud;
  75. }
  76.  
  77. istream& operator >> (istream& proud, zlomky& z) //nutné p⌐edat referenci, protoæe promênná z je zde jako vÿstup
  78. {
  79.  cout << "Zadejte çitatel: ";
  80.  proud >> z.citatel;
  81.  do {
  82.   cout << "Zadejte jmenovatel: ";
  83.   proud >> z.jmenovatel;
  84.  } while (z.jmenovatel==0);
  85.  return proud;
  86. }
  87. #endif
  88.