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.htmlALGORYTMY 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
Ostatnie artykuły