Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
4.0 kB
1
Indexable
Never
#include <vector>
#include <string>
#include <algorithm>
#include <map>
#include <fstream>
using namespace std;

// ZADANIE 1 //

class Slowa{
    protected:
        vector<string> zestaw;
        int dlg;
        int ile;

    public:
        Slowa(int dlugosc) : dlg(dlugosc), ile{0} {}

        virtual ~Slowa() {}

        virtual void wstaw (const string & slowo){
            if(slowo.length() == dlg){
                zestaw.push_back(slowo);
                ile++;
            }
        }

        virtual void zmodyfikuj_zestaw() = 0;
}




// ZADANIE 2 //
class Slowa_wybrane : public Slowa {
private:
    char litera;

public:
    Slowa_wybrane(int dlugosc, char litera) : Slowa(dlugosc), litera(litera) {}

    virtual void wstaw(const string& slowo) {
        if (slowo.length() == dlg) {
            if (slowo[0] != litera) {
                if (find(zestaw.begin(), zestaw.end(), slowo) == zestaw.end()) {
                    zestaw.push_back(slowo);
                    ile++;
                } else {
                    cout << "Słowo '" << slowo << "' już istnieje w zestawie." << endl;
                }
            } else {
                cout << "Słowo '" << slowo << "' zaczyna się na literę '" << litera << "' i nie może być dodane." << endl;
            }
        }
    }


    virtual void zmodyfikuj_zestaw() {
        sort(zestaw.begin(), zestaw.end());
    }

    Slowa_wybrane operator-(char litera_bis) {
        Slowa_wybrane nowy_obiekt(dlg, litera);
        for (const string& slowo : zestaw) {
            if (slowo[0] != litera_bis) {
                nowy_obiekt.wstaw(slowo);
            }
        }
        return nowy_obiekt;
    }

    void info() {
        for (const auto& s : zestaw) {
            cout << s << endl;
        }
    }
};

class Pojemnik_slow {
private:
    map<int, Slowa_wybrane*> pojemnik;

public:
    void dodaj_slowo(const string& slowo) {
        int dlugosc = slowo.length();
        if (pojemnik.find(dlugosc) == pojemnik.end()) {
            pojemnik[dlugosc] = new Slowa_wybrane(dlugosc, 's');
        }
        pojemnik[dlugosc]->wstaw(slowo);
    }


    void wyswietl() {
        for (auto it = pojemnik.begin(); it != pojemnik.end(); ++it) {
            cout << it->first << ": ";
            
            it->second->info();
            cout << endl;
        }
    }
};


int main(){
    bool on = true;
    do {
        int zadanie;
        cout << "Prosze wybrac numer zadania (1-3) - 4 konczy dzialanie programu" << endl;
        cin >> zadanie;
        switch (zadanie) {
            case 1: {
                cout << "------------------------" << endl;
                cout << "Zadanie 1" << endl;
                cout << "To zadanie nie wymaga wyswietlania niczego w konsoli" << endl;
                cout << "------------------------" << endl;
                break;
            }

            case 2: {
                cout << "------------------------" << endl;
                cout << "Zadanie 1" << endl;
                Slowa_wybrane sw(5, 'p');
                string slowa[] = {"Kolos", "arras", "Wisla", "stora", "ogrom", "Libia", "patio", "kwiat", "sanie"};
                for (const auto& s : slowa) {
                    sw.wstaw(s);
                }

                sw.info();
                sw = sw - 's';
                sw.info();
                sw.zmodyfikuj_zestaw();
                sw.info();
                cout << "------------------------" << endl;
                break;
            }

            case 3: {
                cout << "------------------------" << endl;
                cout << "Zadanie 1" << endl;
                Pojemnik_slow zestawy_slow;
                ifstream plik("plik.txt");
                string slowo;
                while (plik >> slowo) {
                    zestawy_slow.dodaj_slowo(slowo);
                }
                zestawy_slow.wyswietl();
                cout << "------------------------" << endl;
                break;
            }

            case 4: {
                on = false;