Advertisement
Guest User

fractii

a guest
May 22nd, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. /*
  2. fractii
  3. simplificati fractiile
  4. stergeti toate nr intregi care se obtin
  5. */
  6. #include <iostream>
  7. #include <cmath>
  8.  
  9. using namespace std;
  10.  
  11. struct fractie
  12. {
  13.     int numarator,numitor;
  14. };
  15.  
  16. struct nod
  17. {
  18.     fractie info;
  19.     nod *urm;
  20. };
  21.  
  22. void Initializare(nod *&prim, nod *&ultim)
  23. {
  24.     prim=ultim=NULL;
  25. }
  26.  
  27. void Citire(nod *&prim,nod *&ultim)
  28. {
  29.     fractie x;
  30.     cout<<"Numa=";cin>>x.numarator;
  31.     cout<<"Numi=";cin>>x.numitor;
  32.     cout<<endl;
  33.     if(prim==NULL)
  34.     {
  35.         prim = new nod;
  36.         prim->info=x;
  37.         prim->urm=NULL;
  38.         ultim=prim;
  39.     }
  40.     else
  41.     {
  42.         nod *p=new nod;
  43.         p->info=x;
  44.         p->urm=NULL;
  45.         ultim->urm=p;
  46.         ultim=p;
  47.     }
  48. }
  49.  
  50. void Afisare(nod *&prim, nod *&ultim)
  51. {
  52.     for(nod *p=prim; p; p=p->urm)
  53.         cout<<p->info.numarator<<" / "<<p->info.numitor<<endl;
  54. }
  55.  
  56. void StergereDP(nod *&prim, nod *&ultim, nod *p)
  57. {
  58.     if(p->urm==ultim)
  59.     {
  60.         p->urm=NULL;
  61.         delete ultim;
  62.         ultim=p;
  63.     }
  64.     else
  65.     {
  66.         nod *q=p->urm;
  67.         p->urm=q->urm;
  68.         delete q;
  69.     }
  70. }
  71.  
  72. void StergerePrim(nod *&prim, nod *&ultim)
  73. {
  74.     if(prim==ultim)
  75.     {
  76.         delete prim;
  77.         prim=ultim=NULL;
  78.     }
  79.     else
  80.     {
  81.         nod *p=prim;
  82.         prim=prim->urm;
  83.         delete p;
  84.     }
  85. }
  86.  
  87. void DacaIntreg(nod *&prim, nod *&ultim)
  88. {
  89.     if(prim->info.numarator % prim->info.numitor==0)
  90.         StergerePrim(prim,ultim);
  91.    
  92.     for(nod *p=prim; p->urm!=NULL; p=p->urm)
  93.         if(p->urm->info.numarator % p->urm->info.numitor==0)
  94.         {
  95.             StergereDP(prim,ultim,p);
  96.             return DacaIntreg(prim,ultim);
  97.         }
  98.     return;
  99. }
  100.  
  101. void Simplificare(nod *&prim, nod *&ultim)
  102. {
  103.     for(nod *p=prim; p; p=p->urm)
  104.         for(int i=2; i<p->info.numitor; i++)
  105.             while(p->info.numarator%i==0 && p->info.numitor%i==0)
  106.             {
  107.                 p->info.numarator/=i;
  108.                 p->info.numitor/=i;
  109.             }
  110. }
  111.  
  112. int main()
  113. {
  114.     int n;
  115.     nod *prim,*ultim;
  116.     Initializare(prim,ultim);
  117.     cout<<"Numarul de noduri: ";
  118.     cin>>n;
  119.     for(int i=0; i<n; i++)
  120.         Citire(prim,ultim);
  121.     DacaIntreg(prim,ultim);
  122.     Simplificare(prim,ultim);
  123.     Afisare(prim,ultim);
  124.     return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement