From e37cf6b784eed831ecbc7cdf5046a6995f01f5f6 Mon Sep 17 00:00:00 2001 From: materus Date: Mon, 27 Jan 2025 23:31:45 +0100 Subject: [PATCH] Inicjalizacja repozytorium --- .../Pascal/.gitignore | 6 + .../zad1_rownanie_kwadratowe.pas | 44 ++++ .../zad2_rok_przestepny.pas | 37 +++ .../AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.pas | 38 +++ .../Pascal/AiSD5_C3/zad1_silnia.pas | 53 ++++ .../Pascal/AiSD5_C3/zad2_silnia_czas.pas | 71 +++++ .../Pascal/AiSD5_C3/zad4_suma_cyfr_rek.pas | 33 +++ .../Pascal/AiSD5_C3/zad5_potega.pas | 65 +++++ .../zad1_rownanie_kwadratowe.py | 20 ++ .../zad2_rok_przestepny.py | 15 ++ .../AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.py | 16 ++ .../Python/AiSD5_C3/zad3_silnia_czas.py | 40 +++ Algorytmy i struktury danych/README.md | 75 ++++++ Podstawy Programowania I/.gitignore | 8 + Podstawy Programowania I/Projekt1/main.cpp | 214 +++++++++++++++ Podstawy Programowania I/README.md | 249 ++++++++++++++++++ .../Zadanie 1.1/zadanie1.cpp | 34 +++ .../Zadanie 1.1/zadanie2.cpp | 41 +++ .../Zadanie 1.1/zadanie3.cpp | 27 ++ .../Zadanie 1.1/zadanie4.cpp | 28 ++ .../Zadanie 1.2/zadanie.cpp | 191 ++++++++++++++ .../Zadanie 1.3/zadanie.cpp | 186 +++++++++++++ README.org | 12 + org/.gitignore | 1 + org/AiSD.org | 53 ++++ org/PP1.org | 182 +++++++++++++ org/fix.lua | 4 + 27 files changed, 1743 insertions(+) create mode 100644 Algorytmy i struktury danych/Pascal/.gitignore create mode 100644 Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad1_rownanie_kwadratowe.pas create mode 100644 Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad2_rok_przestepny.pas create mode 100644 Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.pas create mode 100644 Algorytmy i struktury danych/Pascal/AiSD5_C3/zad1_silnia.pas create mode 100644 Algorytmy i struktury danych/Pascal/AiSD5_C3/zad2_silnia_czas.pas create mode 100644 Algorytmy i struktury danych/Pascal/AiSD5_C3/zad4_suma_cyfr_rek.pas create mode 100644 Algorytmy i struktury danych/Pascal/AiSD5_C3/zad5_potega.pas create mode 100644 Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad1_rownanie_kwadratowe.py create mode 100644 Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad2_rok_przestepny.py create mode 100644 Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.py create mode 100644 Algorytmy i struktury danych/Python/AiSD5_C3/zad3_silnia_czas.py create mode 100644 Algorytmy i struktury danych/README.md create mode 100644 Podstawy Programowania I/.gitignore create mode 100644 Podstawy Programowania I/Projekt1/main.cpp create mode 100644 Podstawy Programowania I/README.md create mode 100644 Podstawy Programowania I/Zadanie 1.1/zadanie1.cpp create mode 100644 Podstawy Programowania I/Zadanie 1.1/zadanie2.cpp create mode 100644 Podstawy Programowania I/Zadanie 1.1/zadanie3.cpp create mode 100644 Podstawy Programowania I/Zadanie 1.1/zadanie4.cpp create mode 100644 Podstawy Programowania I/Zadanie 1.2/zadanie.cpp create mode 100644 Podstawy Programowania I/Zadanie 1.3/zadanie.cpp create mode 100644 README.org create mode 100644 org/.gitignore create mode 100644 org/AiSD.org create mode 100644 org/PP1.org create mode 100644 org/fix.lua diff --git a/Algorytmy i struktury danych/Pascal/.gitignore b/Algorytmy i struktury danych/Pascal/.gitignore new file mode 100644 index 0000000..4903b7c --- /dev/null +++ b/Algorytmy i struktury danych/Pascal/.gitignore @@ -0,0 +1,6 @@ +* + +!.gitignore +!**/ +!*.pas +.#*.pas \ No newline at end of file diff --git a/Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad1_rownanie_kwadratowe.pas b/Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad1_rownanie_kwadratowe.pas new file mode 100644 index 0000000..17c0208 --- /dev/null +++ b/Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad1_rownanie_kwadratowe.pas @@ -0,0 +1,44 @@ +program rownanie_kwadratowe; +var + a,b,c : Double; + x,x1,x2 : Double; + Delta : Double; +begin + write('Podaj a: '); + ReadLn(a); + write('Podaj b: '); + ReadLn(b); + write('Podaj c: '); + ReadLn(c); + + + + if a=0 then + begin + x:=c/b; + writeln('To jest rownanie liniowe'); + writeln(x:0:5); // Wypisze pięć miejsc po przecinku zamiast naukowej notacji + end else + begin + Delta:=b*b-4*a*c; + if Delta < 0 then + writeln('Brak rozwiazan') + else + begin + if Delta > 0 then + begin + x1:=(-b - Sqrt(Delta))/(2*a); + x2:=(-b + Sqrt(Delta))/(2*a); + writeln('Dwa pierwiastki'); + writeln(x1:0:5); + writeln(x2:0:5); + end else + begin + x:=b/(2*a); + writeln('Jeden pierwiastek'); + writeln(x:0:5); + end; + end; + + end; +end. diff --git a/Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad2_rok_przestepny.pas b/Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad2_rok_przestepny.pas new file mode 100644 index 0000000..236c229 --- /dev/null +++ b/Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad2_rok_przestepny.pas @@ -0,0 +1,37 @@ +program rok_przestepny; + +function Czytaj_rok: Integer; +var + rok: Integer; +begin + write('Podaj rok: '); + readln(rok); + Czytaj_rok:=rok; +end; + +function Czy_przestepny(rok :Integer ): Boolean; +begin + Czy_przestepny:= ((rok mod 4 = 0) AND (NOT (rok mod 100 = 0)) ) OR (rok mod 400 = 0); +end; + +procedure Wypisz_czy_przestepny(rok : Integer; przestepny: Boolean ); +begin + if przestepny then + writeln('Rok ', rok, ' jest przestepny') + else + writeln('Rok ', rok, ' nie jest przestepny'); +end; + +procedure Glowna_procedura; +var + rok : Integer; + przestepny : Boolean; +begin + rok:= Czytaj_rok(); + przestepny:= Czy_przestepny(rok); + Wypisz_czy_przestepny(rok,przestepny); +end; + +begin + Glowna_procedura() +end. diff --git a/Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.pas b/Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.pas new file mode 100644 index 0000000..2fbd00b --- /dev/null +++ b/Algorytmy i struktury danych/Pascal/AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.pas @@ -0,0 +1,38 @@ +program suma_cyfr; +function Czytaj_liczbe : Integer; +var + liczba : Integer; +begin + write('Podaj liczbe: '); + readln(liczba); + Czytaj_liczbe:=liczba; +end; + +function Suma_cyfr(liczba : Integer) : Integer; +var suma : Integer; +begin + suma:=0; + liczba:=abs(liczba); + while liczba>0 do + begin + suma:=suma+(liczba mod 10); + liczba:=trunc(liczba/10); + end; + Suma_cyfr:=suma; +end; + +procedure Wypisz_wynik(liczba : Integer; suma : Integer ); +begin + writeln('Suma cyfr liczby ', liczba, ' to ', suma); +end; + +procedure Glowna_procedura; +var liczba : Integer; +begin + liczba:=Czytaj_liczbe(); + Wypisz_wynik(liczba,Suma_cyfr(liczba)); +end; + +begin + Glowna_procedura(); +end. diff --git a/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad1_silnia.pas b/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad1_silnia.pas new file mode 100644 index 0000000..1b0255a --- /dev/null +++ b/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad1_silnia.pas @@ -0,0 +1,53 @@ +program silnia; +function Czytaj_liczbe: Int64; +var + liczba: Int64; +begin + Write('Podaj liczbę calkowita: '); + ReadLn(liczba); + Czytaj_liczbe := liczba; +end; + +function Silnia_rekurencyjna(n: Int64): Int64; +begin + if n = 0 then + Silnia_rekurencyjna := 1 + else + Silnia_rekurencyjna := n * Silnia_rekurencyjna(n - 1); +end; + +function Silnia_iteracyjna(n: Int64): Int64; +var + wynik, i: Int64; +begin + wynik := 1; + for i := 1 to n do + wynik := wynik * i; + Silnia_iteracyjna := wynik; +end; + +procedure Wypisz_wyniki(wynikRek, wynikIter: Int64); +begin + WriteLn('Silnia rekurencyjna: ', wynikRek:10); + WriteLn('Silnia iteracyjna: ', wynikIter:10); +end; + +procedure Glowna_procedura; +var + liczba, wynikRek, wynikIter: Int64; +begin + liczba := Czytaj_liczbe; + if liczba < 0 then + begin + WriteLn('Silnia jest zdefiniowana tylko dla liczb nieujemnych.'); + Exit; + end; + + wynikRek := Silnia_rekurencyjna(liczba); + wynikIter := Silnia_iteracyjna(liczba); + Wypisz_wyniki(wynikRek, wynikIter); +end; + +begin + Glowna_procedura() +end. diff --git a/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad2_silnia_czas.pas b/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad2_silnia_czas.pas new file mode 100644 index 0000000..adcff2a --- /dev/null +++ b/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad2_silnia_czas.pas @@ -0,0 +1,71 @@ +program silnia_czas; +uses sysUtils; +function Czytaj_liczbe: Int64; +var + liczba : Int64; +begin + Write('Podaj liczbe calkowita: '); + ReadLn(liczba); + Czytaj_liczbe := liczba; +end; + +function Silnia_rekurencyjna(n: Int64): Int64; +begin + if n = 0 then + Silnia_rekurencyjna := 1 + else + Silnia_rekurencyjna := n * Silnia_rekurencyjna(n - 1); +end; + +function Silnia_iteracyjna(n: Int64): Int64; +var + wynik, i : Int64; +begin + wynik := 1; + for i := 1 to n do + wynik := wynik * i; + Silnia_iteracyjna := wynik; +end; + +procedure Wypisz_wyniki(liczba,ile,wynikRek, wynikIter : Int64; CzasI, CzasR : TdateTime); +begin + writeln('Podana liczba: ', liczba); + writeln('Podana liczba iteracji', ile); + writeln('Czas silni rekurencyjnej: ', CzasR:0:2, ' sekund'); + WriteLn('Silnia rekurencyjna: ', wynikRek:10); + writeln('Czas silni iteracyjnej: ', CzasI:0:2, ' sekund'); + WriteLn('Silnia iteracyjna: ', wynikIter:10); +end; + + +procedure Glowna_procedura; +var + CzasI, CzasR : TdateTime; + i : Int64; + ile, liczba : Int64; + wynikI, wynikR : Int64; +begin + liczba := Czytaj_liczbe(); + Write('Podaj liczbe iteracji: '); + ReadLn(ile); + CzasI := Time(); + for i := 0 to ile do + wynikI := Silnia_iteracyjna(liczba); + CzasI := Time()-CzasI; + CzasI := CzasI*24*60*60; + + + CzasR := Time(); + for i := 0 to ile do + wynikR := Silnia_rekurencyjna(liczba); + CzasR := Time()-CzasR; + CzasR := CzasR*24*60*60; + + + Wypisz_wyniki(liczba,ile,wynikR,wynikI,CzasI,CzasR); + +end; + +begin + Glowna_procedura() +end. diff --git a/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad4_suma_cyfr_rek.pas b/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad4_suma_cyfr_rek.pas new file mode 100644 index 0000000..556fb29 --- /dev/null +++ b/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad4_suma_cyfr_rek.pas @@ -0,0 +1,33 @@ +program suma_cyfr; +function Czytaj_liczbe : Integer; +var + liczba : Integer; +begin + write('Podaj liczbe: '); + readln(liczba); + Czytaj_liczbe:=liczba; +end; + +function Suma_cyfr(liczba : Integer) : Integer; +begin + if liczba = 0 then + Suma_cyfr:=0 + else + Suma_cyfr:= (abs(liczba) mod 10) + Suma_cyfr(liczba div 10); +end; + +procedure Wypisz_wynik(liczba : Integer; suma : Integer ); +begin + writeln('Suma cyfr liczby ', liczba, ' to ', suma); +end; + +procedure Glowna_procedura; +var liczba : Integer; +begin + liczba:=Czytaj_liczbe(); + Wypisz_wynik(liczba,Suma_cyfr(liczba)); +end; + +begin + Glowna_procedura(); +end. diff --git a/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad5_potega.pas b/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad5_potega.pas new file mode 100644 index 0000000..8cd5757 --- /dev/null +++ b/Algorytmy i struktury danych/Pascal/AiSD5_C3/zad5_potega.pas @@ -0,0 +1,65 @@ +program potega; +function potega_iter(a : Integer ;n : Integer ) : Integer; +var + wynik, i : Integer; +begin + wynik := 1; + for i := 1 to n do + wynik:= wynik*a; + potega_iter:= wynik; +end; + +function potega_rek(a : Integer ;n : Integer ) :Integer; +begin + if n = 0 then + potega_rek:= 1 + else + potega_rek:= a * potega_rek(a,n-1); +end; + + +function potega_iter_kwr(a : Integer ;n : Integer ) : Integer; +var + wynik : Integer; +begin + wynik := 1; + if n = 1 then + wynik:=a; + while n>1 do + begin + if n mod 2 = 1 then + begin + wynik:=a*wynik; + n:=n-1; + end + else + begin + wynik:=a*a*wynik; + n:=n div 2; + end; + end; + potega_iter_kwr:=wynik; +end; + +function potega_rek_kwr(a : Integer ;n : Integer ) :Integer; +var + wynik : Integer; +begin + wynik:=0; + if n = 0 then + potega_rek_kwr:= 1 + else if n mod 2 = 1 then + potega_rek_kwr:= a * potega_rek_kwr(a,n-1) + else + begin + wynik := potega_rek_kwr(a, n div 2); + potega_rek_kwr:=wynik*wynik; + end; +end; + +begin + WriteLn('Potega Iteracyjna: ', potega_iter(2,3)); + WriteLn('Potega Rekurencyjna: ', potega_rek(2,3)); + WriteLn('Potega Iteracyjna Kwadratowa: ', potega_iter_kwr(2,3)); + WriteLn('Potega Rekurencyjna Kwadratowa: ', potega_rek_kwr(2,3)); +end. diff --git a/Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad1_rownanie_kwadratowe.py b/Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad1_rownanie_kwadratowe.py new file mode 100644 index 0000000..f4a0717 --- /dev/null +++ b/Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad1_rownanie_kwadratowe.py @@ -0,0 +1,20 @@ +import math; + +a = float(input("Podaj a: ")) +b = float(input("Podaj b: ")) +c = float(input("Podaj c: ")) + +if(a==0): + x=c/b + print("To jest rownanie liniowe\n", x) +else: + Delta=b*b-4*a*c + if (Delta < 0): + print("Brak rozwiazan") + elif (Delta > 0): + x1=(-b - math.sqrt(Delta))/(2*a) + x2=(-b + math.sqrt(Delta))/(2*a) + print('Dwa pierwiastki\n', x1,'\n', x2) + else: + x=b/(2*a) + print('Jeden pierwiastek\n',x); diff --git a/Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad2_rok_przestepny.py b/Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad2_rok_przestepny.py new file mode 100644 index 0000000..843a19b --- /dev/null +++ b/Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad2_rok_przestepny.py @@ -0,0 +1,15 @@ +def Czytaj_rok(): + rok = int(input("Podaj rok: ")) + return rok; +def Czy_przestepny(rok): + return ((rok%4==0) and not (rok%100==0)) or (rok % 400 == 0) +def Wypisz_czy_przestepny(rok,przestepny): + if(przestepny): + print("Rok", rok, "jest przestepny") + else: + print("Rok", rok, "nie jest przestepny") +def Glowna_procedura(): + rok = Czytaj_rok() + Wypisz_czy_przestepny(rok,Czy_przestepny(rok)) + +Glowna_procedura() diff --git a/Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.py b/Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.py new file mode 100644 index 0000000..d3e4f6b --- /dev/null +++ b/Algorytmy i struktury danych/Python/AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.py @@ -0,0 +1,16 @@ +from math import trunc +def Czytaj_liczbe(): + return int(input("Podaj liczbe: ")) +def Suma_cyfr(liczba): + suma=0 + liczba=abs(liczba) + while(liczba>0): + suma=suma+(liczba%10) + liczba=int(trunc(liczba/10)) + return suma +def Wypisz_wynik(liczba,suma): + print("Suma cyfr liczby",liczba,"to",suma) +def Glowna_procedura(): + liczba=Czytaj_liczbe() + Wypisz_wynik(liczba,Suma_cyfr(liczba)) +Glowna_procedura() diff --git a/Algorytmy i struktury danych/Python/AiSD5_C3/zad3_silnia_czas.py b/Algorytmy i struktury danych/Python/AiSD5_C3/zad3_silnia_czas.py new file mode 100644 index 0000000..5a4cbb7 --- /dev/null +++ b/Algorytmy i struktury danych/Python/AiSD5_C3/zad3_silnia_czas.py @@ -0,0 +1,40 @@ +from datetime import datetime +def Czytaj_liczbe(): + return int(input("Podaj liczbe calkowita: ")) +def Silnia_rekurencyjna(n): + if(n==0): + return 1 + else: + return n * Silnia_rekurencyjna(n-1); +def Silnia_iteracyjna(n): + wynik = 1 + for i in range(1,n+1): + wynik = wynik*i + return wynik +def Wypisz_wynikli(liczba,ile,wynikRek,wynikIter,CzasI,CzasR): + print("Podana liczba:", liczba); + print("Podana liczba iteracji", ile); + print("Czas silni rekurencyjnej:", CzasR, 'sekund'); + print("Silnia rekurencyjna:", wynikRek); + print("Czas silni iteracyjnej:", CzasI, 'sekund'); + print("Silnia iteracyjna:", wynikIter); +def Glowna_procedura(): + wynikR = 0 + wynikI = 0 + liczba = Czytaj_liczbe() + ile = int(input("Podaj liczbe iteracji: ")) + CzasI = datetime.today() + for i in range(0,ile+1): + wynikI = Silnia_iteracyjna(liczba) + CzasI = datetime.today() - CzasI + CzasI = CzasI.seconds+CzasI.microseconds*0.000001 + + CzasR = datetime.today() + for i in range(0,ile+1): + wynikR = Silnia_rekurencyjna(liczba) + CzasR = datetime.today() - CzasR + CzasR = CzasR.seconds+CzasR.microseconds*0.000001 + + Wypisz_wynikli(liczba,ile,wynikR,wynikI,CzasI,CzasR) + +Glowna_procedura() diff --git a/Algorytmy i struktury danych/README.md b/Algorytmy i struktury danych/README.md new file mode 100644 index 0000000..8cdf994 --- /dev/null +++ b/Algorytmy i struktury danych/README.md @@ -0,0 +1,75 @@ +--- +author: Mateusz Słodkowicz +lang: pl +title: Algorytmy i Struktury Danych +--- + +Zadania/Ćwiczenia z przedmiotu Algorytmy i Struktury Danych. + +# Ćwiczenie 2 - Zadanie 1 + +Program na rozwiązywanie równania kwadratowego. + +**Wymagania na program**: + +1. Aplikacja konsolowa (prosty program) +2. Na wejściu programu należy podać wartości a,b,c +3. Na wyjściu program wypisuje komunikaty, opisane algorytmem + +[Pascal](./Pascal/AiSD5_C2%20Ćwiczenie%202/zad1_rownanie_kwadratowe.pas) +[Python](./Python/AiSD5_C2%20Ćwiczenie%202/zad1_rownanie_kwadratowe.py) + +# Ćwiczenie 2 - Zadanie 2 + +**Definicja** +Rok przestępny to taki, który spełnia następujące warunki: + +- jest podzielny przez 4 i niepodzielny przez 100 + +lub + +- jest podzielny przez 400 + +**Wymagania na program**: + +1. Aplikacja konsolowa (prosty program) +2. Na wejściu programu należy podać liczbę określającą numer roku +3. Na wyjściu program wypisuje komunikat, czy podany rok jest + przestępny. +4. Podziel program na cztery części: + 1. Funkcja typu całkowitego czytająca numer roku podany przez + użytkownika i zwracająca odczytaną liczbę + 2. Funkcja typu logicznego, której argumentem jest liczba całkowita + sprawdzająca, czy rok jest przestępny + 3. Procedura, której argumentami są: numer roku i wartość logiczna, + wypisująca na konsoli, czy rok jest przestępny + 4. Procedura zawierająca w sobie wywołania pozostałych funkcji i + procedur, która jest wywoływana z programu głównego. + +[Pascal](./Pascal/AiSD5_C2%20Ćwiczenie%202/zad2_rok_przestepny.pas) +[Python](./Python/AiSD5_C2%20Ćwiczenie%202/zad2_rok_przestepny.py) + +# Ćwiczenie 2 - Zadanie 3 + +Obliczanie sumy cyfr + +**Wymagania na algorytm**: + +1. Algorytm iteracyjny (nie rekurencyjny) + +**Wymagania na program**: + +1. Aplikacja konsolowa (prosty program) +2. Na wejściu programu należy podać liczbę całkowitą. +3. Na wyjściu program wypisuje wynik obliczeń. +4. Podziel program na cztery części: + 1. Funkcja typu całkowitego czytająca liczbę całkowitą + 2. Funkcja typu całkowitego, której argumentem jest liczba + całkowita, a wynikiem suma cyfr tej liczby + 3. Procedura wypisująca wynik obliczeń, której argumentami są: + liczba całkowita i suma cyfr tej liczby + 4. Procedura zawierająca w sobie wywołania pozostałych funkcji i + procedur, która jest wywoływana z programu głównego. + +[Pascal](./Pascal/AiSD5_C2%20Ćwiczenie%202/zad3_suma_cyfr.pas) +[Python](./Python/AiSD5_C2%20Ćwiczenie%202/zad3_suma_cyfr.py) diff --git a/Podstawy Programowania I/.gitignore b/Podstawy Programowania I/.gitignore new file mode 100644 index 0000000..5422c4c --- /dev/null +++ b/Podstawy Programowania I/.gitignore @@ -0,0 +1,8 @@ +* + +!.gitignore +!**/ +!*.cpp +!*.md +.#*.cpp +.#*.md \ No newline at end of file diff --git a/Podstawy Programowania I/Projekt1/main.cpp b/Podstawy Programowania I/Projekt1/main.cpp new file mode 100644 index 0000000..1c159b5 --- /dev/null +++ b/Podstawy Programowania I/Projekt1/main.cpp @@ -0,0 +1,214 @@ +/* + Autor: Mateusz Słodkowicz + Grupa: D3 + Numer Indeksu: 167675 + + Opis: Gra w Papier, Kamień, Nożyce. + Program zapyta do ilu wygranych chcesz zagrać. + Remis nie liczy się jako wygrana bądź przegrana. + Gra trwa do uzyskania przez kogoś wyniku podanego na początku, po zakończeniu gra wypisze kto wygrał "mecz" + oraz umożliwia rozpoczęcię kolejnego "meczu". + Aby zakończyć program należy przy wyborze "do ilu" podać zero. + + Plik źródłowy powinien być zapisany z kodowaniem UTF-8. +*/ + +#include +#include +#include +#include + +#ifdef _WIN32 // Dodatkowe nagłówki dla windows'a +#include +#include +// Nieco jaśniejszy niż domyślny biały +#define DEFAULT_COLOR (FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY) +#endif + +void wypiszCzerwony(std::string tekst) +{ +#ifdef _WIN32 + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); // "Uchwyt" wyjścia konsoli + std::cout << std::flush; // Flush aby przypadkiem program nie zmienił koloru poprzedniego tekstu + SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY); // Ustawienie czerwonego koloru + std::cout << tekst << std::flush; // Flush aby program na pewno wypisał tekst przed ustawienie domyślnego koloru + + SetConsoleTextAttribute(hConsole, DEFAULT_COLOR); + +#else + std::cout << "\033[31m" << tekst << "\033[0m"; +#endif +} +void wypiszZielony(std::string tekst) +{ +#ifdef _WIN32 + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + std::cout << std::flush; + SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY); + std::cout << tekst << std::flush; + SetConsoleTextAttribute(hConsole, DEFAULT_COLOR); +#else + std::cout << "\033[32m" << tekst << "\033[0m"; +#endif +} + +void czyscEkran() +{ +#ifdef _WIN32 + system("cls"); // Wywołanie "cls" dla wyczyczenia ekranu konsoli na windowsie +#else + std::cout << "\033[2J\033[1;1H"; // Sekwencja czyszczenia dla terminala ANSI +#endif +} + +int main() +{ +#ifdef _WIN32 + SetConsoleOutputCP(CP_UTF8); // Ustawienie kodowania UTF-8 dla wyjścia konsoli, pozwala wyświetlić polskie znaki. + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + SetConsoleTextAttribute(hConsole, DEFAULT_COLOR); +#endif + // Generator liczb + auto seed = std::chrono::system_clock::now().time_since_epoch().count(); // większa dokładność czasu niż time(0) + std::mt19937 rng(seed); // Generator licz losowych + std::uniform_int_distribution dist('1', '3'); // Zakres liczb (znaków) losowych + // Zmienne + unsigned int wybor = 0; + unsigned int wygraneGracza = 0; + unsigned int wygraneKomputera = 0; + unsigned char ostatniaRunda = 0; + unsigned char ostatniMecz = 0; + + char gracz = 0, komputer = 0; + + // Główna pętla gry + while (true) + { + czyscEkran(); + // Wypisanie wyniku ostatniego meczu + if (ostatniMecz != 0) + std::cout << "Ostatni mecz: "; + if (ostatniMecz == 1) + wypiszZielony("Wygrana gracza\n"); + else if (ostatniMecz == 2) + wypiszCzerwony("Wygrana komputera\n"); + + // Reset zmiennych + wygraneKomputera = 0; + wygraneGracza = 0; + + ostatniaRunda = 0; + ostatniMecz = 0; + + wybor = 0; + // Wybór do ilu wygranych + std::cout << "Do ilu wygranych chcesz zagrać?\n" + "Wprowadź 0 aby wyjść z programu\n" + "Ile: "; + + while (!(std::cin >> wybor)) + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + + wypiszCzerwony("Błąd, wprowadź jeszcze raz.\n"); + std::cout << "Ile: "; + } + if (!wybor) + break; + + // Pętla do czasu wygranej gracza lub komputera + while (wygraneGracza != wybor && wygraneKomputera != wybor) + { + czyscEkran(); + gracz = 0; + komputer = dist(rng); + // Wypisanie wyniku ostatniej rundy + if (ostatniaRunda != 0) + std::cout << "Ostatnia runda: "; + if (ostatniaRunda == 1) + wypiszZielony("Wygrana gracza\n"); + else if (ostatniaRunda == 2) + wypiszCzerwony("Wygrana komputera\n"); + else if (ostatniaRunda == 3) + std::cout << "Remis\n"; + + // Wypisanie danych aktualnego meczu + std::cout << "Gra do: " << wybor << "\n\n" + << "GRACZ "; + wypiszZielony(std::to_string(wygraneGracza)); + std::cout << " - "; + wypiszCzerwony(std::to_string(wygraneKomputera)); + std::cout << " KOMPUTER\n\n"; + + // Menu wyboru + std::cout << "1. Papier\n" + "2. Kamień\n" + "3. Nożyce\n"; + + while (gracz < '1' || gracz > '3') + { + std::cout << "Wybór: "; + while (!(std::cin >> gracz)) + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + } + std::cin.ignore(std::numeric_limits::max(), '\n'); + } + // Remis + if (gracz == komputer) + ostatniaRunda = 3; + // Switch z wyborem gracza, porównanie do komputera + else + switch (gracz) + { + case '1': // Gracz wybrał papier + if (komputer == '2') // Komputer wybrał kamień + { + ++wygraneGracza; + ostatniaRunda = 1; + } + else if (komputer == '3') // Komputer wybrał nożyce + { + ++wygraneKomputera; + ostatniaRunda = 2; + } + break; + case '2': // Gracz wybrał kamień + if (komputer == '3') // Komputer wybrał nożyce + { + ++wygraneGracza; + ostatniaRunda = 1; + } + else if (komputer == '1') // Komputer wybrał papier + { + ++wygraneKomputera; + ostatniaRunda = 2; + } + break; + case '3': // Gracz wybrał nożyce + if (komputer == '1') // Komputer wybrał papier + { + ++wygraneGracza; + ostatniaRunda = 1; + } + else if (komputer == '2') // Komputer wybrał kamień + { + ++wygraneKomputera; + ostatniaRunda = 2; + } + break; + } + } + // Ustawienie wyniku meczu + if (wygraneGracza == wybor) + ostatniMecz = 1; + else + ostatniMecz = 2; + }; + czyscEkran(); + std::cout << "Dziękujemy za grę!"; + + return 0; +} diff --git a/Podstawy Programowania I/README.md b/Podstawy Programowania I/README.md new file mode 100644 index 0000000..10a6fe2 --- /dev/null +++ b/Podstawy Programowania I/README.md @@ -0,0 +1,249 @@ +--- +author: Mateusz Słodkowicz +lang: pl +title: Podstawy Programowania I +--- + +Zadania/Ćwiczenia z przedmiotu Podstawy Programowania I + +# Zadania 1 + +## Zadanie 1 + +Napisz program, który zapyta użytkownika o liczbę chłopców i dziewcząt +zapisanych do klasy. +Program powinien wyświetlać wartość procentową chłopców i dziewcząt w +klasie. + +[C++](Zadanie%201.1/zadanie1.cpp) + +## Zadanie 2 + +Kino przechowuje tylko pewien procent przychodu ze sprzedaży biletów. +Reszta trafia do +dystrybutora. Napisz program obliczający dochód kina i zysk kasy +biletowej za dzień. + +Załóż, że kino zatrzymuje 20% zysku kasy biletowej + +Program powinien pytać ile zostało sprzedanych biletów dla dzieci i +dorosłych. (Cena biletu dla +dorosłych wynosi 10 zł, a dla dziecka 6 zł). Wyświetlony powinien zostać +komunikat podobny do +poniższego: + +``` example +Sprzedane bilety dla dorosłych: + +Sprzedane bilety dla dzieci: + +Zysk kasy brutto: + +Zysk kasy netto: + +Kwota zapłacona dystrybutorowi: +``` + +[C++](./Zadanie%201.1/zadanie2.cpp) + +## Zadanie 3 + +Zadeklarować trzy zmienne typu całkowitego. Wczytać dane. Obliczyć sumę +tych liczb, ich średnią +arytmetyczną i średnią harmoniczną. Wyświetlić wyniki. + +[C++](./Zadanie%201.1/zadanie3.cpp) + +## Zadanie 4 + +Rowerzysta pokonuje drogę o długości d w trzech etapach. Przez d +oznaczono całą długość drogi +przebytej przez rowerzystę. Przebyta droga i średnia prędkość w +kolejnych etapach: + +``` example +etap I 0,2 d 10 m/s + +etap II 0,5 d 5 m/s + +etap III 0,3 d 10 m/s +``` + +Należy napisać program obliczający całkowity czas jazdy rowerzysty. +Wyniki przeliczyć na godziny, +minuty, sekundy. +Wczytać długość drogi d, wyświetlić wyniki. + +[C++](./Zadanie%201.1/zadanie4.cpp) + +# Zadania 2 + +Uwagi: + +- Wszystkie zadania powinny być w jednym programie, kolejne zadania + oddzielone liniami komentarza. +- Program powinien czytelne wczytywanie danych i czytelne wypisywanie + wyników. +- W obliczeniach nie należy korzystać z funkcji pow() +- Stała pi – MPI należy dołączyć bibliotekę matematyczną + \#include \ + +[C++](./Zadanie%201.2/zadanie.cpp) + +## Zadanie 1 + +Wczytać dwie liczby typu całkowitego (x, y) i wypisać, która liczba jest +większa a może są takie same. +Sprawdzić czy x jest liczbą nieparzystą. Wypisać odpowiedni komunikat. +Nie wykonywać działań, kiedy pierwsza wczytana liczba będzie zerem. + +## Zadanie 2 + +Obliczyć wartość funkcji określonej wzorem: + +$$ +\large y(x) = \begin{cases} + \frac{3}{4} \cdot x^{3} \cdot \frac{7}{8} x & \text{dla x ∈ <-10, 0>} \\\\ + \frac{1}{sin(x) + 3} & \text{dla x ∈ (0, 4>} \\\\ + -2x/3 & \text{dla pozostałych} +\end{cases} +$$ + +Dane: x – typu rzeczywistego + +## Zadanie 3 + +Napisać program pozwalający obliczyć + +1. Objętość kuli (dane: R – promień kuli) +2. Objętość walca (dane: promień podstawy walca, h – wysokość walca) +3. Objętość stożka (dane: R – promień podstawy stożka, h – wysokość + stożka) + +W programie należy użyć struktury wielokrotnego wyboru switch. +Obliczoną wartość wypisać na ekranie. + +## Zadanie 4 + +Firma kurierska pobiera opłaty zgodnie z poniższym cennikiem: + +| Waga paczki | Opłata za każde 100 km (zł) | +|------------------------------------------|-----------------------------| +| 2 kg lub mniej | 5,30 | +| Powyżej 2 kg, lecz nie więcej niż 6 kg | 6,20 | +| Powyżej 6 kg, lecz nie więcej niż 10 kg | 7,70 | +| Powyżej 10 kg, lecz nie więcej niż 20 kg | 10,80 | + +Napisz program, który prosi o wpisanie wagi paczki i odległości, jaką +musi przebyć przesyłka, a następnie wyświetli cenę. +Weryfikacja poprawności wprowadzanych danych: program nie powinien +przyjmować wagi paczki mniejszej lub równej 0 kg ani powyżej 20 kg (to +największa waga paczki, jaką może przyjąć firma). + +# Zadania 3 + +Uwagi: + +- Wszystkie punkty powinny być realizowane w jednym programie. +- W programie należy użyć pętli for, while, do while. Nie powinno być w + programie pętli nieskończonych. Nie + należy używać tablic. Nie używać funkcji pow +- Czytelność komunikatów. Komunikaty powinny być krótkie, ale tak + sformułowane, żeby nie było + wątpliwości, które zadanie jest wykonywane. + +[C++](./Zadanie%201.3/zadanie.cpp) + +## Zadanie 1 + +Funkcja, który wyświetli tabliczkę mnożenia liczb od 1 do n w +następującej postaci + +| | 1 | 2 | 3 | +|-----|-----|-----|-----| +| 1 | 1 | 2 | 3 | +| 2 | 2 | 4 | 6 | +| 3 | 3 | 6 | 9 | + +n – należy wczytać, n \<1, 10\>. +W tym przypadku n = 3. + +## Zadanie 2 + +Funkcja, która oblicza i zwraca średnią kilku liczb całkowitych przy +założeniu, że ostatnia wczytana wartość +jest znacznikiem 0. Przykładowa seria wejściowa może być + +``` example +10 8 11 7 9 0 +``` + +wskazując, że ma być wyliczona średnia wartości poprzedzających 0. + +## Zadanie 3 + +Funkcja, który oblicza i zwraca sumę S określoną wzorem: + +$$ +\large {S = \sum^{m}_{k=0}} \frac{1+j}{2j^3 + 3} +$$ + +Dane: m + +## Zadanie 4 + +Ten punkt powinien działać w pętli, bez funkcji +Napisz program obliczający obłożenie hotelu. Program powinien +wystartować, pytając użytkownika o +nazwę hotelu i liczbę pięter w hotelu. Pętla powinna iterować raz na +każde piętro. W każdej iteracji pętla +powinna zapytać użytkownika o liczbę pokoi na piętrze i liczbę pokoi +zajętych. +Po wszystkich iteracjach program powinien wyświetlić, ile pokoi ma +hotel, ile z nich jest zajętych, a ile wolnych oraz procent, jaki +stanowią zajęte pokoje. +UWAGA. Zdarza się, że w część hoteli nie ma trzynastego piętra (może to +być inny numer piętra). +Pętla w tym programie powinna pomijać iteracje na tym piętrze. +Weryfikacja poprawności wprowadzanych danych: Nie akceptuj liczby +mniejszej niż 1 dla liczby pięter. +Nie akceptuj liczby mniejszej niż 5 dla liczby pokoi na piętrze. + +# Projekt 1 + +Napisz program, który pozwala użytkownikowi zagrać z komputerem w grę +kamień, papier, nożyce. +Użytkownik powinien mieć możliwość rozegrania kilku rund. +Program powinien działać następująco: + +1. Kiedy program zostaje uruchomiony, generowana jest liczba losowa od + 1 do 3. Jeśli tą liczbą + jest 1, to oznacza, że komputer wybrał kamień. Jeśli tą liczbą jest + 2, to komputer wybrał + papier. Jeśli tą liczbą jest 3,to komputer wybrał nożyce (nie + wyświetlaj jeszcze wyboru + komputera). +2. Użytkownik wprowadza swój wybór: „kamień”, „papier” albo „nożyce” na + klawiaturze. +3. Wyświetlany jest wybór komputera. +4. Zwycięzca jest wybierany na podstawie następujących zasad: + - Jeśli jeden gracz wybierze kamień, a drugi nożyce, to wygrywa + kamień + (kamień tępi nożyce). + - Jeśli jeden gracz wybierze nożyce, a drugi papier, to wygrywają + nożyce + (nożyce przecinają papier). + - Jeśli jeden gracz wybierze papier, a drugi kamień, to wygrywa + papier + (papier owija kamień). + - Jeśli obaj gracze wybiorą ten sam ruch, to rozgrywka musi zostać + powtórzona, aby + wyłonić zwycięzcę. + +Program powinien być napisany z wykorzystaniem poznanych instrukcji +języka. +Program można rozbudować, dodając nowe opcje lub dokonać innych zmian. +Należy wtedy dołączyć +krótki opis programu. + +[C++](./Projekt1/main.cpp) diff --git a/Podstawy Programowania I/Zadanie 1.1/zadanie1.cpp b/Podstawy Programowania I/Zadanie 1.1/zadanie1.cpp new file mode 100644 index 0000000..a4798a5 --- /dev/null +++ b/Podstawy Programowania I/Zadanie 1.1/zadanie1.cpp @@ -0,0 +1,34 @@ +/* + Autor: Mateusz Slodkowicz + Grupa: D3 + Numer Indeksu: 167675 + + Opis: Program wczyta liczbe dziewczat i chlopcow w klasie a nastepnie + wypisze ich wartosc procentowa w klasie. + +*/ + +#include + + + +int main() +{ + unsigned int dziewczyny = 0; + unsigned int chlopcy = 0; + + std::cout << "Podaj liczbe dziewczat: "; + std::cin >> dziewczyny; + std::cout << "Podaj liczbe chlopcow: "; + std::cin >> chlopcy; + + unsigned int razem = dziewczyny+chlopcy; + if(razem>0) + { + std::cout << "\nProcent chlopcow: " << (100*((float)chlopcy/razem)) << "%"; + std::cout << "\nProcent dziewczat: " << (100*((float)dziewczyny/razem)) << "%" << std::endl; + } + else + std::cout << "Brak osob w klasie" << std::endl; + return 0; +} diff --git a/Podstawy Programowania I/Zadanie 1.1/zadanie2.cpp b/Podstawy Programowania I/Zadanie 1.1/zadanie2.cpp new file mode 100644 index 0000000..00b8353 --- /dev/null +++ b/Podstawy Programowania I/Zadanie 1.1/zadanie2.cpp @@ -0,0 +1,41 @@ +/* + Autor: Mateusz Slodkowicz + Grupa: D3 + Numer Indeksu: 167675 + + Opis: Program wczyta liczbe biletow dla dzieci i doroslych a nastepnie + wypisze wyniki sprzedazy. +*/ +#include +#include + +using namespace std; + +int main() +{ + unsigned int dzieci = 0; + unsigned int dorosli = 0; + + const float dlaKina=0.20; + + std::cout << "Podaj liczbe biletow dzieci: "; + std::cin >> dzieci; + std::cout << "Podaj liczbe biletow doroslych: "; + std::cin >> dorosli; + + + float brutto = (dzieci*6.0) + (dorosli*10.0); + float netto = (brutto*dlaKina); + float dystrybutor = brutto - netto; + + //Ustawienie 2 miejsc po przecinku + std::cout << std::fixed; + std::cout << std::setprecision(2); + + std::cout << "\nSprzedane bilety dla doroslych: " << dorosli << "\n"; + std::cout << "Sprzedane bilety dla dzieci: " << dzieci << "\n"; + std::cout << "Zysk kasy brutto: " << brutto << "zl\n"; + std::cout << "Zysk kasy netto: " << netto << "zl\n"; + std::cout << "Kwota zaplacona dystrybutorowi: " << dystrybutor << "zl" << std::endl; + return 0; +} diff --git a/Podstawy Programowania I/Zadanie 1.1/zadanie3.cpp b/Podstawy Programowania I/Zadanie 1.1/zadanie3.cpp new file mode 100644 index 0000000..42ef059 --- /dev/null +++ b/Podstawy Programowania I/Zadanie 1.1/zadanie3.cpp @@ -0,0 +1,27 @@ +/* + Autor: Mateusz Slodkowicz + Grupa: D3 + Numer Indeksu: 167675 + + Opis: Program wczyta 3 zmienne i wypisze sume, srednia i srednia harmoniczna. +*/ +#include + +int main() +{ + int a = 0; + int b = 0; + int c = 0; + + std::cout << "Podaj pierwsza wartosc: "; + std::cin >> a; + std::cout << "Podaj druga wartosc: "; + std::cin >> b; + std::cout << "Podaj trzecia wartosc: "; + std::cin >> c; + + std::cout << "\nSuma: " << a+b+c << "\n"; + std::cout << "Srednia arytmetyczna: " << (float)(a+b+c)/3.0f << "\n"; + std::cout << "Srednia harmoniczna: " << 3.0/(1.0/a + 1.0/b +1.0/c) << "\n"; + return 0; +} diff --git a/Podstawy Programowania I/Zadanie 1.1/zadanie4.cpp b/Podstawy Programowania I/Zadanie 1.1/zadanie4.cpp new file mode 100644 index 0000000..ea4453d --- /dev/null +++ b/Podstawy Programowania I/Zadanie 1.1/zadanie4.cpp @@ -0,0 +1,28 @@ +/* + Autor: Mateusz Slodkowicz + Grupa: D3 + Numer Indeksu: 167675 + + Opis: Program wczyta dlugosc trasy rowerzysty w metrach oraz + wypisze w jakim czasie przebyl odcinek trasy na danym etapie. +*/ + +#include + +int main() +{ + float d = 0; + std::cout << "Podaj odleglosc trasy w metrach: "; + std::cin >> d; + + float czas = ((d * 0.2f) / 10) + ((d * 0.5f) / 5) +((d * 0.3f) / 10); + int godziny = czas/3600; + int minuty = (czas - godziny*3600)/60; + int sekundy = (czas - godziny*3600 - minuty*60); + std::cout << "Trasa przejechana w:\n"; + std::cout << godziny <<" godz. " + << minuty <<" min. " + << sekundy << " sek." < +#include +#include + +// =========== +// ZADANIE 1 +// =========== +void zadanie1() +{ + std::cout << "Zadanie 1" << std::endl; + + int x = 0; + int y = 0; + + std::cout << "Podaj x: "; + std::cin >> x; + if (x == 0) + { + std::cout << "x jest rowne 0, nie mozna wykonac obliczen" << std::endl; + return; + } + std::cout << "Podaj y: "; + std::cin >> y; + + if (x > y) + std::cout << "x jest wieksze od y\n"; + else if (x == y) + std::cout << "x jest rowne y\n"; + else + std::cout << "x yest mniejsze od y\n"; + + std::cout << ((x % 2) ? "x jest nieparzyste" : "x jest parzyste") << std::endl; +} + +// =========== +// ZADANIE 2 +// =========== +void zadanie2() +{ + std::cout << "\nZadanie 2" << std::endl; + + double x = 0; + double y = 0; + + std::cout << "Podaj x: "; + std::cin >> x; + + if (x >= -10.0 && x <= 0.0) + y = (3.0 / 4.0) * (x * x * x) + (7.0 / 8.0) * x; + else if (x > 0.0 && x <= 4.0) + y = 1.0 / (sin(x) + 3.0); + else + y = (-2.0 * x) / 3.0; + + std::cout << "y = " << y << std::endl; +} + +// =========== +// ZADANIE 3 +// =========== +void zadanie3() +{ + std::cout << "\nZadanie 3" << std::endl; + + unsigned short wybor = 0; + double R = 0; + double h = 0; + + std::cout << "Co chcesz obliczyc?\n" + "1. Objetosc kuli\n" + "2. Objetosc walca\n" + "3. Objetosc stozka\n"; + + while (!(wybor >= 1 && wybor <= 3)) // Zapetlenie az nie zostanie wybrana odpowiedz z zakresu 1-3 + { + std::cout << "Twoj wybor: "; + std::cin >> wybor; + } + + switch (wybor) + { + case 1: + + std::cout << "Podaj promien kuli: "; + std::cin >> R; + if (R <= 0) + std::cout << "Promien musi byc wiekszy od zera!" << std::endl; + else + std::cout << "Objetosc kuli wynosi: " << ((4.0 / 3.0) * M_PI * R * R * R) << std::endl; + break; + case 2: + + std::cout << "Podaj promien podstawy walca: "; + std::cin >> R; + if (R <= 0) + { + std::cout << "Promien musi byc wiekszy od zera!" << std::endl; + break; + } + + std::cout << "Podaj wysokosc walca: "; + std::cin >> h; + if (h <= 0) + { + std::cout << "Wysokosc musi byc wieksza od zera!" << std::endl; + break; + } + + std::cout << "Objetosc walca: " << (M_PI * R * R * h) << std::endl; + break; + case 3: + + std::cout << "Podaj promien podstawy stozka: "; + std::cin >> R; + if (R <= 0) + { + std::cout << "Promien musi byc wiekszy od zera!" << std::endl; + break; + } + + std::cout << "Podaj wysokosc stozka: "; + std::cin >> h; + if (h <= 0) + { + std::cout << "Wysokosc musi byc wieksza od zera!" << std::endl; + break; + } + + std::cout << "Objetosc stozka: " << ((1.0 / 3.0) * M_PI * R * R * h) << std::endl; + break; + default: + break; + } +} + +// =========== +// ZADANIE 4 +// =========== +void zadanie4() +{ + std::cout << "\nZadanie 4" << std::endl; + + double waga = 0; + double odleglosc = 0; + + std::cout << "Podaj odleglosc w kilometrach: "; + std::cin >> odleglosc; + if (odleglosc <= 0) + { + // Nie ma podanej minimalnej odleglosci wiec zakladam ze musi byc jedynie wieksza od zera + std::cout << "Odleglosc musi byc wieksza od zera!" << std::endl; + return; + } + const int ILE = (ceil(odleglosc / 100.0)); // Zwiekszenie mnoznika co 100 km + + std::cout << "Podaj wage paczki w kilogramach w zakresie 0-20: "; + std::cin >> waga; + + std::cout << std::fixed << std::setprecision(2); + if (waga > 20.0 || waga <= 0) + { + std::cout << "Waga z poza zakresu!" << std::endl; + return; + } + else if (waga <= 2.0) + std::cout << "Cena: " << (5.30) * ILE << "zl" << std::endl; + else if (waga <= 6.0) + std::cout << "Cena: " << (6.20) * ILE << "zl" << std::endl; + else if (waga <= 10.0) + std::cout << "Cena: " << (7.70) * ILE << "zl" << std::endl; + else if (waga <= 20.0) + std::cout << "Cena: " << (10.80) * ILE << "zl" << std::endl; +} + +// ====== +// MAIN +// ====== +int main() +{ + zadanie1(); + zadanie2(); + zadanie3(); + zadanie4(); + return 0; +} diff --git a/Podstawy Programowania I/Zadanie 1.3/zadanie.cpp b/Podstawy Programowania I/Zadanie 1.3/zadanie.cpp new file mode 100644 index 0000000..3c7fe04 --- /dev/null +++ b/Podstawy Programowania I/Zadanie 1.3/zadanie.cpp @@ -0,0 +1,186 @@ +/* + Autor: Mateusz Słodkowicz + Grupa: D3 + Numer Indeksu: 167675 + +*/ + +#include +#include + +void wypisz_tabliczke(const unsigned int); +double srednia(const int, const unsigned int); +double suma(const int); + +// ========= +// MAIN +// ========= + +int main() +{ + // Zadania w main'ie podzieliłem na mniejsze scopy aby mieć możliwość zwijania w edytorze. + + // Zadanie 1 + { + unsigned int n = 0; + std::cout << "Zadanie 1\n"; + while (n < 1 || n > 10) + { + std::cout << "Podaj wielkosc tabliczki: "; + std::cin >> n; + } + wypisz_tabliczke(n); + } + + // Zadanie 2 + // W zadaniu nie widzę żeby było określone czy wczytywanie wartości ma być w funkcji czy w main'ie więc założyłem że + // w mainie, funkcja jedynie wylicza średnią + { + std::cout << "\nZadanie 2\n" + "Podawaj liczby do wyliczenia sredniej, podaj 0 by zakonczyc (0 nie zostatnie uwzglednione przy " + "obliczeniach)\n"; + int suma = 0; + unsigned int ile = 0; + int last = 0; + do + { + std::cout << "Podaj liczbe: "; + std::cin >> last; + if (last) + { + ++ile; + suma += last; + } + + } while (last); + std::cout << "Srednia: " << srednia(suma, ile) << "\n"; + } + + // Zadanie 3 + { + std::cout << "\nZadanie 3\n"; + int m = -1; + while (m < 0) + { + std::cout << "Podaj m wieksze lub rowne 0: "; + std::cin >> m; + } + std::cout << "Suma: " << suma(m) << "\n"; + } + + // Zadanie 4 + // Piętra zaczynam liczyć od parteru więc w przypadku podania jednego piętra będzie to jedynie parter (piętro 0). + // + // Zakładam że w przypadku "pominięcia" piętra powinno być dodane kolejne aby w przypadku podania na przykład 14 + // pięter było ich faktycznie parter + 13 pięter mimo braku piętra 13 (zamiast piętra 13 będzie piętro 14). + // + // Używam string dla nazwy hotelu, w uwagach + // jest informacja aby nie używać tablic jednak zakładam że w tym wypadku string jest dopuszczalny. + { + std::cout << "\nZadanie 4\n"; + std::string nazwa; + unsigned int pietra = 0; + unsigned int aktualne_pietro = 0; + + unsigned int liczba_pokoi = 0, liczba_zajetych = 0; + + std::cout << "Podaj nazwe hotelu: "; + std::cin >> nazwa; + while (pietra < 1) + { + std::cout << "Podaj ilosc pieter: "; + std::cin >> pietra; + } + std::cout << "Liczba pokoi na pietro powinna byc nie mniejsza niz 5\n" + "Liczba zajetych nie moze byc wieksza niz liczba pokoi na pietrze\n"; + while (pietra > 0) + { + if (aktualne_pietro == 13) // Pominięcie "pechowego" piętra + { + aktualne_pietro++; + continue; + } + + unsigned int akt_pok = 0, akt_zaj = 0; + while (akt_pok < 5) + { + if (!aktualne_pietro) + std::cout << "Podaj liczbe pokoi na parterze: "; + else + std::cout << "Podaj liczbe pokoi na pietrze " << aktualne_pietro << ": "; + std::cin >> akt_pok; + } + + do + { + std::cout << "Podaj liczbe zajetych pokoi (calkowita ilosc pokoi " << akt_pok << "): "; + std::cin >> akt_zaj; + } while (akt_zaj > akt_pok); + liczba_pokoi += akt_pok; + liczba_zajetych += akt_zaj; + pietra--; + aktualne_pietro++; + } + std::cout << "\nNAZWA HOTELU: " << nazwa << "\nILOSC POKOI: " << liczba_pokoi + << "\nILOSC WOLNYCH POKOI: " << liczba_pokoi - liczba_zajetych + << "\nILOSC ZAJETYCH POKOI: " << liczba_zajetych + << "\nPROCENT ZAJETYCH: " << (double(liczba_zajetych) / double(liczba_pokoi)) * 100.0 << "%" + << std::endl; + } + + return 0; +} + +// ========= +// FUNKCJE +// ========= + +void wypisz_tabliczke(const unsigned int wielkosc) +{ + // Nagłówek + std::cout << " |"; + + for (int i = 1; i <= wielkosc; ++i) + { + std::printf("%4i", i); // Używam printf zamiast cout z uwagi na łatwiejsze/bardziej czytelne formatowanie + // Formatowanie na 4 znaki jako że max wielkość to 10 + } + + std::cout << "\n----+"; + for (int i = 1; i <= wielkosc; ++i) + { + std::cout << "----"; // 4 myślniki na liczbę dla zgodności z formatowaniem, może wyglądać niepoprawnie w + // przypadku używania czcionki o różnej szerokości znaków. + } + + // Właściwa tabela + for (int i = 1; i <= wielkosc; ++i) + { + std::printf("\n%-4i|", i); + + for (int j = 1; j <= wielkosc; ++j) + { + std::printf("%4i", i * j); + } + } + + std::cout << std::endl; +} + +double srednia(const int suma, const unsigned int ile) +{ + if (!ile) + return 0; + else + return double(suma) / double(ile); +} + +double suma(const int m) +{ + double S = 0; + for (int j = 0; j <= m; ++j) + { + S += (1.0 + j) / (2 * (j * j * j) + 3); + } + return S; +} diff --git a/README.org b/README.org new file mode 100644 index 0000000..ed6e333 --- /dev/null +++ b/README.org @@ -0,0 +1,12 @@ +#+TITLE: AHE - Ćwiczenia i inne +#+DESCRIPTION: Archiwum ćwiczeń i projektów +#+AUTHOR: Mateusz Słodkowicz +#+OPTIONS: \n:t +#+LANGUAGE: pl +Repozytorium na kod z ćwiczeń, projektów itd. z uczelni [[https://www.ahe.lodz.pl/][AHE]]. +W [[./org][org]] znajdują się pliki .org z których generowane są pliki README.md + +* Rok I +Algorytmy i struktury danych - [[./Algorytmy i struktury danych][Link]] + +Podstawy programowania I - [[./Podstawy Programowania I][Link]] diff --git a/org/.gitignore b/org/.gitignore new file mode 100644 index 0000000..a6d5b2d --- /dev/null +++ b/org/.gitignore @@ -0,0 +1 @@ +ltximg/ \ No newline at end of file diff --git a/org/AiSD.org b/org/AiSD.org new file mode 100644 index 0000000..8153493 --- /dev/null +++ b/org/AiSD.org @@ -0,0 +1,53 @@ +#+TITLE: Algorytmy i Struktury Danych +#+AUTHOR: Mateusz Słodkowicz +#+OPTIONS: \n:t +#+LANGUAGE: pl +#+EXPORT_FILE_NAME: ../Algorytmy i struktury danych/README.md +#+PANDOC_OPTIONS: lua-filter:fix.lua + +Zadania/Ćwiczenia z przedmiotu Algorytmy i Struktury Danych. +* Ćwiczenie 2 - Zadanie 1 +Program na rozwiązywanie równania kwadratowego. + +*Wymagania na program*: +1. Aplikacja konsolowa (prosty program) +2. Na wejściu programu należy podać wartości a,b,c +3. Na wyjściu program wypisuje komunikaty, opisane algorytmem + +[[./Pascal/AiSD5_C2 Ćwiczenie 2/zad1_rownanie_kwadratowe.pas][Pascal]] [[./Python/AiSD5_C2 Ćwiczenie 2/zad1_rownanie_kwadratowe.py][Python]] + +* Ćwiczenie 2 - Zadanie 2 +*Definicja* +Rok przestępny to taki, który spełnia następujące warunki: + - jest podzielny przez 4 i niepodzielny przez 100 +lub + - jest podzielny przez 400 +*Wymagania na program*: +1. Aplikacja konsolowa (prosty program) +2. Na wejściu programu należy podać liczbę określającą numer roku +3. Na wyjściu program wypisuje komunikat, czy podany rok jest przestępny. +4. Podziel program na cztery części: + 1) Funkcja typu całkowitego czytająca numer roku podany przez użytkownika i zwracająca odczytaną liczbę + 2) Funkcja typu logicznego, której argumentem jest liczba całkowita sprawdzająca, czy rok jest przestępny + 3) Procedura, której argumentami są: numer roku i wartość logiczna, wypisująca na konsoli, czy rok jest przestępny + 4) Procedura zawierająca w sobie wywołania pozostałych funkcji i procedur, która jest wywoływana z programu głównego. + +[[./Pascal/AiSD5_C2 Ćwiczenie 2/zad2_rok_przestepny.pas][Pascal]] [[./Python/AiSD5_C2 Ćwiczenie 2/zad2_rok_przestepny.py][Python]] + +* Ćwiczenie 2 - Zadanie 3 +Obliczanie sumy cyfr + +*Wymagania na algorytm*: +1. Algorytm iteracyjny (nie rekurencyjny) + +*Wymagania na program*: +1. Aplikacja konsolowa (prosty program) +2. Na wejściu programu należy podać liczbę całkowitą. +3. Na wyjściu program wypisuje wynik obliczeń. +4. Podziel program na cztery części: + 1) Funkcja typu całkowitego czytająca liczbę całkowitą + 2) Funkcja typu całkowitego, której argumentem jest liczba całkowita, a wynikiem suma cyfr tej liczby + 3) Procedura wypisująca wynik obliczeń, której argumentami są: liczba całkowita i suma cyfr tej liczby + 4) Procedura zawierająca w sobie wywołania pozostałych funkcji i procedur, która jest wywoływana z programu głównego. + +[[./Pascal/AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.pas][Pascal]] [[./Python/AiSD5_C2 Ćwiczenie 2/zad3_suma_cyfr.py][Python]] diff --git a/org/PP1.org b/org/PP1.org new file mode 100644 index 0000000..ba902f5 --- /dev/null +++ b/org/PP1.org @@ -0,0 +1,182 @@ +#+TITLE: Podstawy Programowania I +#+AUTHOR: Mateusz Słodkowicz +#+OPTIONS: \n:t +#+OPTIONS: tex:t +#+OPTIONS: toc:nil +#+LANGUAGE: pl +#+EXPORT_FILE_NAME: ../Podstawy Programowania I/README.md +#+PANDOC_OPTIONS: lua-filter:fix.lua +Zadania/Ćwiczenia z przedmiotu Podstawy Programowania I + +* Zadania 1 +** Zadanie 1 +Napisz program, który zapyta użytkownika o liczbę chłopców i dziewcząt zapisanych do klasy. +Program powinien wyświetlać wartość procentową chłopców i dziewcząt w klasie. + +[[file:Zadanie 1.1/zadanie1.cpp][C++]] +** Zadanie 2 +Kino przechowuje tylko pewien procent przychodu ze sprzedaży biletów. Reszta trafia do +dystrybutora. Napisz program obliczający dochód kina i zysk kasy biletowej za dzień. + +Załóż, że kino zatrzymuje 20% zysku kasy biletowej + +Program powinien pytać ile zostało sprzedanych biletów dla dzieci i dorosłych. (Cena biletu dla +dorosłych wynosi 10 zł, a dla dziecka 6 zł). Wyświetlony powinien zostać komunikat podobny do +poniższego: +#+begin_example +Sprzedane bilety dla dorosłych: + +Sprzedane bilety dla dzieci: + +Zysk kasy brutto: + +Zysk kasy netto: + +Kwota zapłacona dystrybutorowi: +#+end_example +[[./Zadanie 1.1/zadanie2.cpp][C++]] + +** Zadanie 3 +Zadeklarować trzy zmienne typu całkowitego. Wczytać dane. Obliczyć sumę tych liczb, ich średnią +arytmetyczną i średnią harmoniczną. Wyświetlić wyniki. + +[[./Zadanie 1.1/zadanie3.cpp][C++]] + +** Zadanie 4 +Rowerzysta pokonuje drogę o długości d w trzech etapach. Przez d oznaczono całą długość drogi +przebytej przez rowerzystę. Przebyta droga i średnia prędkość w kolejnych etapach: +#+begin_example +etap I 0,2 d 10 m/s + +etap II 0,5 d 5 m/s + +etap III 0,3 d 10 m/s +#+end_example + +Należy napisać program obliczający całkowity czas jazdy rowerzysty. Wyniki przeliczyć na godziny, +minuty, sekundy. +Wczytać długość drogi d, wyświetlić wyniki. + +[[./Zadanie 1.1/zadanie4.cpp][C++]] + +* Zadania 2 +Uwagi: + * Wszystkie zadania powinny być w jednym programie, kolejne zadania oddzielone liniami komentarza. + * Program powinien czytelne wczytywanie danych i czytelne wypisywanie wyników. + * W obliczeniach nie należy korzystać z funkcji pow() + * Stała pi – M_PI należy dołączyć bibliotekę matematyczną #include + +[[./Zadanie 1.2/zadanie.cpp][C++]] + +** Zadanie 1 +Wczytać dwie liczby typu całkowitego (x, y) i wypisać, która liczba jest większa a może są takie same. +Sprawdzić czy x jest liczbą nieparzystą. Wypisać odpowiedni komunikat. +Nie wykonywać działań, kiedy pierwsza wczytana liczba będzie zerem. +** Zadanie 2 +Obliczyć wartość funkcji określonej wzorem: + +$$ +\large y(x) = \begin{cases} + \frac{3}{4} \cdot x^{3} \cdot \frac{7}{8} x & \text{dla x ∈ <-10, 0>} \\\\ + \frac{1}{sin(x) + 3} & \text{dla x ∈ (0, 4>} \\\\ + -2x/3 & \text{dla pozostałych} +\end{cases} +$$ + +Dane: x – typu rzeczywistego +** Zadanie 3 +Napisać program pozwalający obliczyć +1. Objętość kuli (dane: R – promień kuli) +2. Objętość walca (dane: promień podstawy walca, h – wysokość walca) +3. Objętość stożka (dane: R – promień podstawy stożka, h – wysokość stożka) + +W programie należy użyć struktury wielokrotnego wyboru switch. +Obliczoną wartość wypisać na ekranie. +** Zadanie 4 +Firma kurierska pobiera opłaty zgodnie z poniższym cennikiem: + | Waga paczki | Opłata za każde 100 km (zł) | + |------------------------------------------+-----------------------------| + | 2 kg lub mniej | 5,30 | + | Powyżej 2 kg, lecz nie więcej niż 6 kg | 6,20 | + | Powyżej 6 kg, lecz nie więcej niż 10 kg | 7,70 | + | Powyżej 10 kg, lecz nie więcej niż 20 kg | 10,80 | + +Napisz program, który prosi o wpisanie wagi paczki i odległości, jaką musi przebyć przesyłka, a następnie wyświetli cenę. +Weryfikacja poprawności wprowadzanych danych: program nie powinien przyjmować wagi paczki mniejszej lub równej 0 kg ani powyżej 20 kg (to największa waga paczki, jaką może przyjąć firma). +* Zadania 3 +Uwagi: + * Wszystkie punkty powinny być realizowane w jednym programie. + * W programie należy użyć pętli for, while, do while. Nie powinno być w programie pętli nieskończonych. Nie + należy używać tablic. Nie używać funkcji pow + * Czytelność komunikatów. Komunikaty powinny być krótkie, ale tak sformułowane, żeby nie było + wątpliwości, które zadanie jest wykonywane. + +[[./Zadanie 1.3/zadanie.cpp][C++]] + +** Zadanie 1 +Funkcja, który wyświetli tabliczkę mnożenia liczb od 1 do n w następującej postaci + +| | 1 | 2 | 3 | +|---+---+---+---| +| 1 | 1 | 2 | 3 | +| 2 | 2 | 4 | 6 | +| 3 | 3 | 6 | 9 | + +n – należy wczytać, n <1, 10>. +W tym przypadku n = 3. + +** Zadanie 2 +Funkcja, która oblicza i zwraca średnią kilku liczb całkowitych przy założeniu, że ostatnia wczytana wartość +jest znacznikiem 0. Przykładowa seria wejściowa może być +#+BEGIN_EXAMPLE +10 8 11 7 9 0 +#+END_EXAMPLE +wskazując, że ma być wyliczona średnia wartości poprzedzających 0. + +** Zadanie 3 +Funkcja, który oblicza i zwraca sumę S określoną wzorem: + +$$ +\large {S = \sum^{m}_{k=0}} \frac{1+j}{2j^3 + 3} +$$ + +Dane: m +** Zadanie 4 +Ten punkt powinien działać w pętli, bez funkcji +Napisz program obliczający obłożenie hotelu. Program powinien wystartować, pytając użytkownika o +nazwę hotelu i liczbę pięter w hotelu. Pętla powinna iterować raz na każde piętro. W każdej iteracji pętla +powinna zapytać użytkownika o liczbę pokoi na piętrze i liczbę pokoi zajętych. +Po wszystkich iteracjach program powinien wyświetlić, ile pokoi ma hotel, ile z nich jest zajętych, a ile wolnych oraz procent, jaki +stanowią zajęte pokoje. +UWAGA. Zdarza się, że w część hoteli nie ma trzynastego piętra (może to być inny numer piętra). +Pętla w tym programie powinna pomijać iteracje na tym piętrze. +Weryfikacja poprawności wprowadzanych danych: Nie akceptuj liczby mniejszej niż 1 dla liczby pięter. +Nie akceptuj liczby mniejszej niż 5 dla liczby pokoi na piętrze. + +* Projekt 1 +Napisz program, który pozwala użytkownikowi zagrać z komputerem w grę kamień, papier, nożyce. +Użytkownik powinien mieć możliwość rozegrania kilku rund. +Program powinien działać następująco: + 1. Kiedy program zostaje uruchomiony, generowana jest liczba losowa od 1 do 3. Jeśli tą liczbą + jest 1, to oznacza, że komputer wybrał kamień. Jeśli tą liczbą jest 2, to komputer wybrał + papier. Jeśli tą liczbą jest 3,to komputer wybrał nożyce (nie wyświetlaj jeszcze wyboru + komputera). + 2. Użytkownik wprowadza swój wybór: „kamień”, „papier” albo „nożyce” na klawiaturze. + 3. Wyświetlany jest wybór komputera. + 4. Zwycięzca jest wybierany na podstawie następujących zasad: + * Jeśli jeden gracz wybierze kamień, a drugi nożyce, to wygrywa kamień + (kamień tępi nożyce). + * Jeśli jeden gracz wybierze nożyce, a drugi papier, to wygrywają nożyce + (nożyce przecinają papier). + * Jeśli jeden gracz wybierze papier, a drugi kamień, to wygrywa papier + (papier owija kamień). + * Jeśli obaj gracze wybiorą ten sam ruch, to rozgrywka musi zostać powtórzona, aby + wyłonić zwycięzcę. +Program powinien być napisany z wykorzystaniem poznanych instrukcji języka. +Program można rozbudować, dodając nowe opcje lub dokonać innych zmian. Należy wtedy dołączyć +krótki opis programu. + +[[./Projekt1/main.cpp][C++]] + + + diff --git a/org/fix.lua b/org/fix.lua new file mode 100644 index 0000000..595f7d1 --- /dev/null +++ b/org/fix.lua @@ -0,0 +1,4 @@ +function Link(el) + el.target = el.target:gsub(" ", "%%20") + return el +end