Advertisement
Guest User

Untitled

a guest
May 29th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.55 KB | None | 0 0
  1. #include<iostream>
  2.  
  3.  
  4.  
  5. using namespace std;
  6.  
  7.  
  8.  
  9. class czynnik
  10.  
  11. {
  12.  
  13.   public:
  14.  
  15.   int wspolczynnik;
  16.  
  17.   int potega;
  18.  
  19.   czynnik();
  20.  
  21.  
  22.  
  23. };
  24.  
  25.  
  26.  
  27. class wielomian
  28.  
  29. {
  30.  
  31.     public:
  32.  
  33.     int wielkosc;
  34.  
  35.     czynnik * wielomian;
  36.  
  37. };
  38.  
  39.  
  40.  
  41. czynnik * przepisz_wielomian(int wielkosc, czynnik*wielomian);
  42.  
  43. czynnik * wpisz_wielomian(int wielkosc, czynnik * wielomian);
  44.  
  45. czynnik * sortuj_potegi_wielomianu(int wielkosc, czynnik * wielomian);
  46.  
  47. void wypisz_wielomian(int wielkosc, czynnik * wielomian);
  48.  
  49. czynnik * odejmowanie_wielomianow(int wielkosc, czynnik *  pozostale, int wielkosc_2, czynnik * wielomian_2, czynnik * wynik);
  50.  
  51. czynnik * dzielenie_wielomianow(int wielkosc, czynnik* wielomian_1,int wielkosc_2,  czynnik* wielomian_2);
  52.  
  53.  
  54.  
  55.  
  56.  
  57. int main()
  58.  
  59. {
  60.  
  61.   czynnik * wielomian_1;
  62.  
  63.  
  64.  
  65.   cout << "Podaj wielkosc pierwszego wielomianu:";
  66.  
  67.   int wielkosc;
  68.  
  69.   cin >> wielkosc;
  70.  
  71.   wielomian_1 = new czynnik[wielkosc];
  72.  
  73.   wpisz_wielomian(wielkosc, wielomian_1);
  74.  
  75.   sortuj_potegi_wielomianu(wielkosc, wielomian_1);
  76.  
  77.  
  78.  
  79.  
  80.  
  81.   cout << "Podaj wielkosc drugiego wielomianu:";
  82.  
  83.   czynnik * wielomian_2;
  84.  
  85.   int wielkosc_2;
  86.  
  87.   cin >> wielkosc_2;
  88.  
  89.   wielomian_2 = new czynnik[wielkosc];
  90.  
  91.   wpisz_wielomian(wielkosc_2, wielomian_2);
  92.  
  93.   sortuj_potegi_wielomianu(wielkosc_2, wielomian_2);
  94.  
  95.  
  96.  
  97.  
  98.  
  99.   czynnik * po_dzieleniu;
  100.  
  101.   po_dzieleniu = dzielenie_wielomianow(wielkosc, wielomian_1, wielkosc_2, wielomian_2);
  102.  
  103.   cout << endl;
  104.  
  105.   wypisz_wielomian(wielkosc, po_dzieleniu);
  106.  
  107.  
  108.  
  109.  
  110.  
  111.   return 0;
  112.  
  113. }
  114.  
  115.  
  116.  
  117. czynnik * dzielenie_wielomianow(int wielkosc, czynnik* wielomian_1,int wielkosc_2, czynnik * wielomian_2)
  118.  
  119. {
  120.  
  121.     czynnik * bufor;
  122.  
  123.  
  124.  
  125.     //przypisuje buforowi pierwszy element  pierwszego wielomianu
  126.  
  127.     // sprawdza odrazu czy zachodzi warunek iz potega pierwszego wielomianu > od potegi drugiego
  128.  
  129.     //wielomianu
  130.  
  131.     if(wielomian_1->potega > wielomian_2->potega)
  132.  
  133.     {
  134.  
  135.         bufor->potega = wielomian_1->potega;
  136.  
  137.         bufor->wspolczynnik = wielomian_1->wspolczynnik;
  138.  
  139.     }
  140.  
  141.     else
  142.  
  143.     {
  144.  
  145.         return NULL;
  146.  
  147.     }
  148.  
  149.  
  150.  
  151.  
  152.  
  153.     //tworzy zmienna pomocniczna pozostale, w ktorej bedzie przechowywany wielomian
  154.  
  155.     // pozostaly z ktorego beda odejmowane skladniki w dzieleniu wielomianow pisemnym
  156.  
  157.     czynnik * pozostale;
  158.  
  159.     pozostale = new czynnik[wielkosc];
  160.  
  161.     pozostale = przepisz_wielomian(wielkosc, wielomian_1);
  162.  
  163.  
  164.  
  165.  
  166.  
  167.     wypisz_wielomian(wielkosc, pozostale);
  168.  
  169.  
  170.  
  171.     cout << endl;
  172.  
  173.  
  174.  
  175.     //zmienna pomocniczna, trzymajaca "wynik" dzielenia dwoch wielomianow
  176.  
  177.     czynnik * wynik;
  178.  
  179.     wynik = new czynnik[wielkosc+1];
  180.  
  181.  
  182.  
  183.     int k = 0;
  184.  
  185.     int i = 0;
  186.  
  187.  
  188.  
  189.     while(true)
  190.  
  191.     {
  192.  
  193.  
  194.  
  195.        //przypisuje wynikiwoi pierwszy wyraz pozostalego wielomianu
  196.  
  197.        //podzielonego przez pierwszy wyraz dzielacego wielomianu
  198.  
  199.       (wynik+i)->potega = (bufor)->potega - (wielomian_2 + 0)->potega;
  200.  
  201.       (wynik+i)->wspolczynnik = (bufor)->wspolczynnik / (wielomian_2 + 0)->wspolczynnik;
  202.  
  203.       if((wynik+i)->potega < (wielomian_2+0)->potega)
  204.  
  205.         break;
  206.  
  207.  
  208.  
  209.       //przesyla pozostaly wielomian, wielomian dzielacy, oraz aktualny wyraz wyniku,
  210.  
  211.       //aby wykonac odejmowanie wielomianow ktore jest wykonywane w trakcie dzielenia
  212.  
  213.       //dwoch wielomianow
  214.  
  215.       pozostale = odejmowanie_wielomianow(wielkosc, pozostale, wielkosc_2, wielomian_2, (wynik+i));
  216.  
  217.       wypisz_wielomian(wielkosc, pozostale);
  218.  
  219.  
  220.  
  221.       int l = 0;
  222.  
  223.       for(int w = 0; w < wielkosc; w++)
  224.  
  225.       {
  226.  
  227.         if((pozostale+w)->wspolczynnik != 0)
  228.  
  229.         {
  230.  
  231.  
  232.  
  233.           k = w;
  234.  
  235.           bufor->potega = (pozostale+w)->potega;
  236.  
  237.           bufor->wspolczynnik = (pozostale+w)->wspolczynnik;
  238.  
  239.           break;
  240.  
  241.         }
  242.  
  243.  
  244.  
  245.         l++;
  246.  
  247.       }
  248.  
  249.  
  250.  
  251.       if((l == wielkosc-1) || ( (bufor->potega) < ((wielomian_2+0)->potega) ))
  252.  
  253.       {
  254.  
  255.           break;
  256.  
  257.       }
  258.  
  259.  
  260.  
  261.     //warunkiem konczacym dzialanie programu jest odpowiednia potega pozostalego wielomianu
  262.  
  263.       //if(((bufor->potega) - ((wielomian_2+0)->potega)) < ((wielomian_2+0)->potega))
  264.  
  265.       i++;
  266.  
  267.     }
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.     (wynik+wielkosc)->potega = 0;
  276.  
  277.     (wynik+wielkosc)->wspolczynnik = 0;
  278.  
  279.     return wynik;
  280.  
  281. }
  282.  
  283.  
  284.  
  285. czynnik* odejmowanie_wielomianow(int wielkosc, czynnik * wielomian, int wielkosc_2, czynnik*wielomian_2, czynnik * mnozacy)
  286.  
  287. {
  288.  
  289.  
  290.  
  291. //dla kazdego elementu odejmujacego wielomianu
  292.  
  293.   for(int i = 0; i < wielkosc_2; i ++)
  294.  
  295.   {
  296.  
  297.     // sprawdza sie kazdy element wielomianu
  298.  
  299.     for(int j = 0; j < wielkosc; j ++)
  300.  
  301.     {
  302.  
  303.         // jak znajdzie odpowiednia potege to odejmuje wielomian
  304.  
  305.       if((wielomian+j)->potega == (((wielomian_2+i)->potega) + (mnozacy->potega)))
  306.  
  307.       {
  308.  
  309.         (wielomian+j)->wspolczynnik = (((wielomian+j)->wspolczynnik) - (((wielomian_2+i)->wspolczynnik) * (mnozacy->wspolczynnik)));
  310.  
  311.         break;
  312.  
  313.       }
  314.  
  315.     }
  316.  
  317.   }
  318.  
  319.  
  320.  
  321.   return wielomian;
  322.  
  323.  
  324.  
  325.  
  326.  
  327. }
  328.  
  329.  
  330.  
  331. czynnik * przepisz_wielomian(int wielkosc, czynnik*wielomian)
  332.  
  333. {
  334.  
  335.   czynnik * bufor;
  336.  
  337.   bufor = new czynnik[wielkosc];
  338.  
  339.  
  340.  
  341.   for(int i = 0; i < wielkosc; i++)
  342.  
  343.   {
  344.  
  345.     (bufor+i)->wspolczynnik = (wielomian+i)->wspolczynnik;
  346.  
  347.     (bufor+i)->potega = (wielomian+i)->potega;
  348.  
  349.   }
  350.  
  351.  
  352.  
  353.   return bufor;
  354.  
  355. }
  356.  
  357.  
  358.  
  359. void wypisz_wielomian(int wielkosc, czynnik * wielomian)
  360.  
  361. {
  362.  
  363.   for(int i = 0; i < wielkosc; i++)
  364.  
  365.   {
  366.  
  367.     cout << (wielomian+i)->wspolczynnik;
  368.  
  369.     cout << "x^";
  370.  
  371.     cout << (wielomian+i)->potega;
  372.  
  373.     cout << "  ";
  374.  
  375.   }
  376.  
  377.  
  378.  
  379. }
  380.  
  381.  
  382.  
  383. czynnik * wpisz_wielomian(int wielkosc, czynnik * wielomian)
  384.  
  385. {
  386.  
  387.   for( int w = 0; w < wielkosc; w ++)
  388.  
  389.   {
  390.  
  391.     cin>> (wielomian+w)->wspolczynnik;
  392.  
  393.     cin.get();
  394.  
  395.     cin.get();
  396.  
  397.     cin >> (wielomian+w)->potega;
  398.  
  399.   }
  400.  
  401.  
  402.  
  403.   return wielomian;
  404.  
  405. }
  406.  
  407.  
  408.  
  409. czynnik * sortuj_potegi_wielomianu(int wielkosc, czynnik * wielomian)
  410.  
  411. {
  412.  
  413.   czynnik * bufor;
  414.  
  415.   bufor = new czynnik;
  416.  
  417.  
  418.  
  419.   for(int i = 0; i < wielkosc-1; i ++)
  420.  
  421.   {
  422.  
  423.     for(int j = 0; j < wielkosc-1; j++)
  424.  
  425.     {
  426.  
  427.       if((wielomian+j)->potega < (wielomian+j+1)->potega)
  428.  
  429.       {
  430.  
  431.         bufor->wspolczynnik = (wielomian+j)->wspolczynnik;
  432.  
  433.         bufor->potega = (wielomian+j)->potega;
  434.  
  435.  
  436.  
  437.         (wielomian+j)->wspolczynnik = (wielomian+j+1)->wspolczynnik;
  438.  
  439.         (wielomian+j)->potega = (wielomian+j+1)->potega;
  440.  
  441.  
  442.  
  443.         (wielomian+j+1)->wspolczynnik = bufor->wspolczynnik;
  444.  
  445.         (wielomian+j+1)->potega = bufor->potega;
  446.  
  447.  
  448.  
  449.       }
  450.  
  451.     }
  452.  
  453.   }
  454.  
  455.  
  456.  
  457.   //delete bufor;
  458.  
  459.  
  460.  
  461.   return wielomian;
  462.  
  463. }
  464.  
  465.  
  466.  
  467.  
  468.  
  469. czynnik::czynnik()
  470.  
  471. {
  472.  
  473.   wspolczynnik = 0;
  474.  
  475.   potega = 0;
  476.  
  477. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement