Programowanie obiektowe PO Programowanie obiektowe PO - LAB 3 Wojciech Pieprzyca
PO Pętla for (1) Pętla for służy nam do wielokrotnego wykonania określonego bloku instrukcji. Koncepcja działania pętli for: na początku inicjalizowana jest zmienna warunkowa, w kolejnych krokach sprawdza się czy spełniony jest warunek kontynuowania pętli, jeśli nie to kończy się wykonywanie pętli, jeśli tak to przechodzimy do kolejnego kroku wykonywania pętli, w każdym kroku zmienna warunkowa ulega zmianie, co zwykle polega na zmniejszeniu lub zwiększeniu jej wartości, należy pamiętać o tym, aby zmienna warunkowa była zadeklarowana przed jej użyciem. for (inicjalizacja; warunek; krok) { …. }
Pętla for (2) PO int i; for (i=1; i<11; i++) { cout << ”Aktualnie jesteśmy w kroku: ” << i << endl; } ++ jest operatorem inkrementacji, oznacza dokładnie to samo co i=i+1 0. Zmienna i jest inicjalizowana wartością 1, Sprawdzany jest warunek (1<11), ponieważ jest spełniony to przechodzimy do pierwszego kroku (iteracji) wykonywania pętli, Wyświetlany jest tekst „aktualnie jesteśmy w kroku 1”, Zmienna i jest zwiększana o 1 (czyli i=2), Sprawdzany warunek jest nadal spełniony (2<11), Wyświetlany jest tekst „aktualnie jesteśmy w kroku 2”, Zmienna i jest zwiększana o 1 (czyli i=3), Kroki 4,5,6 są powtarzane dla kolejnych wartości i=3,4,5,6,7,8,9 Sprawdzany warunek jest nadal spełniony (10<11), Wyświetlany jest tekst „aktualnie jesteśmy w kroku 10”, Zmienna i jest zwiększana o 1 (czyli i=11), Sprawdzany warunek NIE JEST spełniony (11<11) pętla kończy swoje działanie
PO Ćwiczenia (I) 1. Napisać program, który prosi o podanie dwóch liczb i Napisać program, który pokazuje kolejne potęgi liczby 2 o wykładniku z zakresu 0-10 tzn. 20, 21, 22, …, 210. Wykorzystać funkcję pow(liczba,potęga) = liczbapotęga Uwaga: dla funkcji pow potrzeba dołączyć bibliotekę math.h. 2. Napisać program, który pyta o zakres liczb (liczba_od : liczba_do) a następnie zsumuje wszystkie liczby z podanego zakresu i wyświetli ich sumę oraz średnią na ekranie. 3. Napisać program wyznaczający iteracyjnie sumę szeregu: 1/x + 1/x2 + 1/x3 + 1/x4 + . . . + 1/xn Oczywiście x i n są parametrami programu, które pobieramy od użytkownika np. dla x=2 i n=4 wynikiem powinno być 1/2 + 1/22 + 1/23 + 1/24 = 1/2 + 1/4 + 1/8 + 1/16 = 15/16 4. Napisać program wyświetlający linię ze znaków -, Liniii powinno być 5, o długości kolejno 1,2,3,4,5 znaków.
PO Pętla while (1) Pętla while podobnie jak pętla for służy do wielokrotnego wykonywania określonego bloku instrukcji. Ten rodzaj pętli stosuje się zwykle wówczas, gdy nie znamy dokładnej liczby iteracji (powtórzeń) pętli. Postać pętli while jest następująca: while (warunek) { //instrukcje } Instrukcje umieszczone wewnątrz bloku while są wykonywane tak długo jak spełniony jest warunek. Ze względu na inną składnie pętli while w porównaniu do for, należy pamiętać o samodzielnym zadeklarowaniu i zainicjalizowaniu zmiennej warunkowej, a później odpowiednim zmienianiu jej wartości w ramach pętli while.
Pętla while (2) PO int i=1; while (i<11) { cout << ”Aktualnie jesteśmy w kroku: ” << i << endl; i++; } Działanie dla tego przykładu jest prawie analogiczne jak pętli for: 0. Zmienna i jest deklarowana i inicjalizowana wartością 1, Sprawdzany jest warunek (1<11), ponieważ jest spełniony to przechodzimy do pierwszego kroku (iteracji) wykonywania pętli, Wyświetlany jest tekst „aktualnie jesteśmy w kroku 1”, Zmienna i jest zwiększana o 1 (czyli i=2), Sprawdzany warunek jest nadal spełniony (2<11), Wyświetlany jest tekst „aktualnie jesteśmy w kroku 2”, Zmienna i jest zwiększana o 1 (czyli i=3), Kroki 4,5,6 są powtarzane dla kolejnych wartości i=3,4,5,6,7,8,9 Sprawdzany warunek jest nadal spełniony (10<11), Wyświetlany jest tekst „aktualnie jesteśmy w kroku 10”, Zmienna i jest zwiększana o 1 (czyli i=11), Sprawdzany warunek NIE JEST spełniony (11<11) pętla kończy swoje działanie
PO Pętla while (3) Drugi przykład: Program typu „zgadywanie liczby”. Najpierw losowana jest liczbę z zakresu 0-9, a następnie użytkownik pytany jest o liczbę tak długo aż jej nie zgadnie. Dodatkowo program udziela podpowiedzi czy szukana liczba jest mniejsza czy większa od wpisanej. Do losowania liczb służy funkcja rand(). Dodatkowo operator % powoduje, że brane są pod uwage reszty z dzielenie przez 10 (a więc tylko liczby 0..9). int los = rand()%10; int liczba = -1; while (liczba!=los) { cout << ”Zgadnij liczbe (0-9):”; cin >> liczba; if (los==liczba) cout << ”Zgadłeś!”; else if (los>liczba) cout << ”Nie zgadłeś, liczba jest większa”; else if (los<liczba) cout << ”Nie zgadłeś, liczba jest mniejsza”; }
PO Pętla do-while Pętla do-while różni się od while jedynie tym, iż warunek wykonania pętli sprawdzany jest na końcu przebiegu pętli, a co za tym idzie, taki rodzaj pętli na pewno wykona się przynajmniej raz, nawet jeżeli wartość wyrażenia warunkowego jest niespełniona już w pierwszej iteracji. do { //instrukcje }while(warunek); Przykład: int liczba=0; cout << „Podaj liczbe:”; cin >> liczba; }while(liczba!=0);
PO Ćwiczenia (II) Napisać program, który pyta o liczbę dodatnią (jeżeli użytkownik poda liczbę ujemną lub 0 to program powinien zapytać go o liczbę raz jeszcze), a następnie wyświetli na ekranie 10 kolejnych liczb parzystych lub nieparzystych zaczynając od podanej liczby. 2. Napisać program który wczytuje liczby z klawiatury i po każdym wczytaniu pyta użytkownika ‘Czy to już wszystkie liczby? (T/N)’ . Jeżeli użytkownik naciśnie T to program powinien się zakończyć i wyświetlić sumę wprowadzonych liczb oraz ich średnią, wartość największą i wartość najmniejszą (wykorzystać funkcję getch() z blblioteki conio.h do pobierania znaku od użytkownika).
Operatory arytmetyczne PO Operatory arytmetyczne Podstawowe operatory arytmetyczne i operator modulo + dodawanie - odejmowanie * mnożenie / dzielenie % reszta z dzielenia Liczba1 Liczba2 Liczba1/Liczba2 Liczba1%Liczba2 5 10 1 11 19 9
Przykład – formatowanie wydruku PO Przykład – formatowanie wydruku Operator modulo można wykorzystać także do formatowanie wydruku np. wstawianie nowej linii po wyświetlaniu w pętli kolejnych 10 wartości. int i; for (int i=1; i<=100; i++) { cout << i << ” ”; if (i%10==0) cout << endl; }
Operatory inkrementacji i dekrementacji PO Operatory inkrementacji i dekrementacji Operator inkrementacji (zwiększanie wartości zmiennej o jeden) zmienna++ jest równoważny wykonaniu instrukcji przypisania zmienna = zmienna+1, Operator dekrementacji (zmniejszanie wartości zmiennej o jeden) zmienna-- jest równoważny wykonaniu instrukcji przypisania zmienna = zmienna-1, Rozróżniamy: postinkrementację zmienna++ postdekrementację zmienna--, preinkrementację ++zmienna, predekrementację --zmienna,
Różnica między post i pre W ogólności możemy powiedzieć, że preinkrementacja i predekrementacja wykonywana jest PRZED użyciem zmiennej która zwiększamy/zmniejszamy, z kolei postinkrementacja i postdekrementacja wykonywana jest PO użyciu zwiększanej/zmniejszanej zmiennej. Przykład: x = 3; y = 2; if( x == y++ ) // porównaj x z y, potem zwiększ y (y=3) a = 1; x++; // zwiększ x (x=4) if( x == ++y ) // zwiększ y (y=4), potem porównaj x z y b = 2;
Operatory logiczne i porównania Operator koniunkcji (i) && Operator alternatywy (lub) || Operator negacji ! Operatory porównania: mniejsze < mniejsze lub równe <= większe > większe lub równe >= równe == różne !=
Przykłady PO Przykłady: Liczby z zakresu 0-10 (liczba>=0 && liczba<=10) Liczby mniejsze od 0 lub większe od 10 (liczba<0 || liczba>10) Liczby różne od 10 (liczba!=10)
Operatory bitowe (I) PO przesunięcie w lewo << przesunięcie w prawo >> bitowy iloczyn logiczny & bitowa suma logiczna | bitowa negacja ~ Przykłady: Przesunięcie w lewo o 2 bity: int liczba = 10; //bitowo 00001010 (10) liczba = liczba << 2; //bitowo 00101000 (40)
Operatory bitowe (II) x y x&y 1 PO Przesunięcie w prawo o 2 bity: int liczba = 10; //bitowo 00001010 (10) liczba = liczba >> 2; //bitowo 00000010 (2) Iloczyn logiczny dwóch liczb int x = 14; //bitowo 00001110 int y = 5; //bitowo 00000101 int wynik = x&y; //bitowo 00000100 00001110 00000101 ======== 00000100 (4) x y x&y 1
Operatory bitowe (III) PO Operatory bitowe (III) Suma logiczna dwóch liczb x y x|y 1 int x = 14; //bitowo 00001110 int y = 5; //bitowo 00000101 int wynik = x|y; //bitowo 00001111 00001110 00000101 ======== 00001111 (15) Negacja logiczna liczby x ~x 1 int x = 14; //bitowo 00001110 int wynik = ~x; //bitowo 11110001 ~(00001110) = 11110001 (241)
PO Ćwiczenia (III) Napisać program obliczający normalną i idealną wagę według wzoru Broca. Program ma zapytać o wzrost (dopuszczalny zakres tylko od 100 do 250 cm) oraz o płeć (dostępne tylko opcje k i m). Jeżeli użytkownik poda wzrost spoza podanego zakresu lub nieprawidłowo określi płeć to program powinien o dany parametr zapytać raz jeszcze (wykorzystać pętle do-while). Potrzebne wzory: waga normalna = wzrost-100 waga idealna = waga normalna – 15% (dla kobiet) waga idealna = waga normalna – 10% (dla mężczyzn)
PO Ćwiczenia (IV) Napisać kalkulator bitowy. Program pyta o liczbe1 i liczbe2 oraz operację jaką chcemy przeprowadzić (numer z wyświetlonej listy). Dostępne działania i odpowiednie wyniki to: 1. Przesunięcie w lewo liczba1<<liczba2 2. Przesunięcie w prawo liczba1>>liczba2 3. Iloczyn bitowy liczba1 & liczba2 4. Suma bitowa liczba1 | liczba2 5. Negacja bitowa ~liczba1 Program powinien działać w pętli i po każdej operacji pytać czy zakończyć działanie (pętla do-while).