Informatyka 2. Wykład nr 2 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Podobne dokumenty
Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Informatyka 2. Informatyka 2. Wykład nr 1 ( ) Dane podstawowe. - Wydział Elektryczny. Politechnika Białostocka. Program wykładu (1/2)

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny

Informatyka 2. Wykład nr 5 ( ) Plan wykładu nr 5. Politechnika Białostocka. - Wydział Elektryczny. Odwrotna notacja polska.

Informatyka 2. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Podstawy informatyki 2

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Język C++ Różnice między C a C++

dr inż. Jarosław Forenc

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

Podstawy Programowania Obiektowego

Podstawy programowania skrót z wykładów:

Struktury Struktura polami struct struct struct struct

Wstęp do programowania. Wykład 1

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Podstawy Programowania

C++ wprowadzanie zmiennych

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Część 4 życie programu

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Przekazywanie argumentów wskaźniki

Programowanie komputerowe. Zajęcia 1

Programowanie - wykład 4

Operacje wejścia/wyjścia odsłona pierwsza

Deklaracja struktury w C++

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wstęp do programowania

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

Dziedziczenie jednobazowe, poliformizm

ZASADY PROGRAMOWANIA KOMPUTERÓW

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Struktury danych: stos, kolejka, lista, drzewo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Wstęp do programowania

Spis treści PROGRAMOWANIE OBIEKTOWE W JĘZYKU C++: KLASY I OBIEKTY, DANE I FUNKCJE SKŁADOWE, PRAWA DOSTĘPU, KONSTRUKTORY I DESTRUKTORY.

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Laboratorium 1 - Programowanie proceduralne i obiektowe

dr inż. Paweł Myszkowski Wykład nr 11 ( )

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Programowanie 2. Język C++. Wykład 3.

Podstawy programowania w C++

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Języki i metodyka programowania. Wprowadzenie do języka C

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Wykład 8: klasy cz. 4

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Zmienne, stałe i operatory

C-struktury wykład. Dorota Pylak

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Przesłanianie nazw, przestrzenie nazw

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

I - Microsoft Visual Studio C++

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

void Pobierz(Student &a); void Wypisz(Student a); void Ustaw_zaliczenia(Student t[],int r); void Wypisz_najlepszych(Student t[],int r, float prog);

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

1. Wypisywanie danych

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

1 Podstawy c++ w pigułce.

Programowanie i struktury danych

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

1 Podstawy c++ w pigułce.

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Wyjątki (exceptions)

Algorytmy i Struktury Danych.

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

Spis treści OPERACJE WEJŚCIA-WYJŚCIA W JĘZYKU C++. STEROWANIE FORMATEM, MANIPULATORY. Informatyka 2

dr inż. Jarosław Forenc

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Wykład 5: Klasy cz. 3

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Transkrypt:

Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2008/2009 Wykład nr 2 (22.10.2008)

Rok akademicki 2008/2009, Wykład nr 2 2/40 Plan wykładu nr 2 Dynamiczne struktury danych przykład zastosowania stosu - notacja polska i odwrotna notacja polska kolejka lista (jednokierunkowa, dwukierunkowa, cykliczna) drzewo (binarne) Operacje wejścia/wyjścia w C++ Programowanie proceduralne i obiektowe Programowanie obiektowe w języku C++ definicja klasy, składniki klasy: dane i funkcje prawa dostępu do składników klasy definiowanie funkcji składowych wewnątrz i poza klasą

Rok akademicki 2008/2009, Wykład nr 2 3/40 Notacja polska notacja polska (zapis przedrostkowy, Notacja Łukasiewicza) jest to sposób zapisu wyraŝeń arytmetycznych, podający najpierw operator, a następnie argumenty wyraŝenie arytmetyczne: 4 / (1 + 3) ma w notacji polskiej postać: / 4 + 1 3 wyraŝenie w notacji polskiej nie wymaga nawiasów, poniewaŝ przypisanie argumentów do operatorów wynika wprost z ich kolejności w zapisie notacja polska jest bliska naturalnemu sposobowi wyraŝania działań, w którym zazwyczaj najpierw podaje się czynność, a następnie dopełnia wyraŝenia wskazaniem rzeczy, do których czynność się odnosi, np. podziel cztery przez sumę jednego i trzech notację polską przedstawił w 1920 roku polski matematyk Jan Łukasiewicz zapis wyraŝeń w notacji polskiej stał się podstawą języków: Logo, Tcl i LISP notacja polska była podstawą opracowania tzw. odwrotnej notacji polskiej

