Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Drugio efektas
- // 3 lygis, 1 pamokele, 4 uzduotis
- /******************************************************
- * Parasykite programa, kuri isspausdintu ilgiausia zodziu grandinele, sudaryta is pradiniu duomenu zodziu.
- * Jei egzistuoja keletas vienodo ilgio zodzių grandineliu, rezultatu faile isveskite pirmaja.
- *******************************************************/
- #include <iostream>
- #include <iomanip>
- #include <cmath>
- #include <fstream>
- #include <string>
- using namespace std;
- //---------------------------------------------------------
- //Programoje naudojamos konstantos
- const int MAKSIMALUS_ZODZIU_SKAICIUS = 100;
- //---------------------------------------------------------
- //Programoje naudojamu funkciju prototipai
- void Skaityti(string zodziai[], int &zodziuSkaicius);
- void Spausdinti(string ilgiausiaZodziuGrandinele);
- string Grandineles_Sudarymas(string zodziai[], int zodziuSkaicius, int index);
- bool Tikrinimas(string zodis1, string zodis2);
- string ILgiausia(string z[], int n);
- //---------------------------------------------------------
- int main()
- {
- int zodziuSkaicius = 0;
- string zodziai[MAKSIMALUS_ZODZIU_SKAICIUS];
- string ilgiausiaZodziuGrandinele;
- //Kitu programoje naudojamu kintamuju aprasymai
- string grandineles[MAKSIMALUS_ZODZIU_SKAICIUS]; // grandineliu variacijos
- //Programos veiksmai
- Skaityti(zodziai, zodziuSkaicius);
- // Siunciami skirtingi zodziai kaip pirmieji sudarantys grandinele:
- for(int i = 0; i<zodziuSkaicius; i++){
- grandineles[i] = Grandineles_Sudarymas(zodziai, zodziuSkaicius, i);
- cout << grandineles[i] << endl;
- }
- ilgiausiaZodziuGrandinele = ILgiausia(grandineles, zodziuSkaicius);
- cout << "Rezultatas:" << endl;
- cout << ilgiausiaZodziuGrandinele << endl;
- //Spausdinti(ilgiausiaZodziuGrandinele);
- return 0;
- }
- //---------------------------------------------------------
- // Zodziu nuskaitymo funckija
- void Skaityti(string zodziai[], int &zodziuSkaicius)
- {
- ifstream fd("U1.txt");
- while(!fd.eof()){
- fd >> zodziai[zodziuSkaicius];
- zodziuSkaicius++;
- }
- fd.close();
- }
- //---------------------------------------------------------
- // Funkcija, sudaranti zodziu grandinele
- // index - pirmasis zodis, kuriuo pradedama grandinele
- string Grandineles_Sudarymas(string zodziai[], int zodziuSkaicius, int index)
- {
- string kriterijus = zodziai[index]; // kriterijus, pagal kuri ieskoma atitinkamu zodziu grandinelei
- string Grandinele = zodziai[index] + '-'; // formuojama zodziu grandinele
- string AtsZodz[zodziuSkaicius]; // atsarginis zodziu masyvas
- for(int i = 0; i<zodziuSkaicius; i++)
- AtsZodz[i] = zodziai[i];
- AtsZodz[index] = ""; // nebereikalingas zodis
- for(int i = 0; i<zodziuSkaicius; i++){ // dvigubas ciklas, kad butu griztama prie ankstesniu
- for(int j = 0; j<zodziuSkaicius; j++){ // zodziu, tokiu atveju, jei sarasas yra nerikiuotas
- if(Tikrinimas(kriterijus, AtsZodz[j])){ // rastas sekantis zodis
- kriterijus = AtsZodz[j]; // naujas paieskos kriterijus
- Grandinele += AtsZodz[j] + '-'; // kuriama grandinele
- AtsZodz[j] = ""; // pasalinama zodzio reiksme
- }
- }
- }
- return Grandinele.substr(0, Grandinele.length()-1);
- }
- //---------------------------------------------------------
- // Tikrinama, ar zodis skiriasi tik vienu simboliu ir ar zodis yra vienodo ilgio
- bool Tikrinimas(string zodis1, string zodis2)
- {
- int kiek = 0;
- if(zodis1.length() == zodis2.length()){
- for(int i = 0; i<zodis1.length(); i++){
- if(zodis1[i] != zodis2[i]) kiek++;
- }
- } else return false;
- if(kiek==1)return true;
- else return false;
- }
- //---------------------------------------------------------
- // Surandama ir grazinama ilgiausia grandinele
- string ILgiausia(string z[], int n)
- {
- string grandinele = "";
- for(int i = 0; i<n; i++){
- if(z[i].length() > grandinele.length())
- grandinele = z[i];
- }
- return grandinele;
- }
- //---------------------------------------------------------
- void Spausdinti(string ilgiausiaZodziuGrandinele)
- {
- cout << ilgiausiaZodziuGrandinele;
- }
Advertisement
Add Comment
Please, Sign In to add comment