Advertisement
huutho_96

Phan So

Jun 22nd, 2015
471
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.72 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct PhanSo
  5. {
  6.     int Tu, Mau;
  7. };
  8.  
  9. struct Node
  10. {
  11.     PhanSo ps;
  12.     Node *pNext;
  13. };
  14.  
  15. struct List
  16. {
  17.     Node *pHead, *pTail;
  18. };
  19.  
  20. void CreateList(List &L)
  21. {
  22.     L.pTail = L.pHead = NULL;
  23. }
  24.  
  25. Node *CreateNode(PhanSo ps)
  26. {
  27.     Node *p = new Node;
  28.     if (p)
  29.     {
  30.         p->ps.Mau = ps.Mau;
  31.         p->ps.Tu = ps.Tu;
  32.         p->pNext = NULL;
  33.     }
  34.     return p;
  35. }
  36.  
  37. void AddTail(List &L, Node *p)
  38. {
  39.     if (L.pHead == NULL)
  40.     {
  41.         L.pTail = L.pHead = p;
  42.     }
  43.     {
  44.         L.pTail->pNext = p;
  45.         L.pTail = p;
  46.     }
  47.  
  48. }
  49.  
  50. void Input(List &L)
  51. {
  52.     PhanSo ps;
  53.     do
  54.     {
  55.         system("cls");
  56.         cout << "Tu: ";
  57.         cin >> ps.Tu;
  58.         cout << "Mau: ";
  59.         cin >> ps.Mau;
  60.         if (ps.Mau == 0) return;
  61.         AddTail(L, CreateNode(ps));
  62.     } while (1);
  63. }
  64.  
  65. void Output(List L)
  66. {
  67.     Node *p = L.pHead;
  68.     while (p)
  69.     {
  70.         cout << p->ps.Tu;
  71.         if (p->ps.Tu == 0 || p->ps.Mau == 1);
  72.         else
  73.             cout << " / " << p->ps.Mau;
  74.         cout << endl;
  75.         p = p->pNext;
  76.     }
  77. }
  78.  
  79. Node *Max(List L)
  80. {
  81.     if (L.pHead == NULL) return NULL;
  82.     Node *max = L.pHead;
  83.     Node *p = max->pNext;
  84.     while (p)
  85.     {
  86.         if ((float(p->ps.Tu) / p->ps.Mau) > (float(max->ps.Tu) / max->ps.Mau)) max = p;
  87.         p = p->pNext;
  88.     }
  89.     return max;
  90. }
  91.  
  92. void LietKe(List L)
  93. {
  94.     Node *p = L.pHead;
  95.     while (p)
  96.     {
  97.         if (p->ps.Tu > p->ps.Mau)
  98.         {
  99.             cout << p->ps.Tu;
  100.             if (p->ps.Tu == 0 || p->ps.Mau == 1);
  101.             else
  102.                 cout << " / " << p->ps.Mau << endl;
  103.         }
  104.         p = p->pNext;
  105.     }
  106. }
  107.  
  108. int SNT(int n)
  109. {
  110.     if (n < 2) return 0;
  111.     for (int i = 2; i <= sqrt(float(n)); i++)
  112.     {
  113.         if (n % i == 0) return 0;
  114.     }
  115.     return 1;
  116. }
  117.  
  118. int DemTuLaSNT(List L)
  119. {
  120.     Node *p = L.pHead;
  121.     int dem = 0;
  122.     while (p)
  123.     {
  124.         if (SNT(p->ps.Tu) == 1)
  125.         {
  126.             dem++;
  127.         }
  128.         p = p->pNext;
  129.     }
  130.     return dem;
  131. }
  132.  
  133. PhanSo Tong(List L)
  134. {
  135.     Node *p = L.pHead;
  136.     PhanSo s = {0, 1};
  137.     while (p)
  138.     {
  139.         if (p->ps.Tu > p->ps.Mau)
  140.         {
  141.             s.Tu = s.Tu * p->ps.Mau + s.Mau * p->ps.Tu;
  142.             s.Mau = s.Mau * p->ps.Mau;
  143.         }
  144.         p = p->pNext;
  145.     }
  146.     return s;
  147. }
  148.  
  149. void Chen(List &L, Node *p, Node *q)
  150. {
  151.     if (p == L.pTail) AddTail(L, q);
  152.     else
  153.     {
  154.         q->pNext = p->pNext;
  155.         p->pNext = q;
  156.     }
  157. }
  158.  
  159. void ChenSauMax(List &L, Node *p)
  160. {
  161.     if (L.pHead)
  162.         Chen(L, Max(L), p);
  163. }
  164.  
  165. void main()
  166. {
  167.     List L;
  168.     CreateList(L);
  169.     //-------------------------------------------------//
  170.     Input(L);
  171.     //-------------------------------------------------//
  172.     Output(L);
  173.     //-------------------------------------------------//
  174.     PhanSo tong = Tong(L);
  175.     cout << "Tong: ";
  176.     cout << tong.Tu;
  177.     if (tong.Tu == 0 || tong.Mau == 1);
  178.     else
  179.         cout << " / " << tong.Mau;
  180.     cout << endl;
  181.     //-------------------------------------------------//
  182.     PhanSo a = { 5, 6 };
  183.     ChenSauMax(L, CreateNode(a));
  184.     //-------------------------------------------------//
  185.     Output(L);
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement