Programowanie obiektowe PO Programowanie obiektowe PO - LAB 2 Wojciech Pieprzyca
Zmienne globalne, lokalne, zakresy ważności (1) PO Zmienne globalne, lokalne, zakresy ważności (1) Zmienne globalne swoim zakresem obejmują cały program, oznacza to, że możemy odwoływać się do nich z dowolnego miejsca w programie, Zmienne lokalne swój zakres ograniczają do bloku programu w którym zostały zadeklarowane, blok programu rozpoczyna się nawiasem klamrowym otwierającym {, a kończy nawiasem zamykającym }. Typowym przykładem bloku jest funkcja. Jeżeli zadeklarujemy zmienną globalną i lokalną o takich samych nazwach, to w ramach bloku z deklaracją zmiennej lokalnej będzie obowiązywała wartość zmiennej lokalnej, a poza nim wartość zmiennej globalnej. Mówimy, wówczas, że zmienna lokalna zasłania wartość zmiennej globalnej.
Zmienne globalne, lokalne, zakresy ważności (2) PO Zmienne globalne, lokalne, zakresy ważności (2) #include <vcl.h> #include <iostream.h> #include <conio.h> //zmienna globalna int zm=100; int main(int argc, char *argv[]) { cout << ”Zmienna przed deklaracja lokalnej:” << zm << endl; //zmienna lokalna int zm = 200; cout << ”Zmienna po deklaracji lokalnej:” << zm << endl; //nowy blok programu int b = 2; cout << ”Zmienna b w bloku:” << b << endl; } //b=3 BŁĄD! Zmienna b nie jest widoczna poza blokiem getch(); return 0;
PO Stałe Za pomocą modyfikatora const możemy zadeklarować stałą tzn. zmienną, której wartości nie można zmieniać w trakcie programu. Każda stała w czasie deklaracji musi być jednocześnie zainicjalizowana tzn. trzeba jej przyporządkować wartość. Deklaracja stałej: const typ nazwa = wartosc; Przykłady: const float pi = 3.14; const int liczba = 5;
PO Typ void Typ void to tzw. typ pusty, używa się go zwykle wtedy, gdy dana funkcja nie zwraca żadnej wartości. Funkcje deklaruje się (lub definiuje) w następujący sposób: typ_zwracanej_wartości nazwa(argumenty) Przykłady: void funkcja(void) {….} void funkcja() void funkcja(int a, int b)
Typ strukturalny struct (1) PO Typ strukturalny struct (1) Struktura jest złożonym typem danych. Definicja struktury polega na określeniu jej nazwy oraz składowych. Składowymi mogą by zmienne różnych typów, zarówno typów prostych jak i złożonych. Struktura zwykle zawiera grupę składowych (zmiennych) logicznie ze sobą powiązanych. Ogólna postać definicji struktury: struct nazwa_struktury { typ1 zmienna1; typ2 zmienna2; …. typN zmiennaN; };
Typ strukturalny struct (2) PO Typ strukturalny struct (2) Przykład: struct osoba { char imie[20]; char nazwisko[20]; int wiek; float wynagrodzenie; }; //deklaracja zmiennych typu osoba osoba os1,os2; //wpisanie danych do struktury os1 strcpy(os1.imie,”Marek”); strcpy(os1.nazwisko,”Kowalski”); os1.wiek = 20; os1.wynagrodzenie = 2252.30;
Typ strukturalny struct (3) PO Typ strukturalny struct (3) //wpisanie danych do struktury os2 strcpy(os2.imie,”Jurek”); strcpy(os2.nazwisko,”Nowak”); os2.wiek = 32; os2.wynagrodzenie = 3183.20; //wyświetlenie danych os1 i os2 cout << os1.imie << ” ” << os1.nazwisko << endl; cout << ” Wiek: ” << os1.wiek << endl; cout << ”Płace: ” << os1.wynagrodzenie << endl; cout << os2.imie << ” ” << os2.nazwisko << endl; cout << ” Wiek: ” << os2.wiek << endl; cout << ”Płace: ” << os2.wynagrodzenie << endl;
Typ strukturalny struct (3) PO Typ strukturalny struct (3) Uwagi do przykładu: - korzystanie ze struktur wymaga zadeklarowania zmiennych typu strukturalnego, w tym przypadku typu osoba, odwołanie się do składowych struktury odbywa się za pomocą operatora kropki . Przykład: struktura.składowa = wartosc; os1.wiek = 30; - przypisanie do tablicy znakowej ciągu tekstu z różnych względów nie może odbyć się wprost poprzez operator przypisania, w zamian wykorzystujemy funkcje strcpy(cel,zrodlo) kopiującą tekst do zmiennej docelowej (w tym przypadku tablicy znaków)
PO Ćwiczenia (I) Napisać program definiujący strukturę towar. Struktura ta powinna zawierać informacje o nazwie, cenie i producencie towaru, a także liczbie dostępnych sztuk. W kolejnym kroku należy stworzyć dwie zmienne typu towar, odpowiednie zainicjalizować je danymi, a później wyświetlić te informacje na ekranie.
Instrukcja warunkowa if (1) PO Instrukcja warunkowa if (1) Instrukcja if służy do sterowania przebiegiem programu i wyboru jednej z kilku alternatywnych dróg jego realizacji w zależności od aktualnych warunków. Składnia: if (warunek) instrukcja1 else instrukcja2 Warunek jest wyrażeniem, które może przyjmować wartość zero (fałsz) lub wartość różną od zera (prawda), Działanie instrukcji warunkowej if: 1. obliczenie wartości wyrażenia warunkowego, 2. jeżeli wartość wyrażenia jest różna od 0 to wykonywana jest instrukcja1, 3. jeżeli wartość wyrażenia jest równa 0 to wykonywana jest instrukcja2
Instrukcja warunkowa if (2) PO Instrukcja warunkowa if (2) W poniższym programie wyrażenie warunkowe jest prawdziwe dla każdej liczby różnej od zera (zgodnie z założeniem C): #include <vcl.h> #include <iostream.h> #include <conio.h> int main(int argc, char *argv[]) { int liczba; cout << ”Podaj liczbe: ”; cin >> liczba; if (liczba) cout << ”Liczba rozna od 0 (prawda) – warunek jest spelniony”; else cout << ”Liczba rowna 0 (fałsz) – warunek niespelniony”; getch(); return 0; }
PO Ćwiczenia (II) 1. Uzupełnić program z poprzednich zajęć obliczający pierwiastki równania kwadratowego o następujące elementy: Sprawdzanie czy istnieje rozwiązanie (delta>=0), jeśli nie to wyświetlić odpowiedni komunikat, Sprawdzanie czy istnieje tylko jedno rozwiązanie (delta=0), jeśli tak to wyświetlić tylko jeden pierwiastek, Sprawdzanie czy iloczyn 2*a w mianowniku wzoru na pierwiastki równania, jest równy 0, jeśli tak to wyświetlić informację o tym, iż nie jest to równanie kwadratowe.
Operatory PO Podstawowe operatory arytmetyczne +,-,*,/ Operator przypisania = Operatory porównania <,>,>=,<=,== Przykład: if (liczba==10) cout << ”Ta liczba to 10”; Operator modulo (reszta z dzielenia) % if (liczba%10==0) cout << ”Ta liczba jest podzielna przez 10”;
Instrukcja warunkowa switch (1) PO Instrukcja warunkowa switch (1) Switch jest instrukcją warunkową podobną do instrukcji if. Jednak zamiast wielokrotnie sprawdzać warunki dotyczące tej samej zmiennej, możemy uprościć zapis w następujący sposób: switch (zmienna) { case wartosc1 : instrukcja1; break; case wartosc2 : instrukcja2; …. case wartoscN : instrukcjaN; break; default : instrukcja_domyslna; }
Instrukcja warunkowa switch (2) PO Instrukcja warunkowa switch (2) Idea działania instrukcji switch jest następująca: - na początku określana jest wartość zmiennej, - w zależności od wartości zmiennej (wartosc1, wartosc2, …, wartoscN) wybierana jest jedna z instrukcji (instrukcja1 dla wartosci1, instrukcja2 dla wartosci2, …, instrukcjaN dla wartosciN), - instrukcja break powoduje zakończenie wykonywania instrukcji switch, powinno się ją stosować po zakończeniu definiowania instrukcji dla każdego przypadku wartości. Jeżeli tego nie zrobimy to wykonywane będą wszystkie instrukcje poniżej danego przypadku case aż do wystąpienia instrukcji break albo zakończenia bloku switch, - opcja default określa zachowanie domyślne, wykonywane wtedy, gdy żaden z przypadków (case) nie odpowiada aktualnie określonej wartości, - używane wartości wyboru mogą być typu całkowitego lub znakowego.
Instrukcja warunkowa switch (3) PO Instrukcja warunkowa switch (3) Przykład: char znak; cout << ”Podaj znak (m,n,o): ”; cin >> znak; switch (znak) { case ‘m’ : cout << ”Nacisnales M jak Marta”; break; case ‘n’ : cout << ”Nacisnales N jak Natalia”; case ‘o’ : cout << ”Nacisnales O jak Ola”; default : cout << ”Tego znaku nie rozpoznaje”; }
Instrukcja warunkowa switch (4) PO Instrukcja warunkowa switch (4) To samo moglibyśmy zrealizować za pomocą ciągu instrukcji warunkowych if. char znak; cout << ”Podaj znak (m,n,o): ”; cin >> znak; if (znak==‘m’) cout << ”Nacisnales M jak Marta”; else if (znak==‘n’) cout << ”Nacisnales N jak Natalia”; else if (znak==‘o’) cout << ”Nacisnales O jak Ola”; else cout << ”Tego znaku nie rozpoznaje”;
PO Ćwiczenia (III) Napisać program, który prosi o podanie dwóch liczb i sprawdza czy pierwsza jest podzielna przez drugą (wykorzystać operator modulo %), Napisać program, który po podaniu oceny (1-6) wyświetli jej nazwę w postaci tekstu np. (5-bardzo dobry) (wykorzystać instrukcję switch !!!),