Rok akademicki 2008/2009, Wykład nr 2 4/40 Odwrotna notacja polska odwrotna notacja polska - ONP (ang. Reverse Polish Notation, RPN) jest sposobem zapisu wyraŝeń arytmetycznych, w którym znak wykonywanej operacji umieszczany jest po argumentach, a nie pomiędzy nimi jak w konwencjonalnym zapisie algebraicznym wyraŝenie arytmetyczne: (1 + 3) / 2 ma w odwrotnej notacji polskiej postać: 1 3 + 2 / ONP została opracowana przez australijskiego naukowca Charlesa Hamblina jako odwrócenie beznawiasowej notacji polskiej Jana Łukasiewicza na potrzeby zastosowań informatycznych zapis wyraŝenia w ONP pozwala na całkowita rezygnację z uŝycia nawiasów w wyraŝeniach, gdyŝ jednoznacznie określa kolejność wykonywania działań ONP uŝywana jest w niektórych językach programowania (FORTH, Postscript) oraz w kalkulatorach naukowych HP: programy komputerowe kompilujące program analizują wyraŝenie arytmetyczne i przekształcają je na ciąg instrukcji odpowiadający odwrotnej notacji polskiej otrzymane wyraŝenie obliczane jest podczas wykonywania programu

Rok akademicki 2008/2009, Wykład nr 2 5/40 Odwrotna notacja polska obliczenie wartości wyraŝenia arytmetycznego przy zastosowaniu odwrotnej notacji polskiej wymaga wykonania dwóch operacji: zamiany notacji konwencjonalnej (nawiasowej) na odwrotną notację polską obliczenia wartości wyraŝenia arytmetycznego zapisanego w odwrotnej notacji polskiej oba powyŝsze algorytmy są bardzo proste i wykorzystują stos Zamiana wyraŝenia z notacji konwencjonalnej na ONP: zamiana wykonywana jest przy zastosowaniu algorytmu Dijkstry nazywanego stacją rozrządową czytając wyraŝenie arytmetyczne od strony lewej do strony prawej operatory odkładamy na stos a liczby na wyjście wyjście naleŝy traktować jako kolejkę, która po zakończeniu algorytmu będzie zawierała wyraŝenie w odwrotnej notacji polskiej

Rok akademicki 2008/2009, Wykład nr 2 6/40 Odwrotna notacja polska Zamiana wyraŝenia z notacji konwencjonalnej na ONP: wykonując powyŝsze operacje trzeba stosować następujące reguły: operator moŝemy odłoŝyć na stos tylko wtedy, jeśli ostatnim elementem stosu jest operator o niŝszym priorytecie jeŝeli ma on wyŝszy lub równy priorytet to zdejmujemy ze stosu dotąd elementy i wysyłamy na wyjście, aŝ ostatni operator będzie miał niŝszy priorytet lub stos będzie pusty jeśli kolejnym elementem jest nawias otwierający (, to odkładamy go na stos, bez względu na to co znajduje się w danym momencie na stosie i bez względu na to czy stos jest pusty powyŝszy nawias traktujemy jak dno stosu i odczytujemy kolejne elementy wyraŝenia według standardowego algorytmu jeśli dojdziemy do nawiasu zamykającego ), to nigdzie go nie odkładamy, tylko zdejmujemy kolejne operatory ze stosu i wysyłamy na wyjście, aŝ dojdziemy do nawiasu otwierającego, który równieŝ zdejmujemy ze stosu i wysyłamy na wyjście jeśli dojdziemy do końca wyraŝenia arytmetycznego, to zdejmujemy ze stosu pozostałe operatory i wysyłamy je na wyjście

