0xE110w

Drugio_efektas_3th_lvl_1_4_ex

Nov 5th, 2016
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.26 KB | None | 0 0
  1. //Drugio efektas
  2. // 3 lygis, 1 pamokele, 4 uzduotis
  3. /******************************************************
  4. * Parasykite programa, kuri isspausdintu ilgiausia zodziu grandinele, sudaryta is pradiniu duomenu zodziu.
  5. * Jei egzistuoja keletas vienodo ilgio zodzių grandineliu, rezultatu faile isveskite pirmaja.
  6. *******************************************************/
  7. #include <iostream>
  8. #include <iomanip>
  9. #include <cmath>
  10. #include <fstream>
  11. #include <string>
  12.  
  13. using namespace std;
  14. //---------------------------------------------------------
  15. //Programoje naudojamos konstantos
  16. const int MAKSIMALUS_ZODZIU_SKAICIUS = 100;
  17. //---------------------------------------------------------
  18. //Programoje naudojamu funkciju prototipai
  19. void Skaityti(string zodziai[], int &zodziuSkaicius);
  20. void Spausdinti(string ilgiausiaZodziuGrandinele);
  21. string Grandineles_Sudarymas(string zodziai[], int zodziuSkaicius, int index);
  22. bool Tikrinimas(string zodis1, string zodis2);
  23. string ILgiausia(string z[], int n);
  24. //---------------------------------------------------------
  25. int main()
  26. {
  27.    int zodziuSkaicius = 0;
  28.    string zodziai[MAKSIMALUS_ZODZIU_SKAICIUS];
  29.    string ilgiausiaZodziuGrandinele;
  30.    //Kitu programoje naudojamu kintamuju aprasymai
  31.    string grandineles[MAKSIMALUS_ZODZIU_SKAICIUS]; // grandineliu variacijos
  32.    //Programos veiksmai
  33.    Skaityti(zodziai, zodziuSkaicius);
  34.  
  35.    // Siunciami skirtingi zodziai kaip pirmieji sudarantys grandinele:
  36.    for(int i = 0; i<zodziuSkaicius; i++){
  37.        grandineles[i] = Grandineles_Sudarymas(zodziai, zodziuSkaicius, i);
  38.        cout << grandineles[i] << endl;
  39.     }
  40.  
  41.    ilgiausiaZodziuGrandinele = ILgiausia(grandineles, zodziuSkaicius);
  42.    cout << "Rezultatas:" << endl;
  43.    cout << ilgiausiaZodziuGrandinele << endl;
  44.    //Spausdinti(ilgiausiaZodziuGrandinele);
  45.  
  46.    return 0;
  47. }
  48. //---------------------------------------------------------
  49. // Zodziu nuskaitymo funckija
  50. void Skaityti(string zodziai[], int &zodziuSkaicius)
  51. {
  52.     ifstream fd("U1.txt");
  53.     while(!fd.eof()){
  54.         fd >> zodziai[zodziuSkaicius];
  55.         zodziuSkaicius++;
  56.     }
  57.     fd.close();
  58. }
  59. //---------------------------------------------------------
  60. // Funkcija, sudaranti zodziu grandinele
  61. // index - pirmasis zodis, kuriuo pradedama grandinele
  62. string Grandineles_Sudarymas(string zodziai[], int zodziuSkaicius, int index)
  63. {
  64.     string kriterijus = zodziai[index];        // kriterijus, pagal kuri ieskoma atitinkamu zodziu grandinelei
  65.     string Grandinele = zodziai[index] + '-';  // formuojama zodziu grandinele
  66.     string AtsZodz[zodziuSkaicius];            // atsarginis zodziu masyvas
  67.  
  68.     for(int i = 0; i<zodziuSkaicius; i++)
  69.         AtsZodz[i] = zodziai[i];
  70.     AtsZodz[index] = "";                       // nebereikalingas zodis
  71.  
  72.     for(int i = 0; i<zodziuSkaicius; i++){     // dvigubas ciklas, kad butu griztama prie ankstesniu
  73.         for(int j = 0; j<zodziuSkaicius; j++){ // zodziu, tokiu atveju, jei sarasas yra nerikiuotas
  74.             if(Tikrinimas(kriterijus, AtsZodz[j])){ // rastas sekantis zodis
  75.               kriterijus = AtsZodz[j];              // naujas paieskos kriterijus
  76.               Grandinele += AtsZodz[j] + '-';       // kuriama grandinele
  77.               AtsZodz[j] = "";                      // pasalinama zodzio reiksme
  78.             }
  79.         }
  80.     }
  81.     return Grandinele.substr(0, Grandinele.length()-1);
  82. }
  83. //---------------------------------------------------------
  84. // Tikrinama, ar zodis skiriasi tik vienu simboliu ir ar zodis yra vienodo ilgio
  85. bool Tikrinimas(string zodis1, string zodis2)
  86. {
  87.     int kiek = 0;
  88.     if(zodis1.length() == zodis2.length()){
  89.         for(int i = 0; i<zodis1.length(); i++){
  90.             if(zodis1[i] != zodis2[i]) kiek++;
  91.         }
  92.     } else return false;
  93.     if(kiek==1)return true;
  94.     else return false;
  95. }
  96. //---------------------------------------------------------
  97. // Surandama ir grazinama ilgiausia grandinele
  98. string ILgiausia(string z[], int n)
  99. {
  100.     string grandinele = "";
  101.     for(int i = 0; i<n; i++){
  102.         if(z[i].length() > grandinele.length())
  103.             grandinele = z[i];
  104.     }
  105.     return grandinele;
  106. }
  107. //---------------------------------------------------------
  108. void Spausdinti(string ilgiausiaZodziuGrandinele)
  109. {
  110.    cout << ilgiausiaZodziuGrandinele;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment