Advertisement
Siwy_Krzysiek

Liczby Fibonacciego

Apr 21st, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <math.h>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. bool czyFib(int liczba);
  9. int fib(int wyraz);
  10. int ktoryWyraz(int liczba);
  11.  
  12. int main()
  13. {
  14.     ifstream daneF("dane.txt");
  15.     ofstream wyniki("zadanie4.txt");
  16.  
  17.     int dane[201];
  18.     for(int i=0; i<201; i++)
  19.         daneF >> dane[i];
  20.  
  21.     wyniki << "a)\n";
  22.  
  23.     for(int i=0; i<201; i++)
  24.     {
  25.         if(czyFib(dane[i]))
  26.         {
  27.             wyniki << dane[i] << endl;
  28.         }
  29.     }
  30.     wyniki << endl;
  31.  
  32.     /************************************************/
  33.  
  34.     int mini=INT_MAX, maxi=0;
  35.     for(int i=0; i<201; i++)
  36.     {
  37.         if(czyFib(dane[i]))
  38.         {
  39.             if(dane[i]<mini)
  40.                 mini=dane[i];
  41.             if(dane[i]>maxi)
  42.                 maxi=dane[i];
  43.         }
  44.     }
  45.     //cout << mini << " " << maxi << endl;
  46.  
  47.     wyniki << "b)\nNajmniejsza liczba Fibonacciego: " << mini
  48.     << "\nNajwieksza liczba Fibonacciego: " << maxi << endl << endl;
  49.  
  50.     /****************BŁĄD***************BŁĄD***************BŁĄD*************/ //BŁĄD
  51.  
  52.     int wyrazy[201];
  53.  
  54.     for(int i=0; i<201; i++)
  55.     {
  56.         cout << i << endl;
  57.         if(czyFib(dane[i]))
  58.         {
  59.             wyrazy[i] = ktoryWyraz(dane[i]);
  60.         }
  61.         else
  62.         {
  63.             wyrazy[i] = -1;
  64.         }
  65.     }
  66.  
  67.     sort(wyrazy, wyrazy+201);
  68.  
  69.     int najdluzszy=0, licz=0;
  70.     for(int i=0; i<201; i++)
  71.     {
  72.         if(wyrazy[i]==-1)
  73.             continue;
  74.  
  75.         if(wyrazy[i]==wyrazy[i+1]-1 && i!=200)
  76.         {
  77.             licz++;
  78.         }
  79.         else
  80.         {
  81.             licz++;
  82.             if(licz>najdluzszy)
  83.                 najdluzszy=licz;
  84.             licz=0;
  85.         }
  86.     }
  87.  
  88.     cout << najdluzszy << endl;
  89.  
  90.     wyniki << "c)\n Najdluzszy ciag rosnacy kolejnych liczb fibonacziego ma dlugosc: " << najdluzszy << endl << endl;
  91.  
  92.  
  93.  
  94. {
  95.  
  96.  
  97. ////    cout << fib(6) << endl;
  98. ////    cout << ktoryWyraz(8) << endl;
  99. //
  100. //
  101. //    int daneSort[201];
  102. //
  103. //    for(int i=0; i<201; i++)
  104. //        daneSort[i] = dane[i];
  105. //
  106. //    sort(daneSort, daneSort+201);
  107. //
  108. ////    if(czyFib(daneSort[200]))
  109. ////       cout << 1;
  110. //
  111. //    int ciagMax=0;
  112. //
  113. //    for(int i=0, ciag=0; i<201; i++)
  114. //    {
  115. //        if(czyFib(daneSort[i]) && czyFib(daneSort[i+1]))
  116. //        {
  117. //            if(daneSort[i+1] == fib(ktoryWyraz(daneSort[i])+1))
  118. //            {
  119. //                ciag++;
  120. //            }
  121. //            else
  122. //            {
  123. //                if(ciag>ciagMax)
  124. //                    ciagMax=ciag;
  125. //            }
  126. //        }
  127. //        else
  128. //        {
  129. //            if(ciag>ciagMax)
  130. //                ciagMax=ciag;
  131. //        }
  132. //    }
  133. //
  134. //    //cout << ciagMax << endl;
  135. //
  136. //    wyniki << "c)\nDlugosc tego ciagu to: " << ciagMax << endl << endl;
  137. ////
  138. ////    for(int i=0; i<201; i++)
  139. ////        cout << daneSort[i] << endl;
  140. ////
  141. ////
  142. ////    int ciagMax=0;
  143. ////
  144. ////    for(int i=0, ciag=0; i<201; i++)
  145. ////    {
  146. ////        if(czyFib(dane[i]))
  147. ////        {
  148. ////            ciag++;
  149. ////        }
  150. ////        if(!czyFib(dane[i]) || i==200)
  151. ////        {
  152. ////            if(ciag>ciagMax)
  153. ////                ciagMax=ciag;
  154. ////            ciag=0;
  155. ////        }
  156. ////    }
  157. ////
  158. ////    cout << ciagMax << endl;
  159. }
  160.     /***************************************************************/
  161.  
  162.     wyniki << "d)\n";
  163.  
  164.     daneF.seekg(0);
  165. //    string test;
  166. //    daneF >> test;
  167. //    cout << test;
  168.  
  169.     string daneUluz[201];
  170.     for(int i=0; i<201; i++)
  171.     {
  172.         daneF >> daneUluz[i];
  173.     }
  174.     for(int i=0; i<201; i++)
  175.     {
  176.         sort(daneUluz[i].begin(), daneUluz[i].end());
  177.     }
  178.  
  179. //    for(int i=0; i<201; i++)
  180. //    {
  181. //        cout << daneUluz[i] << endl;
  182. //    }
  183.  
  184.     for(int i=0; i<201; i++)
  185.     {
  186.         bool pierwszy=true;
  187.         for(int j=i+1; j<201; j++)
  188.         {
  189.             if(daneUluz[i]==daneUluz[j] && dane[i]!=dane[j])
  190.             {
  191.                 if(pierwszy)
  192.                 {
  193.                     //////////////////
  194.                     wyniki << dane[i] << '\t' << dane[j];
  195.                     pierwszy=false;
  196.                 }
  197.                 else
  198.                 {
  199.                     wyniki << '\t' << dane[j];
  200.                 }
  201.             }
  202.         }
  203.         if(!pierwszy)
  204.             wyniki << endl;
  205.     }
  206.  
  207.     wyniki << endl;
  208.  
  209.  
  210.  
  211.     return 0;
  212. }
  213.  
  214. bool czyFib(int liczba)
  215. {
  216.     if(liczba==0)
  217.         return true;
  218.  
  219.     int szukaj1 = 0;
  220.     int szukaj2 = 1;
  221.     int szukaj3 = 1;
  222.  
  223.     while(liczba>szukaj1)
  224.     {
  225.         //cout << "dziala\t" << szukaj1 << '\t'<< szukaj2 << '\t'<< szukaj3 << '\n';
  226.         int bufor=szukaj3;
  227.  
  228.         szukaj3 = szukaj3 + szukaj2;
  229.         szukaj1 = szukaj2;
  230.         szukaj2 = bufor;
  231.  
  232.     }
  233.  
  234.     if(liczba==szukaj1)
  235.         return true;
  236.     return false;
  237. }
  238.  
  239. int fib(int wyraz)
  240. {
  241.     if(wyraz==0)
  242.         return 0;
  243.     if(wyraz==1)
  244.         return 1;
  245.  
  246.     return fib(wyraz-1) + fib(wyraz-2);
  247. }
  248.  
  249. int ktoryWyraz(int liczba)
  250. {
  251.     int wynik=0;
  252.  
  253.     while(fib(wynik)<liczba)
  254.     {
  255.         wynik++;
  256.     }
  257.  
  258.     return wynik;
  259. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement