diff --git a/Podstawy Programowania II/.gitignore b/Podstawy Programowania II/.gitignore new file mode 100644 index 0000000..5422c4c --- /dev/null +++ b/Podstawy Programowania II/.gitignore @@ -0,0 +1,8 @@ +* + +!.gitignore +!**/ +!*.cpp +!*.md +.#*.cpp +.#*.md \ No newline at end of file diff --git a/Podstawy Programowania II/Projekt 1/projekt.cpp b/Podstawy Programowania II/Projekt 1/projekt.cpp new file mode 100644 index 0000000..c95d7f5 --- /dev/null +++ b/Podstawy Programowania II/Projekt 1/projekt.cpp @@ -0,0 +1,134 @@ +/* + Autor: Mateusz Słodkowicz + Grupa: D3 + Numer Indeksu: 167675 + */ + +#include +#include +#include +#include +#include + +void losujTablice(int[], size_t, size_t); +void wypiszTablice(int[], size_t); +double srednia(int[], size_t); +void bombel(int[], size_t); +double mediana(int[], size_t); +void policzOsoby(int[],int[],size_t,size_t); +std::string maxOcena(int[], size_t); +void histogram(int[], size_t); + +int main() +{ + const size_t N = 60; + const size_t OO = 20; + + int oceny[N] = {0}; + int ileOsob[OO] = {0}; + + srand(time(NULL)); + + losujTablice(oceny, N, OO); + std::cout << "Oceny: "; + wypiszTablice(oceny, N); + bombel(oceny, N); + std::cout << "Oceny posortowane: "; + wypiszTablice(oceny, N); + + + + std::cout << "Srednia: " << srednia(oceny, N) << "\n"; + std::cout << "Mediana: " << mediana(oceny, N) << "\n"; + policzOsoby(oceny, ileOsob, N, OO); + + std::cout << "Najwiecej wystepuje ocena/y: " << maxOcena(ileOsob, OO) << "\n"; + histogram(ileOsob, OO); + return 0; +} + +void losujTablice(int tab[], size_t roz, size_t max) +{ + for (size_t i = 0; i < roz; ++i) + { + tab[i] = rand() % max; + } +} +void wypiszTablice(int tab[], size_t roz) +{ + for (size_t i = 0; i < roz; ++i) + { + std::cout << tab[i] << ((i + 1 == roz) ? "\n" : " "); + } +} +double srednia(int tab[], size_t roz) +{ + int suma = 0; + for (size_t i = 0; i < roz; ++i) + { + suma += tab[i]; + } + return double(suma) / double(roz); +} +void bombel(int tab[], size_t roz) +{ + int tmp; + for (size_t i = 0; i < roz; ++i) + { + for (size_t j = 0; j < roz; ++j) + { + if (tab[j] > tab[i]) + { + tmp = tab[j]; + tab[j] = tab[i]; + tab[i] = tmp; + } + } + } +} +double mediana(int tab[], size_t roz) +{ + return (roz % 2 == 0) + ? ((double(tab[roz / 2]) + double(tab[(roz / 2) - 1])) / 2.0) + : double((tab[roz / 2])); +} +void policzOsoby(int oceny[], int osoby[], size_t roz, size_t maxOcena) +{ + for (size_t i = 0; i < maxOcena; ++i) + { + osoby[i] = 0; + } + for (size_t i = 0; i < roz; ++i) + { + osoby[oceny[i]] += 1; + } +} + +std::string maxOcena(int ileOsob[], size_t maxOcena) +{ + std::string ret = ""; + int max = -1; + for (size_t i = 0; i < maxOcena; ++i) + { + if (ileOsob[i] > max){ + max = ileOsob[i]; + ret = std::to_string(i); + } + else if (ileOsob[i] == max) + ret += ", " + std::to_string(i); + } + return ret; +} +void histogram(int ileOsob[], size_t maxOcena) +{ + for(size_t i = 0; i +#include +#include +#include +#include +#include + +struct STUDENT +{ + std::string imie_nazwisko; + int oceny[6]; + double srednia; + std::string ocena_koncowa; +}; + +void czysc(); +void menu(std::vector &studenci); +void wypisz_wszystkich(std::vector &studenci); +void wypisz_najlepszych(std::vector &studenci); +void wypisz_wyszukanych(std::vector &studenci, std::string szukany); + +double srednia_wszystkich(std::vector &studenci); +double najwyzsza_wartosc(std::vector &studenci); +int powyzej_sredniej(std::vector &studenci); + +STUDENT tworz_studenta(); +std::vector wczytaj_dane(std::string sciezka); +void zapisz_dane(std::vector &studenci, std::string sciezka); +void modyfikuj(std::vector &studenci); + +int main() +{ +#ifdef _WIN32 + system("chcp 65001"); // Zmiana kodowaniu wiersza poleceń na windowsie dla obsługi polskich znaków +#endif + std::cout << std::setprecision(3); + czysc(); + std::vector studenci; + bool wyjdz = false; + std::string tekst = ""; + while(!wyjdz) + { + menu(studenci); + std::cout << "Wybór: "; + char wybor = 0; + while (!(std::cin >> wybor) || wybor < '0' || wybor > '9') + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Wybór: "; + } + + switch (wybor) + { + case '0': + wyjdz = true; + break; + case '1': + wypisz_wszystkich(studenci); + break; + case '2': + czysc(); + studenci = wczytaj_dane("dane.txt"); + break; + case '3': + czysc(); + zapisz_dane(studenci, "dane.txt"); + break; + case '4': + czysc(); + std::cout << "Średnia: " << srednia_wszystkich(studenci); + break; + case '5': + czysc(); + std::cout << "Średnia: " << srednia_wszystkich(studenci) << "\nIlośc studentów powyżej średniej: " << powyzej_sredniej(studenci); + break; + case '6': + czysc(); + wypisz_najlepszych(studenci); + break; + case '7': + czysc(); + tekst = ""; + std::cout << "Podaj szukany fragment: "; + std::cin >> tekst; + wypisz_wyszukanych(studenci, tekst); + break; + case '8': + czysc(); + studenci.push_back(tworz_studenta()); + break; + case '9': + czysc(); + modyfikuj(studenci); + break; + } + } + + return 0; +} + +void czysc() +{ +#ifdef _WIN32 + system("cls"); +#else + system("clear"); +#endif +} + +void menu(std::vector &studenci) +{ + std::cout << "\n\nAktualna ilość studentów: " << studenci.size() << "\n" + << "1. Wypisz studentów\n" + << "2. Wczytaj studentów z pliku dane.txt\n" + << "3. Zapisz studentów do pliku dane.txt\n" + << "4. Wypisz średnią wszystkich studentów\n" + << "5. Wypisz ilość studentów powyżej średniej\n" + << "6. Wypisz studentów z najwyższą średnią\n" + << "7. Wyszukaj i wypisz dane studentów których imię/nazwisko zawiera szukany tekst\n" + << "8. Dodaj studenta\n" + << "9. Modyfikuj lub usuń studenta\n" + << "0. Wyjdź\n"; +} + +double licz_srednia(STUDENT &student) +{ + double srednia = 0; + + for (int i = 0; i < 6; ++i) + { + srednia += student.oceny[i]; + } + srednia = srednia / 6.0; + return srednia; +} + +std::string ocena(STUDENT &student) +{ + if (student.srednia >= 91) + return "bardzo dobry"; + if (student.srednia >= 81) + return "dobry plus"; + if (student.srednia >= 71) + return "dobry"; + if (student.srednia >= 61) + return "dostateczny plus"; + if (student.srednia >= 51) + return "dostateczny"; + return "niedostateczny"; +} + +STUDENT tworz_studenta() +{ + STUDENT s; + std::string tmp_txt; + std::cout << "Podaj imię: "; + std::cin >> tmp_txt; + s.imie_nazwisko = tmp_txt; + tmp_txt = ""; + std::cout << "Podaj nazwisko: "; + std::cin >> tmp_txt; + s.imie_nazwisko += " "; + s.imie_nazwisko += tmp_txt; + int tmp = -1; + for(int i = 0;i<6;++i) + { + std::cout << "Podaj ocenę " << i+1 <<": "; + while (!(std::cin >> tmp) || (tmp <50 && tmp !=0 ) || tmp > 100) + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Błąd, ocena musi być 50 <= ocena <= 100 lub równa 0\n"; + std::cout << "Podaj ocenę " << i+1 <<": "; + } + s.oceny[i] = tmp; + } + s.srednia = licz_srednia(s); + s.ocena_koncowa = ocena(s); + return s; +} + +void modyfikuj(std::vector &studenci) +{ + czysc(); + wypisz_wszystkich(studenci); + std::cout << "\nCo chcesz zrobić?\n1.Modyfikuj\n2.Usuń\n3.Anuluj\nWybór: "; + char wybor = 0; + while (!(std::cin >> wybor) || wybor < '1' || wybor > '3') + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Wybór: "; + } + int id = -1; + switch (wybor) + { + case '1': + std::cout << "\nPodaj id: "; + while (!(std::cin >> id)) + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\nPodaj id: "; + } + if (id < 0 || id >= studenci.size()) + { + std::cout << "Błędne id!\n"; + return; + } + else + studenci[id] = tworz_studenta(); + break; + case '2': + std::cout << "\nPodaj id: "; + while (!(std::cin >> id)) + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\nPodaj id: "; + } + if(id<0 || id>=studenci.size()) + { + std::cout << "Błędne id!\n"; + return; + } + else + studenci.erase(studenci.begin()+id); + break; + case '3': + return; + } +} + +void zapisz_dane(std::vector &studenci, std::string sciezka) +{ + std::ofstream plik(sciezka); + if (!plik.is_open()) + { + std::cout << "Nie można otworzyć pliku: " << sciezka << std::endl; + return; + } + for (auto &s : studenci) + { + plik << s.imie_nazwisko << std::endl; + for (int i = 0; i < 6; ++i) + { + plik << s.oceny[i] << " "; + } + plik << "\n"; + } + plik.close(); +} + +std::vector wczytaj_dane(std::string sciezka) +{ + std::vector studenci; + std::ifstream plik(sciezka); + if (!plik.is_open()) + { + std::cout << "Nie można otworzyć pliku: " << sciezka << std::endl; + return studenci; + } + std::string line; + while (std::getline(plik, line)) + { + if (!line.empty()) + { + STUDENT s; + s.imie_nazwisko = line; + for (int i = 0; i < 6; ++i) + { + plik >> s.oceny[i]; + } + plik.ignore(); + s.srednia = licz_srednia(s); + s.ocena_koncowa = ocena(s); + studenci.push_back(s); + } + } + plik.close(); + return studenci; +} + +double srednia_wszystkich(std::vector &studenci) +{ + if (studenci.empty()) + return 0; + double suma = 0; + for (auto &student : studenci) + { + suma += student.srednia; + } + return suma / studenci.size(); +} + +int powyzej_sredniej(std::vector &studenci) +{ + int ret = 0; + double srednia = srednia_wszystkich(studenci); + for(auto &s :studenci) + { + if(s.srednia > srednia) ++ret; + } + return ret; +} + +double najwyzsza_wartosc(std::vector &studenci) +{ + double max = 0; + for (auto s : studenci) + { + if(s.srednia>max) max = s.srednia; + } + return max; +} + +void wypisz_wszystkich(std::vector &studenci) +{ + czysc(); + if(studenci.size() == 0) + { + std::cout << "Brak studentów!\n"; + return; + } + + std::cout << "Lista studentów:\n"; + printf("%2s | %31s | %30s | %10s | %19s\n","ID","Imię i nazwisko","Oceny","Średnia","Ocena Końcowa"); + printf("---+--------------------------------+--------------------------------+-----------+-------------------\n"); + for (int j = 0; j < studenci.size(); ++j) + { + std::string oceny = ""; + STUDENT &s = studenci[j]; + + for (int i = 0; i < 6; ++i) + { + oceny += std::to_string(s.oceny[i]); + oceny += ((i == 5) ? " " : ", "); + } + + printf("%2i | %30s | %30s | %9.2f | %18s\n",j,s.imie_nazwisko.c_str(),oceny.c_str(),s.srednia,s.ocena_koncowa.c_str()); + } +} + +void wypisz_wyszukanych(std::vector &studenci, std::string szukany) +{ + czysc(); + std::vector znalezieni; + if (studenci.size() == 0) + { + std::cout << "Brak studentów!\n"; + return; + } + std::cout << "Lista studentów zawierających \"" << szukany << "\":\n"; + bool znaleziono = false; + printf("%-31s | %30s | %10s | %19s\n","Imię i nazwisko","Oceny","Średnia","Ocena Końcowa"); + printf("-------------------------------+--------------------------------+-----------+-------------------\n"); + for (auto &s : studenci) + { + if (s.imie_nazwisko.find(szukany) != std::string::npos) + { + znalezieni.push_back(s); + znaleziono = true; + std::string oceny = ""; + + for (int i = 0; i < 6; ++i) + { + oceny += std::to_string(s.oceny[i]); + oceny += ((i == 5) ? " " : ", "); + } + + printf("%-30s | %30s | %9.2f | %18s\n", s.imie_nazwisko.c_str(), oceny.c_str(), s.srednia, + s.ocena_koncowa.c_str()); + } + } + if(!znaleziono) std::cout << "Nie znaleziono\n"; + else + { + std::cout << "\nZapisać do pliku \"wyszukani.txt\"?\n1.Tak\n2.Nie\n"; + std::cout << "Wybór: "; + char wybor = 0; + while (!(std::cin >> wybor) || wybor < '1' || wybor > '2') + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Wybór: "; + } + if(wybor=='1') zapisz_dane(znalezieni, "wyszukani.txt"); + } +} + +void wypisz_najlepszych(std::vector &studenci) +{ + czysc(); + if (studenci.size() == 0) + { + std::cout << "Brak studentów!\n"; + return; + } + std::vector najlepsi; + double max = najwyzsza_wartosc(studenci); + std::cout << "Studenci o najwyższej średniej " << max << ":\n"; + printf("%-31s | %30s | %10s | %19s\n", "Imię i nazwisko", "Oceny", "Średnia", "Ocena Końcowa"); + printf("-------------------------------+--------------------------------+-----------+-------------------\n"); + for (auto &s : studenci) + { + if (s.srednia == max) + { + std::string oceny = ""; + + for (int i = 0; i < 6; ++i) + { + oceny += std::to_string(s.oceny[i]); + oceny += ((i == 5) ? " " : ", "); + } + + printf("%-30s | %30s | %9.2f | %18s\n", s.imie_nazwisko.c_str(), oceny.c_str(), s.srednia, + s.ocena_koncowa.c_str()); + najlepsi.push_back(s); + }; + } + std::cout << "\nZapisać do pliku \"najlepsi.txt\"?\n1.Tak\n2.Nie\n"; + std::cout << "Wybór: "; + char wybor = 0; + while (!(std::cin >> wybor) || wybor < '1' || wybor > '2') + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Wybór: "; + } + if (wybor == '1') + zapisz_dane(najlepsi, "najlepsi.txt"); +} diff --git a/Podstawy Programowania II/README.md b/Podstawy Programowania II/README.md new file mode 100644 index 0000000..05715f4 --- /dev/null +++ b/Podstawy Programowania II/README.md @@ -0,0 +1,58 @@ +Zadania/Ćwiczenia/Projekty z przedmiotu Podstawy Programowania II + + +# Zadanie 2.1 + +Zadeklarować dwie tablice jednowymiarowe A i B o rozmiarze n zdefiniowanym przez stałą. + +- Napisać funkcję, która wczytuje dane do tablicy. Wczytać dane do tablicy A i B. +- Napisać funkcję, która wypisuje elementy tablicy na ekran. Wypisać elementy tablicy A i B. +- Napisać funkcję, która oblicza i zwraca iloczyn elementów różnych od zera. Obliczenia wykonać dla tablicy A. Wyświetlić wynik. +- Napisać funkcję, która oblicza i zwraca średnią elementów w tablicy. Obliczenia wykonać dla tablicy B. Wyświetlić wynik. +- Napisać funkcję, która oblicza i zwraca maksymalny element w tablicy i indeks, na którym ten element wystąpił. Obliczenia wykonać dla tablicy A. Wyświetlić wyniki. + + +# Zadanie 2.1B + + +## 1 + +Dana jest tablica A 9 – elementową typu całkowitego. + a. wczytać z klawiatury elementy tej tablicy + b. napisać obliczyć element minimalny i podać ile razy on wystąpił w tablicy + + +## 2 + +Zadeklarować tablicę X 15 –to elementową liczb całkowitych. +Tablicę wypełnić liczbami losowymi z przedziału <5, 30>. +Obliczyć odchylenie standardowe od średniej arytmetycznej danych zapisanych w tablicy. +Odchyleniem standardowym nazywamy średnią kwadratową odchyleń od średniej arytmetycznej. + +$$ +\large {\sigma = \sqrt{\frac{1}{N}\sum^{N}_{i=0} (x[i] - sr)^2}} +$$ + +gdzie sr - średnia arytmetyczna +Wynik wypisać + + +## 3 + +Napisz dla producenta chipsów program do rejestrowania sprzedaży pięciu rodzajów sosów: +łagodnego, ostrego, kwaśnego, słodkiego i pikantnego. +W programie zastosuj dwie równoległe tablice złożone z pięciu elementów każda: jedną typu string +zawierającą nazwy sosów i drugą typu int zawierającą liczbę sprzedanych w ostatnim miesiącu +pojemników sosów każdego rodzaju. +Nazwy sosów niech będą zapisane w definicji tablicy w liście inicjującej. Program powinien prosić +użytkownika o podanie liczby sprzedanych pojemników sosów każdego rodzaju, a następnie +wyświetlać raport zawierający liczbę sprzedanych pojemników sosów każdego rodzaju, całkowitą +liczbę sprzedanych pojemników oraz nazwy sosów, których sprzedało się najwięcej i najmniej. +*Weryfikacja poprawności wprowadzanych danych: liczba pojemników nie może być ujemna.* + +*Uwagi:* + +1. *Wszystkie zadania, należy napisać w jednym programie, zadania realizowane kolejno.* +2. *Punkt 1 i 2 napisać z użyciem funkcji.* +3. *W programie proszę nie korzystać z klasy vector* + diff --git a/Podstawy Programowania II/Zadanie 2.1/zadanie.cpp b/Podstawy Programowania II/Zadanie 2.1/zadanie.cpp new file mode 100644 index 0000000..848d49f --- /dev/null +++ b/Podstawy Programowania II/Zadanie 2.1/zadanie.cpp @@ -0,0 +1,93 @@ +/* + Autor: Mateusz Słodkowicz + Grupa: D3 + Numer Indeksu: 167675 + + */ + +#include +#include + +void wczytajDane(int tab[], size_t roz); +void wypiszDane(int tab[], size_t roz); +int iloczyn(int tab[], size_t roz); +double srednia(int tab[], size_t roz); +int maksimum(int tab[], size_t roz, size_t &maxId); + +// Rozmiar tablic +const size_t n = 4; + +int main() +{ + // W zadaniu nie widzę jakiego typu ma być tablica, używam więc int. + int A[n] = {0}, B[n] = {0}; + + std::cout << "Podaj dane dla tablicy A\n"; + wczytajDane(A, n); + std::cout << "Podaj dane dla tablicy B\n"; + wczytajDane(B, n); + + std::cout << "\nDane tablicy A:\n"; + wypiszDane(A, n); + std::cout << "Dane tablicy B:\n"; + wypiszDane(B, n); + + std::cout << "\nIloczyn elementow roznych od zera dla tablicy A: " << iloczyn(A, n) << std::endl; + std::cout << "\nSrednia elementow dla tablicy B: " << srednia(B, n) << std::endl; + + size_t maxId; + std::cout << "\nNajwiekszy element dla tablicy A ma wartosc: " << maksimum(A, n, maxId) + << "\nIndeks tej wartosci to: " << maxId << std::endl; + + return 0; +} + +void wczytajDane(int tab[], size_t roz) +{ + for (size_t i = 0; i < roz; ++i) + { + std::cout << "Podaj wartosc dla elementu " << i + 1 << ": "; + std::cin >> tab[i]; + } +} + +void wypiszDane(int tab[], size_t roz) +{ + for (size_t i = 0; i < roz; ++i) + { + std::cout << tab[i] << ((i != roz - 1) ? " " : "\n"); + } +} + +int iloczyn(int tab[], size_t roz) +{ + int wynik = 0; + for (size_t i = 0; i < roz; ++i) + { + if (wynik == 0 && tab[i] != 0) + wynik = tab[i]; + else if (tab[i] != 0) + wynik *= tab[i]; + } + return wynik; +} +double srednia(int tab[], size_t roz) +{ + int suma = 0; + for (size_t i = 0; i < roz; ++i) + { + suma += tab[i]; + } + return double(suma) / double(roz); +} + +int maksimum(int tab[], size_t roz, size_t &maxId) +{ + maxId = 0; + for (size_t i = 1; i < roz; ++i) + { + if (tab[maxId] < tab[i]) + maxId = i; + } + return tab[maxId]; +} diff --git a/Podstawy Programowania II/Zadanie 2.1B/zadanie.cpp b/Podstawy Programowania II/Zadanie 2.1B/zadanie.cpp new file mode 100644 index 0000000..37284db --- /dev/null +++ b/Podstawy Programowania II/Zadanie 2.1B/zadanie.cpp @@ -0,0 +1,171 @@ +/* + Autor: Mateusz Słodkowicz + Grupa: D3 + Numer Indeksu: 167675 + + */ + +#include +#include +#include +#include +#include + +using std::size_t; +using std::string; + +void wczytajDane(int tab[], size_t roz); +void losujDane(int tab[], size_t roz); +void wypiszDane(int tab[], size_t roz); +int minimum(int tab[], size_t roz, unsigned int &ile); +double srednia(int tab[], size_t roz); +double odchylenie(int tab[], size_t roz); + +int main() +{ + // Zadanie 1 + { + const size_t roz = 9; + int A[roz] = {0}; + std::cout << "Zadanie 1\n"; + wczytajDane(A, roz); + std::cout << "Elementy w tablicy: "; + wypiszDane(A, roz); + unsigned int ile; + int min = minimum(A, roz, ile); + std::cout << "Najmniejszy element to " << min << " i powtarza sie " << ile + << ((ile == 1) ? " raz\n" : " razy\n"); + } + + // Zadanie 2 + { + srand(time(NULL)); + const size_t roz = 15; + int X[roz] = {0}; + losujDane(X, roz); + + std::cout << "\nZadanie 2\n" + << "Elementy w tablicy: "; + wypiszDane(X, roz); + std::cout << "Srednia elementow to: " << srednia(X, roz) + << "\nOdchylenie standardowe od sredniej to: " << odchylenie(X, roz) << std::endl; + } + + // Zadanie 3 + { + const string nazwy[] = {"Lagodny", "Ostry", "Kwasny", "Slodki", "Pikantny"}; + const size_t roz = sizeof(nazwy) / sizeof(string); + int sprzedane[roz] = {0}; + std::cout << "\nZadanie 3\n"; + for (size_t i = 0; i < roz; ++i) + { + do + { + std::cout << "Wprowadz ilosc sprzedanych pojemnikow dla \"Sos " << nazwy[i] << "\": "; + std::cin >> sprzedane[i]; + if (sprzedane[i] < 0) + std::cout << "Blad! Wprowadz liczbe nieujemna\n"; + } while (sprzedane[i] < 0); + } + std::cout << "\nSprzedane pojemniki\n"; + int lacznie = 0; + for (size_t i = 0; i < roz; ++i) + { + lacznie += sprzedane[i]; + std::cout << "\"Sos " << nazwy[i] << "\": " << sprzedane[i] << "\n"; + } + std::cout << "Lacznie: " << lacznie; + int min = sprzedane[0]; + int max = sprzedane[0]; + for (size_t i = 1; i < roz; ++i) + { + if (sprzedane[i] > max) + { + max = sprzedane[i]; + } + + if (sprzedane[i] < min) + { + min = sprzedane[i]; + } + } + + std::cout << "\nNajwiecej sprzedanych: "; + for (size_t i = 0; i < roz; ++i) + { + if (sprzedane[i] == max) + std::cout << "\"Sos " << nazwy[i] << "\" "; + } + + std::cout << "w ilosci " << max << "\nNajmniej sprzedanych: "; + for (size_t i = 0; i < roz; ++i) + { + if (sprzedane[i] == min) + std::cout << "\"Sos " << nazwy[i] << "\" "; + } + std::cout << "w ilosci " << min << std::endl; + } + + return 0; +} + +void wczytajDane(int tab[], size_t roz) +{ + for (size_t i = 0; i < roz; ++i) + { + std::cout << "Podaj element tablicy o indeksie " << i << ": "; + std::cin >> tab[i]; + } +} +void losujDane(int tab[], size_t roz) +{ + for (size_t i = 0; i < roz; ++i) + { + tab[i] = (rand() % 26) + 5; + } +} + +void wypiszDane(int tab[], size_t roz) +{ + for (size_t i = 0; i < roz; ++i) + { + std::cout << tab[i] << ((i != roz - 1) ? ", " : "\n"); + } +} + +int minimum(int tab[], size_t roz, unsigned int &ile) +{ + ile = 1; + int min = tab[0]; + for (size_t i = 1; i < roz; ++i) + { + if (tab[i] < min) + { + ile = 1; + min = tab[i]; + } + else if (tab[i] == min) + ++ile; + } + return min; +} +double srednia(int tab[], size_t roz) +{ + int suma = 0; + for (size_t i = 0; i < roz; ++i) + { + suma += tab[i]; + } + return double(suma) / double(roz); +} +double odchylenie(int tab[], size_t roz) +{ + double sr = srednia(tab, roz); + double sigma = 0, tmp = 0; + for (size_t i = 0; i < roz; ++i) + { + tmp = double(tab[i]) - sr; + sigma += tmp * tmp; + } + return std::sqrt(sigma / roz); +} diff --git a/Podstawy Programowania II/Zadanie 2.2/main.cpp b/Podstawy Programowania II/Zadanie 2.2/main.cpp new file mode 100644 index 0000000..981ae39 --- /dev/null +++ b/Podstawy Programowania II/Zadanie 2.2/main.cpp @@ -0,0 +1,125 @@ +// Mateusz Słodkowicz D3 + +#include +#include +#include +#include +#include + +#define X 3 +#define Y 30 + +const char *mies[] = {"Czerwiec", "Lipiec","Sierpien"}; + +using namespace std; + + +void losujTablice(char[][Y],size_t); +void wypiszTablice(char[][Y], size_t); +void wypiszStatystyki(char[][Y],size_t); + +int main() +{ + srand(time(NULL)); + char temperatury[X][Y] = {0}; + losujTablice(temperatury,X); + std::cout << "Wyniki Pogodowe dla Czerwca, Lipca i Sierpnia\n\n"; + + wypiszTablice(temperatury,X); + std::cout << "\n"; + wypiszStatystyki(temperatury,X); + return 0; +} + + +void wypiszStatystyki(char tab[][Y],size_t x_max) +{ + unsigned int D[X] = {0},P[X] = {0},S[X] = {0}; + unsigned int D_lacz=0,P_lacz=0,S_lacz=0; + for(size_t x = 0; x +#include +#include +#include +#include +#include + +struct Punkt +{ + double x = 0, y = 0, odl = 0; +}; +struct Cwiartki +{ + unsigned int I = 0, II = 0, III = 0, IV = 0, OS = 0; +}; + +Punkt losujPunt(); +Cwiartki liczCwiartki(Punkt[], size_t); +void losujPunkty(Punkt[], size_t); +double odlegosc(double x, double y); +void wypiszPromien(Punkt[], size_t, double); + +int main() +{ + srand(time(NULL)); + size_t N = 0; + double R = 0; // Zakładam że okręg ma mieć środek w punkcie 0,0 + std::cout << "Wprowadz ile punktow wylosowac.\n"; + std::cout << "Ile puntkow: "; + while (!(std::cin >> N) || N == 0) + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Ile puntkow: "; + } + + Punkt *punkty = new Punkt[N]; + + losujPunkty(punkty, N); + Cwiartki cw = liczCwiartki(punkty, N); + + std::cout << "Ilosc punktow w cwiartkach ukladu:\n"; + printf("Cwiartka %4s: %i\n", "I", cw.I); + printf("Cwiartka %4s: %i\n", "II", cw.II); + printf("Cwiartka %4s: %i\n", "III", cw.III); + printf("Cwiartka %4s: %i\n", "IV", cw.IV); + printf("%12s: %i\n", "Punkty na osi", cw.OS); + + std::cout << "\nWprowadz promien okregu.\n"; + std::cout << "Promien: "; + while (!(std::cin >> R) || R == 0) + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Promien: "; + } + + wypiszPromien(punkty,N,R); + + + delete[] punkty; + return 0; +} + +void wypiszPromien(Punkt punkty[], size_t roz, double r) +{ + printf("\nPunkty w okregu o promieniu R=%.2f\n", r); + for (size_t i = 0; i < roz; ++i) + { + if (punkty[i].odl < r) + printf("X: %-6.2f | Y: %-6.2f | Odl: %-6.2f\n", punkty[i].x, punkty[i].y, punkty[i].odl); + } +} +double odlegosc(double x, double y) +{ + return sqrt((x * x) + (y * y)); +} +void losujPunkty(Punkt punkty[], size_t roz) +{ + for (size_t i = 0; i < roz; ++i) + { + punkty[i] = losujPunt(); + } +} + +Cwiartki liczCwiartki(Punkt punkty[], size_t roz) +{ + Cwiartki cw; + for (size_t i = 0; i < roz; ++i) + { + if (punkty[i].x > 0 && punkty[i].y > 0) + ++cw.I; + else if (punkty[i].x < 0 && punkty[i].y > 0) + ++cw.II; + else if (punkty[i].x < 0 && punkty[i].y < 0) + ++cw.III; + else if (punkty[i].x > 0 && punkty[i].y < 0) + ++cw.IV; + else + ++cw.OS; + } + return cw; +} + +Punkt losujPunt() +{ + Punkt p = { + .x = double((rand() % 201) - 100) / 10.0, + .y = double((rand() % 201) - 100) / 10.0 + }; + p.odl = odlegosc(p.x, p.y); + return p; +} diff --git a/org/PP2.org b/org/PP2.org new file mode 100644 index 0000000..2499ba5 --- /dev/null +++ b/org/PP2.org @@ -0,0 +1,100 @@ +#+TITLE: Podstawy Programowania II +#+AUTHOR: Mateusz Słodkowicz +#+OPTIONS: \n:t +#+OPTIONS: tex:t +#+OPTIONS: toc:nil +#+LANGUAGE: pl +#+EXPORT_FILE_NAME: ../Podstawy Programowania II/README.md +#+PANDOC_OPTIONS: lua-filter:fix.lua + +Zadania/Ćwiczenia/Projekty z przedmiotu Podstawy Programowania II + +* Zadanie 2.1 +Zadeklarować dwie tablice jednowymiarowe A i B o rozmiarze n zdefiniowanym przez stałą. +- Napisać funkcję, która wczytuje dane do tablicy. Wczytać dane do tablicy A i B. +- Napisać funkcję, która wypisuje elementy tablicy na ekran. Wypisać elementy tablicy A i B. +- Napisać funkcję, która oblicza i zwraca iloczyn elementów różnych od zera. Obliczenia wykonać dla tablicy A. Wyświetlić wynik. +- Napisać funkcję, która oblicza i zwraca średnią elementów w tablicy. Obliczenia wykonać dla tablicy B. Wyświetlić wynik. +- Napisać funkcję, która oblicza i zwraca maksymalny element w tablicy i indeks, na którym ten element wystąpił. Obliczenia wykonać dla tablicy A. Wyświetlić wyniki. + +* Zadanie 2.1B +** 1 +Dana jest tablica A 9 – elementową typu całkowitego. + a. wczytać z klawiatury elementy tej tablicy + b. napisać obliczyć element minimalny i podać ile razy on wystąpił w tablicy +** 2 +Zadeklarować tablicę X 15 –to elementową liczb całkowitych. +Tablicę wypełnić liczbami losowymi z przedziału <5, 30>. +Obliczyć odchylenie standardowe od średniej arytmetycznej danych zapisanych w tablicy. +Odchyleniem standardowym nazywamy średnią kwadratową odchyleń od średniej arytmetycznej. + +$$ +\large {\sigma = \sqrt{\frac{1}{N}\sum^{N}_{i=0} (x[i] - sr)^2}} +$$ + +gdzie sr - średnia arytmetyczna +Wynik wypisać + +** 3 +Napisz dla producenta chipsów program do rejestrowania sprzedaży pięciu rodzajów sosów: +łagodnego, ostrego, kwaśnego, słodkiego i pikantnego. +W programie zastosuj dwie równoległe tablice złożone z pięciu elementów każda: jedną typu string +zawierającą nazwy sosów i drugą typu int zawierającą liczbę sprzedanych w ostatnim miesiącu +pojemników sosów każdego rodzaju. +Nazwy sosów niech będą zapisane w definicji tablicy w liście inicjującej. Program powinien prosić +użytkownika o podanie liczby sprzedanych pojemników sosów każdego rodzaju, a następnie +wyświetlać raport zawierający liczbę sprzedanych pojemników sosów każdego rodzaju, całkowitą +liczbę sprzedanych pojemników oraz nazwy sosów, których sprzedało się najwięcej i najmniej. +/Weryfikacja poprawności wprowadzanych danych: liczba pojemników nie może być ujemna./ + +/Uwagi:/ + 1. /Wszystkie zadania, należy napisać w jednym programie, zadania realizowane kolejno./ + 2. /Punkt 1 i 2 napisać z użyciem funkcji./ + 3. /W programie proszę nie korzystać z klasy vector/ +* Zadanie 2.2 +Potrzebny jest programu przetwarzającego informacje o pogodzie za trzy letnie miesiące +minionego roku. Każdy dzień powinien być oznaczony jako deszczowy ('D'), pochmurny ('P') +lub słoneczny ('S'). Napisz program zapisujący te informacje w tablicy typu char o wymiarach +3×30 elementów, w której wiersze reprezentują kolejne miesiące (0 – czerwiec, 1 – lipiec, 2 – +sierpień), a kolumny — dni miesiąca. Pomijany jest 31 dzień miesiąca. +Program powinien losowo wypełnić tablicę, a następnie wyświetlać raport zawierający liczbę +dni deszczowych, pochmurnych i słonecznych w poszczególnych miesiącach i w całym +trzymiesięcznym okresie. +Raport powinien zawierać również nazwę miesiąca, w którym było najwięcej dni deszczowych. +* Zadanie 2.20 +- Zadeklarować strukturę Punkt mającą pola: x, y typu double, odl (odległość od początku + układu współrzędnych) typu double. + Wczytać N i zadeklarować dynamicznie N elementową tablicę typu Punkt. +- Napisać funkcję, która wypełnia tablicę punktów danymi w następujący sposób: x, y są + liczbami losowymi ze zbioru {-10, -9.9,…,-0.1, 0, 0.1, 0.2, 0.3, …,9.9, 10}, odległość (odległość + punktu od środka układu współrzędnych) jest obliczana za pomocą funkcji. +- Napisać funkcję, która policzy ile punktów jest w każdej ćwiartce. + Wypisać wyniki (można dodatkowo przedstawić w postaci histogramu). +- Wczytać promień okręgu R. Napisać funkcję, która obliczy i zwróci ile punktów znajduje się + wewnątrz okręgu o podanym promieniu. Wypisać obliczoną wartość. +- Napisać funkcję, która wypisuje na ekran punkty spełniające powyższy warunek. Danego + jednego punktu powinny być zapisywane w jednej linii, z dokładnością 2 miejsc po kropce. +*Uwagi*: +- Odległość punkt od środka układu współrzędnych obliczana ze wzoru $odl = \sqrt{x^2 + y^2}$ +- Interakcję z użytkownikiem (wyświetlanie, pobieranie danych) należy umieścić wyłącznie w funkcji main(). + Oczywiście wyjątek stanowi funkcja specjalnie przeznaczona do wyświetlania danych. +- Program powinien wyświetlać czytelne i jasne komunikaty. +- Nie należy używać zmiennych globalnych. + +* Projekt 1 +Grupę 60 osób poproszono o ocenę gry komputerowej. Każda osoba mogła przyznać ocenę od 0 do 10. +Zadeklarować N –elementową np. 60-elementową tablicę typu int. +1. Wylosować elementy tej tablicy z przedziału <0, 10>. +2. Wypisać wylosowaną tablicę. +3. Obliczyć średnią ocenę. +4. Obliczyć medianę (środkowa wartość w posortowanej tablicy, w przypadku parzystej liczby elementów +tablicy jest to średnia dwóch środkowych wartości). +5. Obliczyć ile osób przyznało każdą z ocen. W tym celu zadeklarować 11 -to elementową tablicę ocena, i-ty +element tej tablicy zawiera liczbę osób, które przyznały taką ocenę. +6. Obliczyć która ocena była przyznana największą ilość razy. Jeżeli było kilka takich ocen wypisać wszystkie. +7. Narysować histogram złożony z '*' (Histogram pokazuje liczebności poszczególnych grup). + +*Uwagi*: +- Program podzielić na funkcje. +- Program powinny wyświetlać czytelne i jednoznaczne komunikaty zarówno na etapie wprowadzania danych, + jak i wyświetlania ich na ekranie