Rok akademicki 2008/2009, Wykład nr 2 7/40 Odwrotna notacja polska Zamiana wyraŝenia z notacji konwencjonalnej na ONP - przykład: równanie w notacji konwencjonalnej: (2+1)*3-4*(7+4) Krok 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Wejście ( 2 + 1 ) * 3-4 * ( 7 + 4 ) Koniec Stos ( NULL ( NULL + ( NULL + ( NULL * NULL * NULL - NULL - NULL * - NULL ( * - NULL ( * - NULL + ( * - NULL + ( * - NULL * - NULL - NULL równanie w ONP: 2 1 + 3 * 4 7 4 + * - NULL NULL Wyjście 2 1 + 3 * 4 7 4 + * -

Rok akademicki 2008/2009, Wykład nr 2 8/40 Odwrotna notacja polska Obliczenie wartości wyraŝenia arytmetycznego w ONP: w algorytmie obliczania wartości wyraŝenia arytmetycznego zapisanego w odwrotnej notacji polskiej wykonujemy następujące operacje: pobieramy kolejny element wyraŝenia jeśli elementem jest liczba to odkładamy ją na stos jeśli elementem jest operator, to pobieramy ze stosu tyle liczb, aby moŝna było zastosować operator na tych liczbach, np. dla dodawania, odejmowania, mnoŝenia i dzielenia są to dwie kolejne liczby, zaś dla negacji - jedna liczba wykonujemy operację na liczbach i jej wynik odkładamy na stos jeśli dotrzemy do końca wyraŝenia, to pobieramy wynik ze stosu, który jest wartością wyraŝenia arytmetycznego jeśli nie ma jeszcze końca, to wracamy na początek algorytmu Uwaga: jeśli np. stos ma postać: 2 4 NULL i mamy wykonać operację dzielenia /, to operacja ta ma postać: 4 / 2, czyli do wykonania operacji argumenty brane są w odwrotnej kolejności

Rok akademicki 2008/2009, Wykład nr 2 9/40 Odwrotna notacja polska Obliczenie wartości wyraŝenia arytmetycznego w ONP - przykład: równanie w ONP: 2 1 + 3 * 4 7 4 + * - Krok 1 2 3 4 5 6 7 8 9 10 11 12 Wejście 2 1 + 3 * 4 7 4 + * - Koniec Stos 2 NULL 1 2 NULL 3 NULL 3 3 NULL 9 NULL 4 9 NULL 7 4 9 NULL 4 7 4 9 NULL 11 4 9 NULL 44 9 NULL -35 NULL NULL Działanie 2 + 1 3 * 3 7 + 4 4 * 11 9 44 wynik: -35 wynik: -35

Rok akademicki 2008/2009, Wykład nr 2 10/40 Kolejka kolejka (ang. queue) jest strukturą danych składającą się z liniowo uporządkowanych elementów, do której moŝna dołączać elementy tylko w jednym końcu (na końcu kolejki), a usuwać tylko w drugim końcu (na początku kolejki) kolejka często określana jest jako stos FIFO (ang. First In First Out - pierwszy wchodzi, pierwszy wychodzi) powiązanie między elementami kolejki jest takie samo, jak w przypadku stosu head jest wskaźnikiem na pierwszy element kolejki (początek kolejki), zaś tail - na ostatni element kolejki (koniec kolejki)

Rok akademicki 2008/2009, Wykład nr 2 11/40 Kolejka korzystając z poprzedniej analogii, stosu kartek, moŝemy powiedzieć, Ŝe kładziemy kartki na wierzchołku stosu, zaś wyjmujemy ze spodu kolejkę moŝna takŝe wyobraŝać sobie jako typową kolejkę sklepową podstawowe operacje dotyczące kolejki to: dołączenie elementu do kolejki - Insert() lub enqueue() usunięcie elementu z kolejki - Remove() lub dequeue() źródło: A. Zalewski: Programowanie w językach C i C++ z wykorzystaniem pakietu Borland C++

Rok akademicki 2008/2009, Wykład nr 2 12/40 Lista listą (liniową) nazywamy liniowo uporządkowany zbiór elementów, z którego w dowolnym miejscu moŝna usunąć element, jak równieŝ dołączyć nowy element sposób budowy listy jest ściśle uzaleŝniony od zamierzeń programisty elementy moŝna wstawiać do listy na początku, na końcu lub w dowolnym innym miejscu (np. w celu przechowywania elementów posortowanych) w zaleŝności od powiązań pomiędzy elementami wyróŝniamy listy: jednokierunkowe dwukierunkowe cykliczne, jednokierunkowe cykliczne, dwukierunkowe

Rok akademicki 2008/2009, Wykład nr 2 13/40 Lista jednokierunkowa organizacja listy jednokierunkowej podobna jest do organizacji stosu i kolejki, tzn. dla kaŝdego składnika (poza ostatnim) jest określony następny składnik (lub poprzedni - zaleŝnie od implementacji) zapamiętywany jest wskaźnik tylko na pierwszy element listy lub wskaźniki na pierwszy i ostatni element listy

Rok akademicki 2008/2009, Wykład nr 2 14/40 Lista dwukierunkowa w liście dwukierunkowej kaŝdy węzeł posiada adres następnika, jak i poprzednika w strukturze tego typu wygodne jest przechodzenie pomiędzy elementami w obu kierunkach (od początku do końca i odwrotnie)

Rok akademicki 2008/2009, Wykład nr 2 15/40 Lista cykliczna listę cykliczną moŝna utworzyć z listy jednokierunkowej lub dwukierunkowej, jeśli ostatni element tej struktury połączymy z pierwszym Jednokierunkowa: Dwukierunkowa:

Rok akademicki 2008/2009, Wykład nr 2 16/40 Drzewo drzewo jest najbardziej ogólną dynamiczną strukturą danych i moŝe być reprezentowane graficznie na róŝne sposoby korzeń drzewa jest umieszczony u góry skojarzone z korzeniem poddrzewa połączone są z korzeniem liniami zwanymi gałęziami drzewa potomkiem węzła w nazywamy kaŝdy, róŝny od w, węzeł naleŝący do drzewa, w którym w jest korzeniem węzeł w nazywamy przodkiem węzłów drzewa, w którym w jest korzeniem bezpośrednich potomków nazywamy synami bezpośrednich przodków nazywamy ojcami synów tego samego ojca nazywamy braćmi węzeł, który nie ma potomków, to liść drzewa

Rok akademicki 2008/2009, Wykład nr 2 17/40 Drzewo binarne drzewo binarne jest szczególnym przypadkiem ogólnej struktury zwanej drzewem kaŝdy wierzchołek drzewa ma co najwyŝej dwóch potomków, tzn. kaŝdy ojciec ma co najwyŝej dwóch synów

Rok akademicki 2008/2009, Wykład nr 2 18/40 Binarne drzewo wyszukiwawcze jest to drzewo binarne, w którym dla kaŝdego węzła w i wszystkie klucze (przechowywane wartości) w lewym poddrzewie węzła w i są mniejsze od klucza w węźle w i, a wszystkie klucze w prawym poddrzewie węzła w i są większe od klucza w węźle w i największą zaletą takiej struktury jest szybkość wyszukiwania informacji

Rok akademicki 2008/2009, Wykład nr 2 19/40 Operacje wejścia/wyj cia/wyjścia w języku j C++ operacje wejścia-wyjścia nie są zdefiniowane w języku C++ - umoŝliwiają je biblioteki standardowo dołączane przez producenta kompilatora: 1) biblioteka stdio (język C) 2) biblioteka stream (stara wersja iostream) 3) biblioteka iostream Strumienie: wprowadzanie i wyprowadzanie informacji moŝna potraktować jako strumień bajtów płynących od źródła do ujścia. strumienie w C++ realizowane są na zasadzie klas wykorzystanie strumieni wymaga dołączenia pliku nagłówkowego iostream #include <iostream> zamiast #include <stdio.h>

Rok akademicki 2008/2009, Wykład nr 2 20/40 Operacje wejścia/wyj cia/wyjścia w języku j C++ Strumienie: w języku C++ są cztery predefiniowane strumienie: cout cin cerr clog - związany ze standardowym urządzeniem wyjścia (ekran), skrót od ang. C-onsole OUT-put - związany ze standardowym urządzeniem wejścia (klawiatura), skrót od ang. C-onsole IN-put - związany ze standardowym urządzeniem, na które chce się wypisywać komunikaty o błędach (ekran) - strumień niebuforowany - związany ze standardowym urządzeniem, na które chce się wypisywać komunikaty o błędach (ekran) - strumień buforowany

Rok akademicki 2008/2009, Wykład nr 2 21/40 Operacje wejścia/wyj cia/wyjścia w języku j C++ Operatory << i >>: << - operator odpowiadający za wysyłanie informacji do strumienia, nazywany jest często operatorem insert - wstawienia (albo put to) >> - operator odpowiadający za wczytywanie informacji, nazywany jest operatorem ekstrakcji (extract operator) lub operatorem get from Przykłady: cout << x; cout << x << y; cout << x << " " << y; cin >> x; - wyświetlenie na ekranie wartości zmiennej x - wyświetlenie wartości dwóch zmiennych: x i y (bez znaku spacji między nimi) - wyświetlenie wartości dwóch zmiennych: x i y (ze spacją między nimi) - wczytanie informacji do zmiennej x operatory << i >> mają bardzo niski priorytet

Rok akademicki 2008/2009, Wykład nr 2 22/40 Program w języku j C++ Przykład: #include <iostream> int main() std::cout << "Witaj swiecie!" << std::endl; system("pause"); } std:: przed nazwami identyfikatorów cout i endl oznacza, Ŝe pochodzą one z biblioteki standardowej (dokładniej - pochodzą z tzw. przestrzeni nazw std) endl - przejście do nowego wiersza, odpowiada "\n" w języku C w celu uniknięcia ciągłego pisania std:: przed nazwami identyfikatorów umieszcza się w programie dyrektywę using: using namespace std;

Rok akademicki 2008/2009, Wykład nr 2 23/40 Program w języku j C++ Przykład (bez dyrektywy using): #include <iostream> int main() std::cout << "Witaj swiecie!" << std::endl; system("pause"); } Przykład (z dyrektywą using): #include <iostream> using namespace std; int main() cout << "Witaj swiecie!" << endl; system("pause"); }

Rok akademicki 2008/2009, Wykład nr 2 24/40 Techniki programowania Programowanie liniowe: instrukcje programu umieszczone są jedna za drugą, na górze jest początek programu, na dole - jego koniec wszystkie zmienne są globalne, brak jest zmiennych lokalnych bardzo często występują instrukcje skoku goto - z tego powodu analiza programu jest bardzo trudna przykład: język BASIC bez instrukcji GOSUB Programowanie proceduralne: w programie wyodrębnia się części realizujące pewne określone czynności (funkcje) napisanie programu polega na określeniu jakie funkcje będą potrzebne, następnie zdefiniowaniu ich i wymyśleniu najlepszego algorytmu ich wywołania wykonanie programu staje się zatem określoną sekwencją wywołań róŝnych funkcji w ramach funkcji moŝna definiować zmienne lokalne, ale dane występujące w programie nie są ze sobą powiązane przykład: język FORTAN

Rok akademicki 2008/2009, Wykład nr 2 25/40 Techniki programowania Programowanie z ukrywaniem danych: zastosowanie w programie struktur (rekordów) pozwalających grupować pod jedną nazwą elementy róŝnych typów dane, które są ze sobą powiązane w Ŝyciu są teŝ powiązane w programie Programowanie obiektowe: do zgrupowanych danych dodaje się metody postępowania z nimi (funkcje) danym zgrupowanym w obiekt nie mówi się jak mają coś zrobić, ale tylko co mają robić (jak mają coś zrobić wiedzą na podstawie swoich funkcji składowych) wada: poszczególne typy danych są sobie obce - jeśli funkcja jako argument moŝe przyjąć jeden typ danej, to nie moŝe innego; nowy typ oznacza konieczność pisania funkcji od początku Programowanie Obiektowo Orientowane (OO): technika obiektowa wzbogacona o dziedziczenie i polimorfizm (funkcje wirtualne) kod programu jest w stanie sam zorientować się z jakim obiektem pracuje Zaletą C++ jest moŝliwość stosowania dowolnej techniki programowania

Rok akademicki 2008/2009, Wykład nr 2 26/40 Techniki programowania program komputerowy opisuje (modeluje) w pewien sposób rzeczywistość w odniesieniu do sposobu definiowania przedmiotów występujących w rzeczywistości stosowane są dwa zasadnicze podejścia: Proceduralne: Obiektowe: tworzymy strukturę zawierającą parametry definiujące przedmiot i jego stan, a odseparowane funkcje określają jego właściwości dane definiujące przedmiot i metody (funkcje składowe) określające jego właściwości umieszczamy we wspólnym miejscu - klasie struct punkt int x,y; }; void rysuj(struct punkt p) // ciało funkcji } class PUNKT int x,y; public: void rysuj(void); };

Rok akademicki 2008/2009, Wykład nr 2 27/40 Struktury w języku j C struktura jest zestawem elementów róŝnych typów, zgrupowanych pod jedną nazwą, słuŝą zatem do reprezentacji złoŝonych obiektów róŝnych danych ogólna postać deklaracji struktury jest następująca: struct nazwa opis_pola_1; opis_pola_2;... opis pola_n; }; deklaracja struktury rozpoczyna się od słowa kluczowego struct, po którym moŝe występować opcjonalna nazwa struktury (etykieta struktury) pomiędzy nawiasami klamrowymi umieszczone są pola struktury (komponenty, składowe), mające taką samą postać jak deklaracje zmiennych w programie w deklaracji struktury muszą występować wszystkie nawiasy klamrowe i średniki

Rok akademicki 2008/2009, Wykład nr 2 28/40 Struktury w języku j C Przykłady: struct punkt int x; int y; }; struct osoba char imie[20]; char nazwisko[30]; int wiek; int wzrost,waga; }; struct int a,b,c; float d,e; }; pola jednego typu moŝna łączyć przecinkami nazwy pól struktury mogą być takie same jak nazwy innych zmiennych w programie, a nawet takie same jak nazwa struktury deklarując strukturę wprowadzamy nowy typ danych (np. struct punkt), którym moŝna posługiwać się tak samo jak kaŝdym innym typem standardowym

