PROGRAMOWANIE KOMPUTERÓW Tomasz BAJOREK dr inż., pok. 28 tbajorek@prz.rzeszow.pl tbajorek.prz.rzeszow.pl PROGRAMOWANIE KOMPUTERÓW sem. 3 5w. + 15 lab. sem. 4 5w. + 15 lab. tematyka: podstawy programowania (obiektowego) elementy j. ObjectPascal w systemie Delphi program laboratorium - reguły odbywania zajęć i zaliczenia DELPHI 7 Personal - darmowe, www.borland.pl literatura: S.Wołek - Programowanie komputerów cz.I., cz. II pliki wykładów + przykładów - w sieci tbajorek.prz.rzeszow.pl zaliczenie - bez egzaminu laboratorium – test praktyczny 1
Istota programowania komputerów tworzenie własnych programów Chcemy zapisać, co trzeba liczyć (przetwarzać) w sposób prosty, wygodny i zrozumiały dla człowieka Program komputerowy w PaO język programowania (wysokiego poziomu) język komputerowy (wewnętrzny) tłumaczenie (translacja) komputer język programowania - zbiór reguł zapisu algorytmu (operacji obliczeniowych) system programowania - edycja, tłumaczenie, wykonywanie, uruchamianie (debugging) 2
ułatwia opracowywanie programów Wniosek: podwójna rola komputera ułatwia opracowywanie programów wykonuje programy (obliczenia) 3
Podział języków programowania j. obiektowe j. proceduralne (klasyczne) 4
Przegląd języków programowania styl tekstowy (DOS-owy): FORTRAN PL-1, ALGOL, COBOL PASCAL, C, C++ MODULA, ADA pr. naturalne pr. strukturalne pr. pakietowe pr. obiektowe BASIC styl graficzny (Windows-owy): SMALLTALK DELPHI C obiektowy VisualBASIC języki skryptowe stron WWW: po stronie klienta - JavaScript po stronie serwera – VBScript (ASP), PHP 5
Programowanie obiektowe (OOP) Istota struktura programu: stosuje się rzeczywiste obiekty, przedstawiane przez dane (pola) operacje programu dotyczą obiektów (metody – operacje na polach) wykonywanie programu: sterowane zdarzeniami (event_driven) - naciśnięcie klawisza, kliknięcie myszką, wybranie opcji menu, przepełnienie dyskietki program nie jest sekwencyjnie wykonywany oczekiwanie na zdarzenie wystąpienie zdarzenia aktywizacja procedury obsługi (metody) realizacja wspomagana przez system operacyjny Windows 6
pochodna języka Pascal: System Delphi pochodna języka Pascal: zintegrowane środowisko tworzenia aplikacji IDE środowisko RAD język ObjectPascal przykład 1: dodajemy lub mnożymy dwie liczby sterowanie z menu przycisk koniec kolor tła wg przycisków radiowych kolor liczb wg przycisku wyboru 7
Modularna struktura programu składowe struktury: program główny (projekt) moduł (jednostka kompilowalna) – postać półskompilowana + łącznie - biblioteki podprogram (procedura, funkcja) 8
program, moduł - jednopoziomowy podprogram - hierarchiczny układ: program, moduł - jednopoziomowy podprogram - hierarchiczny struktura programu, modułu, podprogramu: - nagłówek - opis obiektów /część deklaracyjna, opisowa - zapis akcji /część operacyjna, akcyjna składowe: - deklaracje, definicje - instrukcje - komentarze - dyrektywy 9
ogólna struktura programu (modułu, podprogramu): unit nazwa; // nagłówek { inny dłuższy ................................................ komentarz } uses ... // deklaracja modułów const ... // definicja stałych type ... // definicja typów var ... // deklaracja zmiennych begin instrukcja_1; // operacje instrukcja_2; . . . end. część opisowa część akcyjna odwołania do składowych obiektów (właściwości, metody) - kwalifikowane Application.Terminate; Nadawca.Dane.Color := clGreen; Odbiorca.Wynik.Text := Nadawca.Dane.Text; Odbiorca.Wynik.Clear; 10
Narzędzia pakietu programowania – środowisko DELPHI Projektant formularzy dodawanie (usuwanie) komponentów graficznych z biblioteki VCL rozmieszczanie i zmiana rozmiarów komponentów: indywidualnie grupa komponentów (Shift + kliknięcie) lub kontur + menu kontekstowe Repertuar komponentów standardowe + dodatkowe okienka dialogowe dostęp + obsługa + raporty baz danych serwer i strony WWW Czynności projekt interfejsu – komponenty i ich właściwości (Inspektor obiektów) tworzenie kodu dla obsługi metod (Events) kompilacja i wykonanie (Run) - błędy 11
Inspektor obiektów wybór obiektu wskazanie w formularzu lista obiektów typy właściwości tekst (wpisywanie) wybór z listy właściwości strukturalne - rozwijanie lub okno ustawiania właściwości mnogościowe - rozwijanie składowych najważniejsze właściwości: - nazwa obiektu (dla operacji) - name - tytuł (nagłówek) - caption - kolor - color czcionka – font zawartość obsługa zdarzeń - nazwy procedur (tworzonych w edytorze): pierwsza 2 x kliknięcie obiektu inne 2 x kliknięcie w pozycję można wybierać z istniejących 12
Przykład: Edytor tekstu mechanizmy: wstawianie, usuwanie, wycinki, schowek zamiana na komentarz wspomaganie pisania (podpowiedzi) uzupełnianie tekstu (wstawianie nazwy) Ctrl+spacja : - po kropce - wybieranie tekstem lub wskazaniem koniec: kropka, spacja, Enter, średnik, nawias musi być poprawny początek wstawianie wzorców Ctrl+J podpowiedź o parametrach procedury/funkcji Ctrl+Shift+spacja przykład 2: przepisywanie z pola Edit do Memo 13
` Standardowe komponenty graficzne VCL Formularz (okno) - Form właściwości name: string - nazwa obiektu (formularza) caption: string - tytuł okna menu: - główne - obiekt popUpMenu: - kontekstowe - obiekt Przycisk akcji - Button właściwości name: string - nazwa obiektu (przycisku) caption: string - tytuł przycisku (&z - litera klawisza skrótu) zdarzenia i metody onClick - obsługa kliknięcia 14
Pole edycji jednowierszowej – Edit otrzymywanie lub wprowadzanie danych tekstowych pełna edycja informacji zaznaczanie wycinka tekstu i operacje właściwości (ważniejsze) text: string - treść wiersza zdarzenia i metody w. text := war_tekstowa - ustawienie (wpisanie) z. onClick - obsługa kliknięcia z. onChange - dowolna zmiana zawartości p. clear - wyzerowanie pola 15
Pole edycji wielowierszowej – Memo wartości wprowadzane z klawiatury lub programowo możliwość edycji wielowierszowej współpraca ze schowkiem właściwości: lines: Tstrings - cała lista wierszy lines[nr_w] - dostęp do wiersza (numeracja od 0) lines[nr_w] := wyr_tekstowe - zmiana treści wiersza lines.count: integer - liczba składowych listy 16
Przykłady: metody - dla lines : - p. clear; - zeruje - p. append( s: string ); - dodaje na koniec listy; - f. add( s: string ): integer; - podobnie wynik - nr wiersza (od 0) - p. insert( index: integer; s: string); - wstawia w pozycji index - p. delete( index: integer ); - usunięcie wiersza - p. loadFromFile( fileName: string ); - dopisanie z pliku tekstowego - p. saveToFile( fileName: string); - zapisanie do pliku Przykłady: Memo1.Lines.Add( 'Kowalski'); Memo1.Lines[2] := Edit1.Text; Memo1.Lines.Insert( 5, 'Kowalski‘ ); Memo1.Font.Size := 14; Memo1.Clear; 17
Język ObjectPascal - podstawowe elementy Alfabet języka symbole podstawowe (pascalowe) Słowa kluczowe nazwy zastrzeżone Identyfikatory (nazwy) ciąg liter (także _ ) lub cyfr, rozpoczynający się od litery, różny od słowa kluczowego Stałe numeryczne - liczby całkowite - ciąg cyfr, ewentualnie poprzedzonych przez + - rzeczywiste - zapis zwykły m.n - zapis wykładniczy (naukowy) 18
var lista_nazw_zmiennych: integer; lista_nazw_zmiennych: real; Zmienne całkowite i rzeczywiste (proste) Zmienne przechowują dane – muszą być deklarowane ich nazwy (identyfikatory) i przyporządkowanie do typu var lista nazw zmiennych: typ1; lista nazw zmiennych: typ2; ....; Postać deklaracji: var lista_nazw_zmiennych: integer; lista_nazw_zmiennych: real; np.: var i, j, k: integer; a, b, suma: real;
Typy standardowe Typy liczbowe całkowite: Integer i inne (Byte, Word...) rzeczywiste podstawowy Real i inne Single Double Extended, różnią się zakresem Typ znakowy: Char Typ tekstowy (łańcuchowy): String Typ logiczny: Boolean (wartości true i false)
Typy definiowane Typ wyliczeniowy Definicja: ( lista wartości ) np. var dzien : (po, wt, sr, cz, pi, so ,ni); Typ okrojony Typ okrojony wyznacza podzbiór dowolnego typu porządkowego (boolean, char, całkowitoliczbowy, wyliczeniowy) zwanego typem bazowym: w1 .. w2 gdzie w1 <= w2 var dni : 1..100; Inne (strukturalne) poznamy potem – tablicowy, rekordowy, plikowy
Typy można definiować a potem używać np. type dni = (po, wt, sr, cz, pi, so ,ni); var dzien : dni; UWAGA: dni to nazwa typu, dzien to nazwa zmiennej, tylko w niej można przechować wartości, np. dzien := wt; //to jest instrukcja wykonywana Typ okrojony Typ okrojony wyznacza podzbiór dowolnego typu porządkowego (boolean, char, całkowitoliczbowy, wyliczeniowy) zwanego typem bazowym: w1 .. w2 gdzie w1 <= w2 var dni : 1..100; Inne (strukturalne) poznamy potem – tablicowy, rekordowy, plikowy
Wyrażenie arytmetyczne Postać - sensowna kombinacja – podobnie jak w Excelu: argumenty: - stałe - ich wartości - zmienne - ich wartości - wywołania funkcji - ich wartości operatory - jednoargumentowe - dwuargumentowe nawiasy - kolejność operacji wyrażenie stała wyrażenie zmienna wyrażenie funkcja (wyrażenie) wyrażenie wyrażenie operator wyrażenie 23
Operatory: 24
kolejność wykonywania operacji nawiasy - w pierwszym rzędzie ważność operatorów: jednoargumentowe multiplikatywne addytywne w grupie jednakowo ważnych - od lewej do prawej funkcje standardowe - wywołanie nazwa_funkcji( argument ) wartość wyrażenie - rekurencja ogólnie: zawsze nawias typ argumentu i wyniku określony 25
zaokrąglenie do całkowitej abs real/integer wartość bezwzględna int real część całkowita frac część ułamkowa round integer zaokrąglenie do całkowitej trunc obcięcie do całkowitej maxint maksymalna wartość całkowita stała exp funkcja wykładnicza earg ln logarytm naturalny ln arg arg 0 sqr real integer kwadrat arg2 sqrt pierwiastek kwadratowy arg 0 sin sin arg arg w radianach cos cos arg arctan arctg arg wynik w radianach pi 26
Przykłady wyrażeń: 27
Podstawowe instrukcje proste Instrukcja przypisania - nadanie wartości zmiennej zmienna := wyrażenie; Np.: N := -234; suma := suma + x; Wprowadzanie i wyprowadzanie danych - z/do pola Edit funkcje konwersji tekstowo-numerycznej: intToStr( v: integer ): string; - integer string strToInt( s: string ): integer; - string integer strToFloat( s: string ): real; - string real floatToStr( v: real ): string; - real string 28
przykład praktyczny: 29
Stałe, zmienne i wyrażenia tekstowe stałe - znakowe i tekstowe napisy - pojedyncze znaki, ciągi (łańcuchy) znaków postać '.....' Przykłady: 'Nowak' stałę znakowe - typ char , np. 'A' zmienne łańcuchowe (tekstowe) - typ string np. 'Pan Kowalski' - deklaracja zmiennej string[ rozmiar ] istnieje mechanizm selekcji znaku zmienna[ pozycja ] znak wyrażenia tekstowe - podobnie jak arytmetyczne: argumenty: - stała tekstowa - zmienna znakowa lub tekstowa - wywołanie funkcji o wartości znakowej lub tekstowej operator - jeden łączenia (konkatenacji) "+" Np.: 'Object' + 'Pascal' ObjectPascal 30
Stałe, zmienne, wyrażenia i operacje logiczne stałe true prawda "1" tak false fałsz "0„ nie zmienne logiczne - typ boolean np.: var jest_zwolniony: boolean; wyrażenia logiczne - podobnie jak arytmetyczne: argumenty: - stałe logiczne - zmienne logiczne - funkcje o wartościach logicznych - relacje nawiasy - ( ) operatory 31
Np.: k > 2 suma <= 10.0 sin( 2*x + a) >= 0.5 relacja (porównanie) W1 W2 wartość true | false W1, W2 obydwa numeryczne (typu Real lub Integer) obydwa znakowe lub tekstowe (porównanie alfabetyczne) operator znaczenie = równy <> nierówny > większy >= większy lub równy < mniejszy <= mniejszy lub równy Np.: k > 2 suma <= 10.0 sin( 2*x + a) >= 0.5 nazwisko >= 'K' 32
Operatory logiczne negacja not arg np.: not( k<5 ) k >= 5 koniunkcja (iloczyn logiczny) arg1 and arg2 np.: ( k >= -5 ) and ( k <= 5 ) -5 k +5 alternatywa (suma logiczna) arg1 or arg2 np.: ( k < -5 ) or ( k > 5 ) | k | > 5 33
Instrukcja warunkowa "jeśli", "if" postać skrócona if warunek then instrukcja; Wb postać pełna if warunek then instrukcja_1 else instrukcja_2; 34
- zmiana a, b lub c chowa pola wyników i napis przykład: Założenia: - zmiana a, b lub c chowa pola wyników i napis - gdy delta < 0 tylko napis "Wynik - brak pierwiastków" - gdy delta = 0 napis "Wynik - jeden pierwiastek podwójny" widać jedno pole wyniku i wartość pierwiastka - gdy delta > 0 napis "Wynik - dwa pierwiastki" widać dwa pola wyniku i dwie wartości pierwiastków - podwójne kliknięcie w tło okna zeruje pola współczynników, chowa pola wyników i skraca napis na "Wynik:" 35
składowe okna i programu: - w_a, w_b, w_c - pola współczynników - wynik - etykieta - tekst o wyniku - x1, x2 - pola wyniku - a, b, c, delta - zmienne wewnętrzne procedury wyznaczania wyniku - wyznacz, koniec - procedury obsługi kliknięcia przycisków - Zeruj - obsługa podwójnego kliknięcia w okno - Schowaj, - obsługa zmiany wartości pól współczynników 36
schemat blokowy: 37
procedure TForm1.wyznaczClick(Sender: TObject); var a, b, c, // współczynniki równania delta: real; begin a := strToFloat(w_a.text); b := strToFloat(w_b.text); c := strToFloat(w_c.text); delta := b*b - 4*a*c; if delta < 0 then form1.wynik.Caption := 'Wynik - brak pierwiastków' else if delta = 0 then begin form1.wynik.Caption := 'Wynik - pierwiastek podwójny'; x1.text := floatToStr( -b/2/a ); x1.visible := true; end else begin delta := sqrt( delta ); form1.wynik.Caption := 'Wynik - dwa pierwiastki:'; x1.text := 'x1 = ' + floatToStr( ( -b - delta )/2/a ); x2.text := 'x2 = ' + floatToStr( ( -b + delta )/(2*a) ); x2.visible := true; end; 38
procedure TForm1.Schowaj (Sender: TObject); begin procedura Schowaj procedure TForm1.Schowaj (Sender: TObject); begin x1.Visible := false; x2.Visible := false; wynik.Visible := false end; procedura Zeruj procedure TForm1.Zeruj (Sender: TObject); begin Schowaj(Sender); w_a.Clear; w_b.Clear; w_c.Clear; end; 39
Instrukcja wyboru – case..of.. Instrukcja case umożliwia alternatywne wykonanie wielu instrukcji w zależności od wartości wyrażenia typu porządkowego. Postać instrukcji: case w of s1 :Instrukcja_1 ; s2 :Instrukcja_2 ; .... [ else Instrukcja_k ] end ; w - wyrażenie–selektor typu porządkowego (np. całkowitego, znakowego), s - stałe wyboru (etykiety wyboru) w możliwej postaci: s - pojedyncza wartość, s1, s2, sn - lista wartości, s1..s2 - zakres wartości (okrojenie), możliwe połączenie listy i zakresów, np. s1..s2, s3 , s4. 40
Przykład: var miesiac : 1..12 ; dni : 1..31 ; begin miesiac := StrToInt (Edit1.Text) ; case miesiac of 2 : dni := 28 ; {pojedyncza wartość} 4, 6 , 9, 11 : dni := 30 ; {lista} 1..12 : dni := 31 ; {zakres} {lub else dni := 31} end ; end; 41
begin end Instrukcja złożona (sekwencji) Przy konieczności wykonania więcej niż jednej instrukcji wewnątrz dowolnej instrukcji strukturalnej stosujemy tzw. instrukcję złożoną (sekwencji): begin ciąg instrukcji end
Iteracje Iteracje – użycie: sumowanie, obliczenia statystyczne, sortowanie, wyszukiwanie maksimum, minimum itp. Algorytmy: Zbiór elementów np. w tablicy (macierzy) – wyszukaj najmniejszy element: - załóż że 1-szy jest najmniejszy - sprawdź następny, jeśli mniejszy to zapamiętaj - czy ostatni? jeśli nie to powtórz poprzedni krok
Instrukcja for.. do.. (dla.. wykonuj..)
to downto for Z := W1 W2 do Instrukcja Postać: x := 0 ; i1:=1 ; for i := i1 to i2 do x := x+5 ; x := 0 ; for i := 1 to 3 do x := x+5 ; x := 0 ; for i := 3 downto 1 do x := x+i ; // użycie zmiennej sterującej w instrukcji
repeat until WB ; ciąg instrukcji x := 3 ; repeat x := x + 5 Instrukcja repeat..until.. (powtarzaj .. aż..) Postać: repeat ciąg instrukcji until WB ; Ciąg instrukcji wewnętrznych w instrukcji repeat..until.. jest powtarzany dopóty, dopóki wyrażenie logiczne WB posiada wartość false, zmiana na true powoduje zakończenie pętli x := 3 ; repeat x := x + 5 until x > 100 ; Uwaga: możliwość nieskończonej pętli !!
while WB do Instrukcja ; Instrukcja while..do.. (dopóki.. wykonuj..) Postać: while WB do Instrukcja ; Działanie instrukcji polega na powtarzaniu wykonywania wewnętrznej instrukcji, dopóki wyrażenie logiczne WB posiada wartość true. Wartość ta jest sprawdzana każdorazowo przed wykonaniem instrukcji wewnętrznej. Uwaga: konieczność wykonania w instrukcji (także złożonej) takiej operacji, która wpływa na wartość wyrażenia logicznego, aby iteracja mogła się kiedyś skończyć.
Przykład: var i, suma : integer ; begin i := 2 ; suma := 0 ; while i <= 100 do suma := suma + i ; i := i + 2 ; end ;
DELPHI - PODOKNA KOMUNIKATÓW ShowMessage - komunikat informujący związane są z osobnymi oknami przekazują informację dla użytkownika, wymagającą podjęcia przez niego decyzji: - komunikat informujący - komunikat z dialogiem komunikat w formularzu użytkownika dialogu wejściowego ShowMessage - komunikat informujący p. ShowMessage( wyrażenie tekstowe ) - pokazuje tekst w dodatkowym oknie z przyciskiem OK - w pasku tytułowym nazwa aplikacji (programu .exe) 49
Menu główne mainMenu właściwości zasady: przedstawia pasek menu głównego - baza dla pozycji menu (sekcji) komponent niewidoczny - widać skutek nazwa obiektu ma być podana na jako właściwość menu formularza właściwości item - lista sekcji menu z ich zawartością (drzewo) items[ index:integer ]: TMenuItem - jedna sekcja lub opcja zasady: 2x kliknięcie w items lub w symbol menu kreator menu (menu designer) dodawanie, usuwanie opcji tytuł sekcji (opcji) - & oznacza znak podkreślony (klawisz skrótu) podmenu create submenu (operacja z menu podręcznego) 2x klik w pozycję procedura obsługi (zdarzenie onClick) 50
Menu podręczne kontekstowe popupMenu pole menu kontekstowego - aktywizowanego prawym kliknięciem komponent niewidoczny - widać skutek nazwa obiektu ma być podana na jako właściwość popupMenu - formularza lub innego komponentu właściwości i metody items: Tmenu - lista sekcji menu z ich zawartością (drzewo) items[ index:integer ]: TMenuItem - jedna opcja lub podsekcja alignment: (paLeft, paCenter, paRight) - położenie pola menu w stosunku do kursora zasady: projektowanie jak menu główne menu designer w formularzu może być wiele menu podręcznych związanych z różnymi komponentami (kontekst) 51
Przykład 3 52