• Informatyka klasa III
      • Informatyka klasa III

      • 24.05.2022 18:20
      • Zagadnienia, przykłady, zadania z informatyki dla uczniów liceum z klas 3. 
        Dodatkowe materiały i ćwiczenia do lekcji https://dlaucznia.migra.pl/
        Linki do stron z przykładami:
        https://zadaniezinformatyki.pl/
        Przykłady rozwiązan problemów - programowanie i algorytmy:
        https://www.algorytm.edu.pl/algorytmy-maturalne/operacje-na-ulamkach.html 

      • ALGORYTMY NA LICZBACH

        Zamiana z systemu dziesietnego na binarny:

        #include <iostream>
        using namespace std;

        int main() {

         int liczba;
         cout<<"Podaj liczbe dziesietna: ";
         cin >> liczba;
         
         string wynik;
         
         while(liczba){
          wynik = (liczba%2?"1":"0") + wynik;
          liczba /= 2;
         }
         cout <<"Liczba w systemie binarnym: "<< wynik;

         return 0;
        }

         

        Zamiana z systemu binarnego na dziesiętny:

        #include <iostream>
        #include <cstdlib>
        #include <string>
        
        using namespace std;
        
        int bin2dec (string binarna)
        {
            int dziesietna = strtol(binarna.c_str(), NULL, 2);
        
            return dziesietna;
        }
        
        int main()
        {
            string liczba;
            
            cout << "Podaj liczbe binarna:" << endl;
            cin >> liczba;
            cout << bin2dec(liczba) << endl;
            
            system ("pause >nul");
            return 0;
        }

         

        Zamiana z systemu dziesietnego na inny:

         

        #include<iostream>
        using namespace std;

        void zamiana(long long n, int p)
        {
             if(n>0)
             {
                    zamiana(n/p,p);
                    if(n%p>9)
        //dla systemów o podstawie większej niż 9 cyfry są literami
                             switch(n%p) 
                             {
                                        case 10:
                                             cout<<"A";
                                             break;
                                        case 11:
                                             cout<<"B";
                                             break;
                                        case 12:
                                             cout<<"C";
                                             break;
                                        case 13:
                                             cout<<"D";
                                             break;
                                        case 14:
                                             cout<<"E";
                                             break;
                                        case 15:
                                             cout<<"F";
                                             break;
                             }
                   else
                       cout<<n%p;
             }
        }

        int main()
        {
            int p;
            long long n;
            
            cout<<"Podaj liczbę i podstawę systemu: ";
            cin>>n>>p;
            
            cout<<"Liczba "<<n<<" w systemie "<<p<<": ";
            
            if(n==0)
                cout<<0;
            else
                zamiana(n,p);

            return 0;    
        }
         

        Dodawanie ułamków zwykłych:

        #include <iostream>
        using namespace std;
        int NWD(int a, int b)
        {
            int pom;
            while(b!=0)
            {
             pom = b;
             b = a%b;
             a = pom;  
            }
            return a;
        }
         
        int NWW(int a, int b)
        {
            return a/NWD(a,b)*b;
        }
         
        int main()
        {
            int l1, l2, m1, m2; //liczniki i mianowniki
            char kreska;
         
            cout<<"Podaj pierwszy ułamek w formacie licznik/mianownik: ";
            cin>>l1>>kreska>>m1;
         
            cout<<"Podaj drugi ułamek w formacie licznik/mianownik: ";
            cin>>l2>>kreska>>m2;    
         
            int licznik, mianownik; //licznik i mianownik ułamka wynikowego
         
            mianownik = NWW(m1, m2);
            int pom = licznik = mianownik/m1*l1 + mianownik/m2*l2;
         
            licznik /= NWD(pom,mianownik);
            mianownik /= NWD(pom,mianownik);
         
            cout<<l1<<"/"<<m1<<" + "<<l2<<"/"<<m2<<" = "<<licznik<<"/"<<mianownik;
         
            return 0;    
        }

         

         

         

         

        Metoda połowienia, podejście zachłanne i rekurencja:

        TEMAT C3 - podręcznik str. 138-153

        METODA POŁOWIENIA

        Ćwiczenie 3/142

        #include <iostream>
        using namespace std;

        const int N = 5;
        int a[N];

        void wprowadz_dane()
        {
            for(int i = 0; i < N; i++)
            {
                cout << "Podaj dana nr " << i << ": ";
                cin >> a[i];
            }
        }
         
        int znajdz_dana(int wartosc)
        {
            int poczatek, koniec, srodek;
            poczatek = 0;
            koniec = N - 1;
            do
            {
                srodek = (poczatek + koniec) / 2;
                if(a[srodek] == wartosc)
                    return srodek;
                else
                    if(wartosc < a[srodek])
                        koniec = srodek - 1;
                    else
                        poczatek = srodek + 1;
            } 
            while(poczatek <= koniec);

            return -1;
        }


        int main ()
        {
            int wartosc, pozycja;
            wprowadz_dane();
            cout << "Podaj dana do wyszukania: ";
            cin >> wartosc;
            pozycja = znajdz_dana(wartosc);
            if(pozycja >= 0)
                cout << "Znaleziono wartosc " << wartosc << " na pozycji " 
                << pozycja << " (pozycje liczone sa od 0)" << endl;
            else
                cout << "Nie znaleziono wartosci " << wartosc << endl;

            return 0;    
        }


         

        METODA ZACHŁANNA

        Ćwiczenie 7/146

        #include <iostream>
        using namespace std;

        const int nominaly[] = {200, 100, 50, 20, 10, 5, 2, 1};    // Nominaly w kolejnosc malejacej
        const int l_nominalow = 8;

        void znajdz_wypisz_reszte(int reszta)
        {
            if(reszta < 0)
            {
                cout << "Reszta ujemna!" << endl;
                return;
            }

            cout << "Wyplacone nominaly: " << endl;
            int aktualny_nominal = 0;
            while(reszta > 0 && aktualny_nominal < l_nominalow)
            {
                while(aktualny_nominal < l_nominalow && reszta < nominaly[aktualny_nominal])
                    aktualny_nominal++;

                if(aktualny_nominal < l_nominalow && reszta >= nominaly[aktualny_nominal])
                {
                    int l_banknotow = reszta / nominaly[aktualny_nominal];
                    cout << l_banknotow << " x " << nominaly[aktualny_nominal] << " zl" << endl;
                    reszta -= l_banknotow * nominaly[aktualny_nominal];
                }
            }
            if(reszta > 0)
                cout << "Brak nominalow do wydania pozostalej kwoty: " << reszta << " zl" << endl;
        }

        void testuj(int cena, int wplata)
        {
            cout << "Cena: " << cena << ", wplata: " << wplata << endl;
            znajdz_wypisz_reszte(wplata - cena);
        }

        int main()
        {
            testuj(850, 1000);
            testuj(85, 100);
            testuj(90, 100);
            testuj(96, 100);
            testuj(100, 96);
            testuj(100, 100);
                
            return 0;
        }
         

        REKURENCJA

        Ćwiczenie 9/148

        //Iteracyjna realizacja algorytmu obliczania silni

        #include <iostream>

        using namespace std;

        int silnia_iter(int n)
        {
            int wynik = 1;
            
            if(n > 1)
                for(int i = 2; i <= n; i++)
                    wynik *= i;
            return wynik;
        }

        int main()
        {
            int n;
            cout << "Podaj n: ";
            cin >> n;
            cout << n << "! = " << silnia_iter(n) << endl;
            return 0;
        }

         

        Ćwiczenie 10/150

        // Rekurencyjna realizacja algorytmu oblicznia wartosci poteg liczb o wykladnikach naturalnych
        #include <iostream>

        using namespace std;

        int silnia_rek(int n)
        {
            if( n == 0 )
                return 1;
            else
                return n*silnia_rek(n - 1);
        }

        int main()
        {
            int liczba;
            cout << "Podaj liczbe: ";
            cin >> liczba;
            cout << liczba << '!' << " = " << silnia_rek(liczba) << endl;
        }
         

        Ćwiczenie 13/152

        // Rekurencyjna realizacja algorytmu obliczania liczb Fibonacciego
        #include <iostream>

        using namespace std;

        long fib_rek(int n)
        {
            if( n < 3 )
                return 1;
            else
                return fib_rek(n - 2) + fib_rek(n - 1);
        }

        int main()
        {
            for(int i = 1; i <= 40; ++i)
                cout << "F(" << i << ") = " << fib_rek(i) << endl;
            return 0;
        }
         

        Algorytmy na tekstach - klasa 3:

        TEMAT C1

        Temat C1 - ćwiczenie 9

        #include <iostream>
        #include <string>

        using namespace std;

        int main()
        {
            string s1, s2;
            s1 = "Stosujemy dane";
            s2 = "tekstowe w C++"; 
            cout << s1 + " " + s2;
            return 0;
        }

        Temat C1 - ćwiczenie 10

        #include <iostream>
        #include <string>
        using namespace std;

        int main()
        {
            string wyraz;
            int dlugosc;
            
            cout << "Podaj wyraz: ";
            cin >> wyraz;
            dlugosc = wyraz.length();
                for(int i = 0; i < dlugosc; i++)
                if( wyraz[i] == 'a' )
                    wyraz[i] = 'b';
                cout << "Wyraz po przetworzeniu: " << wyraz << endl;
            return 0;
        }

        Temat C1 - ćwiczenie 11

        #include <iostream>
        #include <string>

        using namespace std;

        int main()
        {
            string wyraz;
            int dlugosc;
            
            cout << "Podaj wyraz: ";
            cin >> wyraz;
            dlugosc = wyraz.length();
            cout << "Pierwsza litera: " << wyraz[0] << endl;
            cout << "Ostatnia litera: " << wyraz[dlugosc - 1] << endl;
            return 0;
        }

        Temat C1 - ćwiczenie 12

        #include <iostream>
        #include <string>

        using namespace std;

        int main()
        {
            string wyraz;
            int dlugosc, litera1, i;
            
            cout << "Podaj wyraz: ";
            cin >> wyraz;
            dlugosc = wyraz.length();
            litera1 = wyraz[0];
            
            if(wyraz[0] != wyraz[dlugosc - 1])
            {
                wyraz[0] = wyraz[dlugosc-1];    
                wyraz[dlugosc-1] = litera1;
                    
                cout << wyraz;
            }
            else
                cout << "Pierwsza i ostatnia litera sa takie same.";
            
            
            return 0;
        }

         

        Temat C1 - ćwiczenie 13

        #include <iostream>
        #include <string>
        using namespace std;

        int main()
        {
            string wyraz;
            int dlugosc;
            
            cout << "Podaj wyraz: ";
            cin >> wyraz;
            dlugosc = wyraz.length();
            int i = 1;
            while (i < dlugosc)
            {
                wyraz[i] = 'x';
                i = i + 2;
            }
            cout << "Wyraz po zamianie co drugiej litery na x: " << wyraz << endl;
            return 0;
        }

        Temat C1 - ćwiczenie 15

        #include <iostream>
        #include <string>
        using namespace std;

        bool teksty_sa_identyczne(string t1, string t2)
        {
            int i, dl1, dl2;
            i = 0;
            dl1 = t1.length();
            dl2 = t2.length();
            while(i < dl1 && i < dl2 && t1[i] == t2[i])
                i++;
            return i == dl1 && i == dl2;
        }

        int main ()
        {
            string tekst1, tekst2;
            cout << "Wprowadz pierwszy tekst: ";
            cin >> tekst1;
            cout << "Wprowadz drugi tekst: ";
            cin >> tekst2;
            if(teksty_sa_identyczne(tekst1, tekst2))
                cout << "Teksty sa takie same";
            else
                cout << "Teksty sa rozne";
            return 0;
        }

        Temat C1 - ćwiczenie 16

        #include <iostream>
        #include <string>

        using namespace std;

        int zlicz_a(string tekst)
        {
            int liczba_znakow = 0;

            for(int i = 0; i < tekst.length(); i++)
                if(tekst[i] == 'a')
                    liczba_znakow++;
                return liczba_znakow;
        }

        int main()
        {
            string napis;
            char znak;
            cout << "Podaj napis: ";
            cin >> napis;
            cout << "Liczba znakow " << "\"" << "a" << "\"" << " w napisie " << napis << " wynosi: " << zlicz_a(napis) << endl;
            return 0;
        }

        Temat C1 - ćwiczenie 17

        #include <iostream>
        #include <string>

        using namespace std;

        int zlicz_znak(string tekst)
        {
            int liczba_znakow = 0;

            for(int i = 0; i < tekst.length(); i++)
                if(tekst[i] == 'a')
                    liczba_znakow++;
            return liczba_znakow;
        }

        int main()
        {
            string napis;
            cout << "Podaj napis: ";
            getline(cin, napis);
            cout << "Liczba znakow " << "a" << " w napisie " << napis << " wynosi: " << zlicz_znak(napis) << endl;
            return 0;
        }

        Temat C1 - ćwiczenie 18

        #include <iostream>
        #include <string>

        using namespace std;

        int zlicz_znak(string tekst, char z)
        {
            int liczba_znakow = 0;

            for(int i = 0; i < tekst.length(); i++)
                if(tekst[i] == z)
                    liczba_znakow++;
            return liczba_znakow;
        }

        int main()
        {
            string napis;
            char znak;
            
            cout<<"**********************************"<<endl;
            cout<<"MENU PROGRAMU"<<endl;
            cout<<"1. Zliczanie wszystkich liter a"<<endl;
            cout<<"2. Zliczanie wszystkich liter b"<<endl;
            cout<<"3. Zliczanie wszystkich liter c"<<endl;
            cout<<"**********************************"<<endl;
            
            cout << "Podaj napis: ";
            getline(cin, napis);
            cout << "Podaj znak opcji: ";
            cin >> znak;
            
            switch(znak)
            {
                case 'a':
                    cout << "Liczba znakow " << znak << " w napisie " << napis << " wynosi: " << zlicz_znak(napis, znak) << endl;
                break;
                
                case 'b':
                    cout << "Liczba znakow " << znak << " w napisie " << napis << " wynosi: " << zlicz_znak(napis, znak) << endl;
                break;
                
                case 'c':
                    cout << "Liczba znakow " << znak << " w napisie " << napis << " wynosi: " << zlicz_znak(napis, znak) << endl;
                break;
                    
            }
            
            

            return 0;
        }

        Temat C1 - ćwiczenie 20

        #include <iostream>

        using namespace std;

        int znajdz_tekst(string tekst, string wzorzec, int pozycja_startowa)

            int dl1 = tekst.length();                                                   // Użycie metody standardowej length()do wyznaczenia długości tekstu...
            int dl2 = wzorzec.length();                                                    // ... i wzorca
           
            for(int i = pozycja_startowa; i < dl1-dl2+1; i++)                               // Dla każdego znaku tekstu
            {
                int j; 
                for(j = 0; j < dl2; j++)                                                     // Dla każdego znaku wzorca
                    if(tekst[i+j] != wzorzec[j])                                          // Rozbieżność
                        break;                                                          // Przerywamy pętlę wewnętrzną
                if(j == dl2)                                                              // Porównano z powodzeniem wszystkie znaki wzorca
                    return i;                                                           // Zwracamy aktualną pozycję w tekście
            }
            return -1;                                                                  // Nie znaleziono
        }

        int main()
        {
            // Wyszukiwanie wszystkich wystąpień
            string przeszukiwany_tekst, tekst_do_wyszukania;
            
            cout << "Wprowadz tekst do przeszukania: ";
            cin >> przeszukiwany_tekst;
            cout << "Wprowadz tekst do wyszukania: ";
            cin >> tekst_do_wyszukania;
            
            int pozycja = 0;
            do
            {
                pozycja = znajdz_tekst(przeszukiwany_tekst, tekst_do_wyszukania, pozycja);
                if(pozycja>=0)
                {
                    cout << "Znaleziono: | " << przeszukiwany_tekst << " | " << tekst_do_wyszukania << " | " << pozycja << " | " << endl;
                    pozycja++;      // Następne wyszukiwanie zaczyna się od kolejnego znaku po znalezionym fragmencie
                }
            } while(pozycja>=0);
            return 0;
        }

         

        Temat C1 - zadanie 6 (imię)

        #include <iostream>
        #include <string>

        using namespace std;

        int main()
        {
            string imie;
            
            cout << "Podaj imie: ";
            cin >> imie;
            
            //funkcja tolower zwraca zawsze mala litere, niezaleznie od tego czy na wejsciu podamy mala czy duza
            char ostatniZnak = tolower( imie[imie.length() - 1] );
            if( ostatniZnak == 'a' )
                cout << "Prawdopodobnie jest to imie zenskie" << endl;
            else
                cout << "Prawdopodobnie jest to imie meskie" << endl;
            
            return 0;
        }

        Sprawdzian nr 1 – klasa 3 LO

        Grupa A, B i C

        Grupa A (nr komputera: 1,4,7,10,13,16,19,22):

        Zadanie 1.

        Napisz program wypisujący na ekranie napisy z połączonych łańcuchów słów z1, z2 i z3, które są zmiennymi typu string  

        z1=”  Nauka języka C++, ”

        z2=” nigdy nie była trudna, ”

        z3=” ale warto poznać podstawy.  ”

        Proszę  wpisać własne zdania zamiast powyższych.

        Zadanie 2.

        Napisz program w języku C++ ze zmienną slowo typu string, który zamieni wszystkie litery ‘o’ na ‘k’ wprowadzonym słowie z klawiatury, wyświetli to słowo po przekształceniu  oraz zliczy i wyświetli liczbę liter występujących w danym słowie.

        Przetestuj program dla słów: pogoda, kolory i oaza.

        Zadanie 3.

        W języku C++ napisz program wyprowadzający na ekran drugą i przedostatnią literę wyrazu wprowadzonego z klawiatury.
        Przetestuj program dla kilku wyrazów np. matematyka, fizyka, chemia.   

         

        Grupa B (nr komputera: 2,5,8,11,14,17,20,23):

        Zadanie 1.

        Napisz program wypisujący na ekranie napisy z połączonych łańcuchów słów z1, z2 i z3, które są zmiennymi typu string  

        z1=”  Nauka języka C++, ”

        z2=” nigdy nie była trudna, ”

        z3=” ale warto poznać podstawy.  ”

        Proszę  wpisać własne zdania zamiast powyższych.

        Zadanie 2.

        Napisz program w języku C++ ze zmienną slowo typu string, który zamieni wszystkie litery ‘b’ na ‘d’ wprowadzonym słowie z klawiatury, wyświetli to słowo po przekształceniu  oraz zliczy i wyświetli liczbę liter występujących w danym słowie.

        Przetestuj program dla słów: biblioteka, bobra, berberys.

        Zadanie 3.

        W języku C++ napisz program wyprowadzający na ekran trzecią i drugą od końca literę wyrazu wprowadzonego z klawiatury.
        Przetestuj program dla kilku wyrazów np. informatyka, biologia, sobota.   

         

        Grupa C(nr komputera: 3,6,9,12,15,18,21,24):

        Zadanie 1.

        Napisz program wypisujący na ekranie napisy z połączonych łańcuchów słów z1, z2 i z3, które są zmiennymi typu string  

        z1=”  Nauka języka C++, ”

        z2=” nigdy nie była trudna, ”

        z3=” ale warto poznać podstawy.  ”

        Proszę  wpisać własne zdania zamiast powyższych.

        Zadanie 2.

        Napisz program w języku C++ ze zmienną slowo typu string, który zamieni wszystkie litery ‘c’ na ‘w’ wprowadzonym słowie z klawiatury, wyświetli to słowo po przekształceniu  oraz zliczy i wyświetli liczbę liter występujących w danym słowie.

        Przetestuj program dla słów: ciecierzyca, cwaniaczek i ciemierrnik.

        Zadanie 3.

        W języku C++ napisz program wyprowadzający na ekran piątą i trzecią od końca literę wyrazu wprowadzonego z klawiatury.
        Przetestuj program dla kilku wyrazów np. matematyka, zapominanie, wychowanie.   

         

        Szyfrowanie

        TEMAT C2 - programy

        ćw. 9/128

         

        #include <iostream>
        #include <string>
        using namespace std;

        int main()

        {
            string napis;

            cout << "Wpisz wyraz " << endl;
            cin >> napis;
            for(int i = napis.length() - 1; i >= 0; i--)    
                cout << napis[i];
            return 0;
        }

        ćw. 10/130

        #include <iostream>
        #include <string>
        #include <cctype>

        using namespace std;

        unsigned int znak_na_kod(char znak)
        {
            return toupper(znak) - 'A';
        }

        unsigned char kod_na_znak(int kod_znaku)
        {
            
            return kod_znaku + 'A';
        }

        main()
        {
            char litera;
            cout << "Podaj znak: ";
            cin >> litera;
            cout << "Pozycja w alfabecie: " << znak_na_kod(litera) << endl << endl;
            
            int liczba;
            cout << "Podaj liczbe: ";
            cin >> liczba;
            cout << "Znak to: " << kod_na_znak(liczba);
        }

        ćw. 11/131

        #include <iostream>
        #include <string>
        #include <cctype>

        using namespace std;

        unsigned int znak_na_kod(char znak)
        {
            return toupper(toupper(znak)) - 'A';
        }

        unsigned char kod_na_znak(int kod_znaku)
        {
            return kod_znaku + 'A';
        }

        string zaszyfruj(string napis)
        {
            string wynik = "";
            for(int i = 0; i < napis.length(); i++)
            {
                unsigned int kod_znaku = (znak_na_kod(napis[i]));
                unsigned int kod_znaku_zaszyfrowany =  (kod_znaku + 3) % 26;
                wynik += kod_na_znak(kod_znaku_zaszyfrowany);
            }
            return wynik;
        }


        int main()
        {
            string tekst;
            cout << "Wpisz tekst do zaszyfrowania: ";
            cin >> tekst;
            cout << "Zaszyfrowany tekst: " << zaszyfruj(tekst) << endl;

            return 0;
        }

        ćw. 13/131

        #include <iostream>
        #include <string>
        #include <cctype>

        using namespace std;

        unsigned int znak_na_kod(char znak)
        {
            return toupper(toupper(znak)) - 'A';
        }

        unsigned char kod_na_znak(int kod_znaku)
        {
            return kod_znaku + 'A';
        }

        string zaszyfruj(string napis)
        {
            string wynik = "";
            for(int i = 0; i < napis.length(); i++)
            {
                unsigned int kod_znaku = (znak_na_kod(napis[i]));
                unsigned int kod_znaku_zaszyfrowany =  (kod_znaku + 3) % 26;
                wynik += kod_na_znak(kod_znaku_zaszyfrowany);
            }
            return wynik;
        }

        string odszyfruj(string napis)
        {
            string wynik = "";
            for(int i = 0; i < napis.length(); i++)
            {
                unsigned int kod_znaku = (znak_na_kod(napis[i]));
                unsigned int kod_znaku_odszyfrowany = (kod_znaku - 3 + 26) % 26;
                wynik += kod_na_znak(kod_znaku_odszyfrowany);
            }
            return wynik;
        }


        int main()
        {
            string tekst;
            cout << "Wpisz tekst do zaszyfrowania: ";
            cin >> tekst;
            cout << "Zaszyfrowany tekst: " << zaszyfruj(tekst) << endl << endl;
            
            cout << "Wpisz tekst do odszyfrowania: ";
            cin >> tekst;
            cout << "Odszyfrowany tekst: " << odszyfruj(tekst) << endl;
            
            return 0;
        }
         

        ćw. 15/134

        #include <iostream>
        #include <string>
        #include <cctype>

        using namespace std;

        string dopelnij(string napis, char znak, int liczba_znakow)
        {
            string wynik = napis;
            for(int i = napis.length(); i < liczba_znakow; i++)
                wynik += znak;
            return wynik;
        }

        int liczba_znakow_z_dopelnieniem(string napis, int liczba_kolumn)
        {
            int dlugosc = napis.length();
            int liczba_znakow_ostatni_wiersz = dlugosc % liczba_kolumn;
            if(liczba_znakow_ostatni_wiersz != 0)
                dlugosc += (liczba_kolumn - liczba_znakow_ostatni_wiersz);
            return dlugosc;
        }

        string zaszyfruj(string napis, int liczba_kolumn)
        {
            string wynik = "";
            napis = dopelnij(napis, '_', liczba_znakow_z_dopelnieniem(napis, liczba_kolumn));
            int dlugosc = napis.length();
            int akt_pozycja = 0;
            for(int i = 0; i < dlugosc; i++)
            {
                wynik += napis[akt_pozycja];
                akt_pozycja += liczba_kolumn;
                if(akt_pozycja >= dlugosc)
                    akt_pozycja -= (dlugosc-1);
            }
            return wynik;
        }

        int main()
        {
            string tekst;
            int kolumna;
            cout << "Wpisz tekst do zaszyfrowania: ";
            cin >> tekst;
            cout << "Podaj liczbe kolumn: ";
            cin >> kolumna;
            
            cout << "Zaszyfrowany tekst: " << zaszyfruj(tekst,kolumna) << endl;
            
            return 0;
        }
         

        ćw. 16/134

        #include <iostream>
        #include <string>
        #include <cctype>

        using namespace std;

        string dopelnij(string napis, char znak, int liczba_znakow)
        {
            string wynik = napis;
            for(int i = napis.length(); i < liczba_znakow; i++)
                wynik += znak;
            return wynik;
        }

        int liczba_znakow_z_dopelnieniem(string napis, int liczba_kolumn)
        {
            int dlugosc = napis.length();
            int liczba_znakow_ostatni_wiersz = dlugosc % liczba_kolumn;
            if(liczba_znakow_ostatni_wiersz != 0)
                dlugosc += (liczba_kolumn - liczba_znakow_ostatni_wiersz);
            return dlugosc;
        }

        string zaszyfruj(string napis, int liczba_kolumn)
        {
            string wynik = "";
            napis = dopelnij(napis, '_', liczba_znakow_z_dopelnieniem(napis, liczba_kolumn));
            int dlugosc = napis.length();
            int akt_pozycja = 0;
            for(int i = 0; i < dlugosc; i++)
            {
                wynik += napis[akt_pozycja];
                akt_pozycja += liczba_kolumn;
                if(akt_pozycja >= dlugosc)
                    akt_pozycja -= (dlugosc-1);
            }
            return wynik;
        }

        string odszyfruj(string napis, int liczba_kolumn)
        {
            string wynik = "";
            int dlugosc = napis.length();
            int liczba_wierszy = dlugosc / liczba_kolumn;
            int akt_pozycja = 0;
            for(int i = 0; i < dlugosc; i++)
            {
                wynik += napis[akt_pozycja];
                akt_pozycja += liczba_wierszy;
                if(akt_pozycja >= dlugosc)
                    akt_pozycja -= (dlugosc-1);
            }
            return wynik;
        }

        int main()
        {
            string tekst;
            int kolumna;
            
            cout << "Wpisz tekst do zaszyfrowania: ";
            cin >> tekst;
            cout << "Podaj liczbe kolumn: ";
            cin >> kolumna;
            
            cout << "Zaszyfrowany tekst: " << zaszyfruj(tekst,kolumna) << endl << endl;
            
            cout << "Wpisz tekst do odszyfrowania: ";
            cin >> tekst;
            cout << "Podaj liczbe kolumn: ";
            cin >> kolumna;
            
            cout << "Odszyfrowany tekst: " << odszyfruj(tekst,kolumna) << endl;
            
            return 0;
        }

         

         

      • Wróć do listy artykułów
  • Galeria zdjęć

      brak danych