Rok akademicki 2008/2009, Wykład nr 2 29/40 Struktury w języku j C po klamrze kończącej listę pól struktury moŝe występować lista zmiennych, np. struct osoba char imie[20]; char nazwisko[30]; int wiek; } Kowalski, Nowak; - Kowalski i Nowak są zmiennymi typu struct osoba w przypadku deklaracji, po której nie występuje lista zmiennych, nie następuje przydział pamięci. Jeśli podana została nazwa struktury, to zmienne moŝna zadeklarować później, np. struct osoba char imie[20]; char nazwisko[30]; int wiek; }; struct osoba Kowalski, Nowak;

Rok akademicki 2008/2009, Wykład nr 2 30/40 Struktury w języku j C - odwołania do pól p l struktury dostęp do pól struktury moŝliwy jest dzięki konstrukcji typu: nazwa_struktury.nazwa_pola zapisanie wartości 25 do pola wiek zmiennej strukturalnej Kowalski ma postać: Kowalski.wiek = 25; operator kropki nazywany jest operatorem bezpośredniego wyboru pola w przypadku, gdy zmienna strukturalna jest wskaźnikiem, to do odwołania do pola struktury uŝywamy operatora pośredniego wyboru pola (->), np. struct osoba Nowak, *Nowak1; Nowak1 = &Nowak Nowak1 -> wiek = 25; lub (*Nowak1).wiek = 25; w ostatnim zapisie nawiasy są konieczne, gdyŝ operator. ma wyŝszy priorytet niŝ operator *

