Advertisement
ewa_tabor

duza Liczba do skończenia

May 8th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.61 KB | None | 0 0
  1. //klasy pochodne, protected (jak private, tylko ze dostepne dla klas pochodnych),
  2. //klasa pochodna do klasy DL, operator *, ==, !=, >,<
  3. #include <iostream>
  4. #include <cctype>
  5. #include <cmath>
  6. #include <cstring>
  7. #include <string>
  8.  
  9. using namespace std;
  10.  
  11. class duzaLiczba {
  12.  
  13.  
  14.     public:
  15.     char *wsk;
  16.     friend istream &operator >>(istream &s, duzaLiczba &o1);
  17.     friend ostream &operator <<(ostream &s, duzaLiczba &o1);
  18.     duzaLiczba (){
  19.         wsk=NULL;
  20.     }
  21.     duzaLiczba(duzaLiczba&o1){
  22.         int dlugosc=strlen(o1.wsk);
  23.         wsk = new char[dlugosc];
  24.         for (int i=0;i<strlen(o1.wsk);i++){
  25.             wsk[i]=o1.wsk[i];
  26.         }
  27.     }
  28.  
  29.     duzaLiczba operator = (const duzaLiczba &o1){
  30.         int dlugosc = strlen(this->wsk);
  31.         if (this->wsk!=NULL) delete [] this->wsk;
  32.         dlugosc = strlen(o1.wsk);
  33.         this->wsk = new char[dlugosc];
  34.         for (int i=0; i<strlen(o1.wsk); i++){
  35.             this->wsk[i]=o1.wsk[i];
  36.         }
  37.         return *this;
  38.     }
  39.  
  40.     duzaLiczba operator + (const duzaLiczba &o1){
  41.         duzaLiczba wynik;
  42.         /*int dlugosc = strlen(this->wsk)>=strlen(o1.wsk) ? strlen(this->wsk) : strlen (o1.wsk);
  43.         wynik.wsk=new char[dlugosc];
  44.         int roznica=abs(strlen(o1.wsk)-strlen(this->wsk));
  45.         for (int i=0; i<dlugosc; i++){
  46.             if ()
  47.         }
  48.         //int a = strlen(o1.wsk)>=strlen(this->wsk) ? strlen(o1.wsk) : strlen(this->wsk);
  49.         int add,a,b,dlugosc;
  50.         dlugosc=abs(strlen(o1.wsk)-strlen(this->wsk));
  51.         for (int i=1; i<a; i++){
  52.             if (strlen(this->wsk)-i<0) b=0;
  53.             else b=this->wsk[strlen(this->wsk)-i]-48;
  54.             cout<<b;
  55.             if (strlen(o1.wsk)-i<0) a=0;
  56.             else a=o1.wsk[strlen(o1.wsk)-i]-48;
  57.             if (a+b+add>9){
  58.                 wynik.wsk[dlugosc-1]=(a+b+add)+48;
  59.                 add=0;
  60.             }
  61.             else {
  62.                 wynik.wsk[dlugosc-1]=(a+b+add-10)+48;
  63.                 add=1;
  64.             }
  65.         }
  66.         wynik.dlugosc= o1.dlugosc>=this->dlugosc ? o1.dlugosc : this->dlugosc;
  67.         wynik.wsk=new char[wynik.dlugosc];
  68.         int a = abs(this->dlugosc-o1.dlugosc);
  69.         int add=0,b,c;
  70.         for (int i=wynik.dlugosc - 1; i>=0; i-- ){
  71.             if (o1.dlugosc>=this->dlugosc){
  72.                 if (i-a<0) b=0;
  73.                 else b=this->wsk[i-a]-'0';
  74.                 c=o1.wsk[i] - 48;
  75.             }
  76.             else {
  77.                 if (i-a<0) c=0;
  78.                 else b=o1.wsk[i]-48;
  79.                 c=this->wsk[i];
  80.             }
  81.             cout<<b<<c;
  82.             if (a+b+add>9)  {
  83.                 wynik.wsk[i]=b+c+add-10+48;
  84.                 add=1;
  85.             }
  86.             else {
  87.                 wynik.wsk[i]=b+c+add+48;
  88.                 add=0;
  89.             }
  90.         }*/
  91.         return wynik;
  92.     }
  93.  
  94.  
  95.  
  96.  
  97. };
  98.  
  99. istream &operator >> (istream &s, duzaLiczba &o1){
  100.     if (o1.wsk!=NULL){
  101.         delete [] o1.wsk;
  102.         o1.wsk=NULL;
  103.     }
  104.     string a;
  105.     s>>a;
  106.     int dlugosc=a.size();
  107.     o1.wsk = new char[dlugosc];
  108.     for (int i=0; i<dlugosc; i++){
  109.         o1.wsk[i]=a[i];
  110.     }
  111. }
  112.  
  113. ostream &operator << (ostream &s, duzaLiczba &o1){
  114.     int dlugosc=strlen(o1.wsk);
  115.     for (int i=0; i<dlugosc; i++){
  116.         s<<o1.wsk[i];
  117.     }
  118.     return s;
  119.  
  120. }
  121.  
  122. class duzaLiczba2: public duzaLiczba {
  123.     public:
  124.     duzaLiczba2():duzaLiczba() {}
  125.         /*duzaLiczba2 &operator * (const duzaLiczba &o1){
  126.         int a=strlen(o1.wsk),b=strlen(this->wsk);
  127.         duzaLiczba wynik;
  128.         wynik.wsk = new char[a+b-1];
  129.         int add,c;
  130.         if (a>b){
  131.             for (int i=0; i<b;i++){
  132.                 for (int j=0;j<a;j++){
  133.                     c=(this->wsk[j]-'0')*(o1.wsk[i]-'0');
  134.                     wynik.wsk[i]=(((c%10)+(wynik.wsk[i]-'0'))%10)+'0';
  135.                     if ((c%10)+(wynik.wsk[i]-'0')>9)
  136.                 }
  137.             }
  138.         }
  139.        
  140.     }*/
  141.    
  142.     bool operator == (const duzaLiczba &o1){
  143.         if (strlen(this->wsk)!=strlen(o1.wsk)) return false;
  144.         for (int i=0;i<strlen(o1.wsk);i++){
  145.             if (o1.wsk[i]!=this->wsk[i]) return false;
  146.         }
  147.         return true;
  148.     }
  149.     bool operator != (const duzaLiczba &o1){
  150.         if (strlen(this->wsk)!=strlen(o1.wsk)) return true;
  151.         for (int i=0;i<strlen(o1.wsk);i++){
  152.             if (this->wsk[i]==o1.wsk[i]) return false;
  153.         }
  154.         return true;
  155.     }
  156.     bool operator > (const duzaLiczba &o1){
  157.         cout<<this->wsk[0];
  158.         if (strlen(this->wsk)>strlen(o1.wsk)) return true;
  159.         if (strlen(o1.wsk)>strlen(this->wsk)) return false;
  160.         for (int i=0; i<strlen(o1.wsk);i++){
  161.             if (o1.wsk[i] > this->wsk[i]) return false;
  162.         }
  163.         if (o1.wsk[strlen(o1.wsk)-1]==this->wsk[strlen(this->wsk)-1]) return false;
  164.         return true;
  165.     }
  166.  
  167.  
  168.  
  169.  
  170.  
  171. };
  172.  
  173.  
  174.  
  175.  
  176. int main(){
  177.     duzaLiczba2 o1, o2;
  178.     cin>>o1;
  179.     cin>>o2;
  180.     cout<<endl;
  181.     if (o2>o1)  cout<<"Tak"<<endl;
  182.     if (o2>o1) cout<<"Nie";
  183.     return 0;
  184.  
  185.  
  186.     /*string a="012345";
  187.     int b=a[1]-48;
  188.     cout<<b;*/
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement