Don't like ads? PRO users don't see any ads ;-)

ООП №11

By: MustangUA on May 2nd, 2012  |  syntax: C++  |  size: 2.43 KB  |  hits: 23  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Chyslo {
  5. private:
  6.         int number;
  7.         int base;
  8. public:
  9.         Chyslo() {
  10.                 number = 0;
  11.                 base = 10;
  12.         }
  13.         Chyslo(int Input, int Base) {
  14.                 if(Base == 2) {
  15.                         number = decimal(Input);
  16.                 } else {
  17.                         number = Input;
  18.                 }
  19.                 base = Base;
  20.         }
  21.         void convert(int newbase)
  22.         {
  23.                 base = newbase;
  24.         }
  25.         void display()
  26.         {
  27.                 switch(base)
  28.                 {
  29.                         case 2: cout<<binary(number); break;
  30.                         case 10: cout<<number; break;
  31.                         case 16: cout<<hex<<number; break;
  32.                 }
  33.                 cout<<endl;
  34.         }
  35.         int getNumber() {
  36.                 return number;
  37.         }
  38.         int getBase() {
  39.                 return base;
  40.         }
  41.         Chyslo operator + (Chyslo b) {
  42.                 int newbase;
  43.                 if(base = b.base) {
  44.                         newbase = base;
  45.                 } else {
  46.                         newbase = 10;
  47.                 }
  48.                 return Chyslo(getNumber() + b.getNumber(), newbase);
  49.         }
  50.         Chyslo operator - (Chyslo b) {
  51.                 int newbase;
  52.                 if(base = b.base) {
  53.                         newbase = base;
  54.                 } else {
  55.                         newbase = 10;
  56.                 }
  57.                 return Chyslo(getNumber() - b.getNumber(), newbase);
  58.         }
  59.         Chyslo operator * (Chyslo b) {
  60.                 int newbase;
  61.                 if(base = b.base) {
  62.                         newbase = base;
  63.                 } else {
  64.                         newbase = 10;
  65.                 }
  66.                 return Chyslo(getNumber() * b.getNumber(), newbase);
  67.         }
  68. private:
  69.         int binary(int dec)
  70.         {
  71.                 int bin = 0, pos = 1;
  72.                 while(dec > 0)
  73.                 {
  74.                         bin = bin + (dec % 2) * pos;
  75.                         dec = dec / 2;
  76.                         pos *= 10;
  77.                 }
  78.                 return bin;
  79.         }
  80.         int decimal(int bin)
  81.         {
  82.                 int dec = 0, pos = 0;
  83.                 int factor = 1;
  84.                 while(bin > 0)
  85.                 {
  86.                         if( (bin % 10) == 1)
  87.                         {
  88.                                 dec += factor;
  89.                         }
  90.                         bin /= 10;
  91.                         pos++;
  92.                         factor = factor * 2;
  93.                 }
  94.                 return dec;
  95.         }
  96. };
  97.  
  98. void main()
  99. {
  100.         int enter, base;
  101.         char onemore = 'Y';
  102.         bool correct = true;
  103.  
  104.         while(onemore == 'Y' || onemore == 'y') {
  105.                 do {
  106.                         cout<<"Vvedit' bazu (2, 10, 16)"<<endl;
  107.                         try {
  108.                                 cin>>dec>>base;
  109.                                 if(base != 2 && base != 10 && base != 16) {
  110.                                         correct = false;
  111.                                         throw "Nevirna baza";
  112.                                 } else {
  113.                                         correct = true;
  114.                                 }
  115.                         }
  116.                         catch(char error[]) { cout<<error<<endl; }
  117.                 } while(!correct);
  118.                 cout<<"Vvedit' chyslo"<<endl;
  119.                 try {
  120.                         if(base == 16) {
  121.                                 cin>>hex>>enter;
  122.                         } else {
  123.                                 cin>>dec>>enter;
  124.                         }
  125.                         if((int)enter <= 0 || (int)enter >= 65535) {
  126.                                 correct = false;
  127.                                 throw "Pomylka pry vvedeni";
  128.                         }
  129.                 }
  130.                 catch (char error[]) {
  131.                         cout<<error<<endl;
  132.                 }
  133.  
  134.                 if(correct == true) {
  135.                         Chyslo a(enter, base), b;
  136.                         a.convert(10);
  137.                         a.display();
  138.                         cout<<"Shche? (Y - tak, N - ni)"<<endl;
  139.                         cin>>onemore;
  140.                 } else {
  141.                         onemore = 'Y';
  142.                 }
  143.         }
  144. }