Rok akademicki 2008/2009, Wykład nr 2 31/40 Definicja klasy słowo kluczowe nazwa klasy class nazwa_typu // ciało klasy, czyli określenie z czego składa się klasa }; średnik zmienne powyŝszego typu nazywa się obiektami jeśli chcemy utworzyć obiekt powyŝszej klasy, to podobnie jak przy deklaracji innych zmiennych podajemy nazwę typu i nazwę obiektu: nazwa_typu x; nazwa_typu *y; - obiekt klasy nazwa_typu - wskaźnik na obiekty typu nazwa_typu Przykład: PUNKT x, *y;

Rok akademicki 2008/2009, Wykład nr 2 32/40 Składniki klasy - dane dane (dane składowe, pola, atrybuty) - oznaczają to samo co pola w strukturach Przykład: class osoba public: char imie[20]; char nazwisko[30]; int wiek; }; do danych w klasie odwołujemy się w taki sam sposób jak do pól struktury: obiekt.dana wskaźnik->dana osoba x,*y; x.wiek = 15; y = &x; y->wiek = 20;

Rok akademicki 2008/2009, Wykład nr 2 33/40 Składniki klasy - funkcje funkcje (funkcje składowe, metody) - są to funkcje operujące na danych składowych klasy Przykład: class osoba char imie[20]; char nazwisko[30]; int wiek; public: void zapisz(char *i, char *n, int w); }; do funkcji w klasie odwołujemy się w taki sam sposób jak do jej danych: obiekt.funkcja(argumenty) wskaźnik->funkcja(argumenty) osoba x,*y; x.zapisz( Jan, Kowalski,30); y = &x; y->zapisz( Adam, Kowalski,25); deklaracje danych i funkcji mogą być umieszczane w klasie w dowolnej kolejności niezaleŝnie od miejsca zdefiniowania składnika wewnątrz klasy - składnik znany jest w całej definicji klasy

Rok akademicki 2008/2009, Wykład nr 2 34/40 Prawa dostępu do składnik adników w klasy dla składników klasy (danych i funkcji) określa się trzy prawa dostępu: private (prywatne) oznacza, Ŝe funkcje i dane klasy dostępne są tylko z wnętrza klasy dla danych oznacza to, Ŝe tylko funkcje będące składnikami klasy mogą te dane odczytywać lub do nich coś zapisywać dla funkcji oznacza to, Ŝe mogą one zostać wywołane tylko przez inne funkcje składowe tej klasy (oraz tzw. funkcje zaprzyjaźnione) public (publiczne) komponenty publiczne są ogólnie dostępne, moŝna się do nich odwoływać z wnętrza klasy lub spoza klasy tak samo jak do pól struktur lub funkcji protected (zabezpieczone) dostęp jest taki sam jak dla private, ale dodatkowo są one dostępne dla klas wywodzących się od tej klasy (dziedziczenie)

Rok akademicki 2008/2009, Wykład nr 2 35/40 Prawa dostępu do składnik adników w klasy etykiety private, public, protected moŝna umieszczać w dowolnej kolejności, mogą one powtarzać się domyślnie wszystkie składowe są prywatne Przykład: class osoba char imie[20]; char nazwisko[30]; int wiek; public: int ocena; void zapisz(char *i, char *n); private: float wzrost; float waga; public: void wyswietl(); }; definicja klasy nie definiuje obiektu - nie przydziela więc pamięci w definicji klasy nie moŝna inicjować danych definiując kilka obiektów danej klasy w pamięci przydzielane jest miejsce dla wszystkich danych, natomiast funkcje są w pamięci tylko jeden raz funkcje składowe klasy mają dostęp do wszystkich jej danych i funkcji

Rok akademicki 2008/2009, Wykład nr 2 36/40 Definiowanie funkcji składowych wewnątrz klasy funkcja zdefiniowana wewnątrz klasy jest funkcją inline, tzn. Ŝe podczas kompilacji wszędzie tam, gdzie występuje wywołanie funkcji zostanie wstawiony jej kod Przykład: class osoba char imie[20]; char nazwisko[30]; int wiek; public: void zapisz(char *i, char *n, int w) strcpy(imie,i); strcpy(nazwisko,n); wiek = w; } void drukuj(void) cout << imie << " " << nazwisko; cout << " " << wiek << endl; } }; zaleca się, aby ciało funkcji zdefiniowanej wewnątrz klasy miało nie więcej niŝ dwie linijki kodu

Rok akademicki 2008/2009, Wykład nr 2 37/40 Definiowanie funkcji składowych poza klasą Przykład: class osoba char imie[20]; char nazwisko[30]; int wiek; public: void zapisz(char *i, char *n, int w); void drukuj(void); }; void osoba::zapisz(char *i, char *n, int w) strcpy(imie,i); strcpy(nazwisko,n); wiek = w; } deklaracje funkcji :: - operator zakresu, pokazuje do jakiej klasy naleŝy funkcja void osoba::drukuj(void) cout << imie << " " << nazwisko; cout << " " << wiek << endl; }

Rok akademicki 2008/2009, Wykład nr 2 38/40 Przykład nr 1 - program w języku j C++ (1/2) /* Name: klasa1.cpp Copyright: Politechnika Białostocka, Wydział Elektryczny Author: Jarosław Forenc (jarekf@pb.edu.pl) Date: 12-06-2007 Description: Przykład prostej klasy */ #include <iostream> #include <string.h> using namespace std; class osoba private: char imie[20]; char nazwisko[30]; int wiek; public: void zapisz(char *i, char *n, int w); void drukuj(); };

Rok akademicki 2008/2009, Wykład nr 2 39/40 Przykład nr 1 - program w języku j C++ (2/2) void osoba::zapisz(char *i, char *n, int w) strcpy(imie,i); strcpy(nazwisko,n); wiek = w; } Jan Kowalski 30 void osoba::drukuj() cout << imie << " " << nazwisko; cout << " " << wiek << endl; } int main() osoba os1; os1.zapisz("jan","kowalski",30); os1.drukuj(); } system("pause"); return 0;

Rok akademicki 2008/2009, Wykład nr 2 40/40 Koniec wykładu nr 2 Dziękuj kuję za uwagę!