PODSTAWY PROGRAMOWANIA

Podobne dokumenty
Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Delphi Laboratorium 3

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Język programowania PASCAL

Programowanie w Turbo Pascal

PODSTAWY PROGRAMOWANIA

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Podstawy Programowania C++

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

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Programowanie w języku Python. Grażyna Koba

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Pascal - wprowadzenie

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

Wstęp do programowania. Różne różności

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

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

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

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

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Zasady Programowania Strukturalnego

Procedury i funkcje - powtórzenie i uzupełnienia. Przykład funkcji potęgowanie przy wykładniku naturalnym

Wykład 8: klasy cz. 4

PODSTAWY PROGRAMOWANIA

Programowanie w języku C++ Grażyna Koba

Ada-95. Dariusz Wawrzyniak

Zapis algorytmów: schematy blokowe i pseudokod 1

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Pętle. Dodał Administrator niedziela, 14 marzec :27

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

Lab 9 Podstawy Programowania

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Wstęp do programowania

Wprowadzenie do języka Pascal

Wykład PASCAL - Pliki tekstowe

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

OPERACJE NA PLIKACH. Podstawowe pojęcia:

PARADYGMATY PROGRAMOWANIA Wykład 4

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

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

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Podstawy programowania

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

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

1 Podstawy c++ w pigułce.

Pliki. Operacje na plikach w Pascalu

Wykład 5: Klasy cz. 3

Materiały do laboratorium MS ACCESS BASIC

1 Podstawy c++ w pigułce.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

ForPascal Interpreter języka Pascal

Warsztaty dla nauczycieli

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Podstawy programowania

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

Algorytm. a programowanie -

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Bloki anonimowe w PL/SQL

ZASADY PROGRAMOWANIA KOMPUTERÓW

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Cw.12 JAVAScript w dokumentach HTML

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

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

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Wykład 4: Klasy i Metody

Wprowadzenie komentarzy do programu

Podstawy programowania - 1

Ćwiczenie 2 Wczytywanie i zapisywanie do plików tekstowych

Podstawy programowania. Podstawy C# Tablice

Podstawy Programowania

Algorytmika i Programowanie VBA 1 - podstawy

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Zapis programu z wykorzystaniem modułu (Podstawy Delphi 2.1, 2.2, 2.3 str11 )

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

PODSTAWY PROGRAMOWANIA

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Wstęp do programowania 2

TEMAT : KLASY DZIEDZICZENIE

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Transkrypt:

PODSTAWY PROGRAMOWANIA Andrzej Marciniak Prezentacja multimedialna przygotowana za pomocą systemu Corel Presentations X3 Copyright 2003-2016 by Andrzej Marciniak PP-7(1 z 84)

Na poprzednim wykładzie... Pwyrażenia < rodzaje operatorów i ich priorytet < składnia wyrażenia < wyrażenia stałe < przeciążanie operatorów P instrukcje < instrukcje proste (przypisania, skoku i pusta) < instrukcje strukturalne (złożona i warunkowe) PP-7(2 z 84)

Na tym wykładzie... Pinstrukcje (cd.) < instrukcje strukturalne (iteracyjne, wiążąca, obsługi warunków i stanów wyjątkowych) < instrukcja asemblerowa Pfunkcje i procedury < definicje funkcji i procedur < rodzaje parametrów PP-7(3 z 84)

Instrukcje iteracyjne Służą do organizowania cykli programowych, tj. wielokrotnego wykonywania pewnych sekwencji instrukcji. W języku Delphi występują trzy instrukcje iteracyjne: Pinstrukcja dla (mająca trzy postacie), Pinstrukcja dopóki, Pinstrukcja powtarzaj. PP-7(4 z 84)

Instrukcja dla Stosuje się ją zwykle w celu wykonania pewnej grupy instrukcji w przypadku, gdy liczba powtórzeń jest znana w danym miejscu programu. Dwie pierwsze postacie są następujące: for zmienna:=wyrażenie-1 to wyrażenie-2 do instrukcja lub for zmienna:=wyrażenie-1 downto wyrażenie-2 do instrukcja PP-7(5 z 84)

Instrukcja dla Zmienna, zwana zmienną sterującą, musi być identyfikatorem typu porządkowego (bez jakiegokolwiek kwalifikatora) i powinna być lokalna w bloku zawierającym daną instrukcję dla. for zmienna:=wyrażenie-1 to wyrażenie-2 do instrukcja lub for zmienna:=wyrażenie-1 downto wyrażenie-2 do instrukcja PP-7(6 z 84)

Instrukcja dla schemat działania instrukcji dla PP-7(7 z 84)

Przykłady Instrukcje Instrukcja dla Obliczenie sumy wszystkich ujemnych liczb typu ShortInt można zrealizować następująco: suma:=0; for i:=!128 to!1 do suma:=suma+i; lub za pomocą instrukcji suma:=0; for i:=!1 downto!128 do suma:=suma+i; Zmienna suma nie może być przy tym typu ShortInt, Byte, Word, LongWord, UInt64 lub Cardinal. PP-7(8 z 84)

Przykłady Instrukcja dla Instrukcja for k:=1 to 10 do begin k:=k+1; Writeln (k) end; jest błędna (dlaczego?). PP-7(9 z 84)

Przykłady Instrukcja dla Instrukcja for k:=1 to 10 do begin k:=k+1; Writeln (k) end; jest błędna (dlaczego?). Wewnątrz pętli nie może występować zmiana wartości zmiennej sterującej k (błąd ten zostanie zasygnalizowany podczas kompilacji). PP-7(10 z 84)

Instrukcja dla Przykłady Instrukcje wchodzące w skład instrukcji dla postaci j:=5; for i:=1 to j do begin j:=j+2; Writeln (i,, j) end; zostaną wykonane tylko pięć razy (pomimo zwiększania wartości j wewnątrz pętli). Dlaczego? PP-7(11z 84)

Instrukcja dla Przykłady Instrukcje wchodzące w skład instrukcji dla postaci j:=5; for i:=1 to j do begin j:=j+2; Writeln (i,, j) end; zostaną wykonane tylko pięć razy. Jest to spowodowane faktem, że obliczenie górnej granicy zmiennej sterującej następuje w chwili rozpoczęcia wykonywania pętli i później wartość ta nie jest zmieniana. Kolejno wypisywanymi wartościami będą: 1 7 2 9 3 11 4 13 5 15 PP-7(12 z 84)

Instrukcja dla Instrukcje iteracyjne mogą być zagnieżdżone, tzn. w obrębie jednej pętli może wystąpić jedna lub więcej kolejnych pętli. Kolejność przetwarzania zagnieżdżonych instrukcji iteracyjnych jest taka, że najbardziej wewnętrzna pętla wykonywana jest najczęściej. PP-7(13 z 84)

Przykład for i:=1 to 2 do for j:=1 to 3 do for k:=1 to 4 do a[i,j,k]:=i*j*k; Instrukcja dla Przypisanie odpowiednich wartości elementom tablicy a odbędzie się w kolejności: a[1,1,1], a[1,1,2], a[1,1,3], a[1,1,4], a[1,2,1], a[1,2,2], a[1,2,3], a[1,2,4], a[1,3,1], a[1,3,2], a[1,3,3], a[1,3,4], a[2,1,1], a[2,1,2], a[2,1,3], a[2,1,4], a[2,2,1], a[2,2,2], a[2,2,3], a[2,2,4], a[2,3,1], a[2,3,2], a[2,3,3], a[2,3,4]. PP-7(14 z 84)

Instrukcja dla Trzecia postać instrukcji dla jest następująca: for element in kontener do instrukcja Stosuje się ją do wykonania iteracji po elementach zawartych w podanym kontenerze. Może nim być tablica statyczna lub dynamiczna (jedno- lub wielowymiarowa), łańcuch (ogólniej: wyrażenie łańcuchowe), zbiór (ogólniej: wyrażenie, którego wartością jest zbiór), kolekcja (pomijamy) lub rekord. PP-7(15 z 84)

Instrukcja dla Przykłady 1) Niech tablica A oraz zmienne k i x będą zadeklarowane następująco: var A : array [1..5] of Integer; k, x : Integer; Instrukcje (w programie tekstowym): for k:=1 to 5 do A[k]:=k; for x in A do Writeln (x); spowodują pojawienie się na ekranie napisów: 1 2 3 4 5 PP-7(16 z 84)

Instrukcja dla Przykłady 2) Niech dane będą dwa łańcuchy i zmienna znak opisane następująco: const łańcuch1 : AnsiString = Programuję w ; łańcuch2 : AnsiString = Delphi ; var znak : AnsiChar; Po wykonaniu instrukcji (w programie tekstowym): for znak in łańcuch1+łańcuch2 do Write (znak); Na ekranie pojawi się napis Programuję w Delphi PP-7(17 z 84)

Instrukcja dopóki Służy do opisywania iteracji ze sprawdzeniem warunku na początku i ma postać while wyrażenie do instrukcja Wyrażenie, które najczęściej jest wyrażeniem porównania, powinno w wyniku dawać wartość logiczną. Instrukcja jest wykonywana jest tak długo, jak długo wartością wyrażenia jest True (chyba że nastąpi z niej skok PP-7(18 z 84) przekazujący sterowanie na zewnątrz instrukcji dopóki ).

Instrukcja dopóki schemat działania instrukcji dopóki PP-7(19 z 84)

Przykłady k:=1; x:=0; while k<10 do begin x:=(x+k)/k; k:=k+1 end; Instrukcja dopóki Instrukcja dopóki zostanie wykonana dziewięć razy (dla k=1, 2,..., 9). PP-7(20 z 84)

Przykłady Instrukcja dopóki while k>0 do begin k:=k div 2; n:=k*k end; Liczba wykonań powyższej instrukcji dopóki zależy od wartości zmiennej k przed rozpoczęciem jej wykonywania. Jeśli np. początkowa wartość k wynosi 10, to instrukcja dopóki zostanie wykonana cztery razy (dla k=10, 5, 2 i 1). PP-7(21 z 84)

Instrukcja powtarzaj Służy do opisywania iteracji ze sprawdzeniem warunku na końcu i ma postać repeat instrukcja-1; instrukcja-2;... instrukcja-n until wyrażenie Wyrażenie powinno dawać w wyniku wartość logiczną. PP-7(22 z 84)

Instrukcja powtarzaj schemat działania instrukcji powtarzaj PP-7(23 z 84)

Przykłady repeat k:=i mod j; i:=j; j:=k until j=0; Liczba wykonań powyższej instrukcji powtarzaj zależy od początkowych wartości zmiennych i oraz j. Instrukcje Instrukcja powtarzaj Jeśli na przykład zmienne te przed rozpoczęciem wykonywania instrukcji powtarzaj będą miały wartości odpowiednio 20 i 3, to warunek j=0 zostanie spełniony po trzykrotnym wykonaniu wewnętrznych instrukcji przypisania. PP-7(24 z 84)

Przykłady Instrukcje Instrukcja powtarzaj repeat Write ( Podaj godzinę: ); Readln (godzina) until godzina in [0..24]; Powyższa instrukcja powtarzaj będzie wykonywana (w programie tekstowym) tak długo, aż nie zostanie wprowadzona (za pomocą procedury Readln) liczba całkowita należąca do zbioru liczb całkowitych od 0 do 24. Zauważmy, że po słowie until występuje tu porównanie teoriomnogościowe. PP-7(25 z 84)

Instrukcja wiążąca Do odwoływania się do poszczególnych pól rekordu lub pól, metod i własności obiektu służą desygnatory pól, metod i własności. Odwołania takie zwykle wydłużają tekst programu (modułu, biblioteki łączonej dynamicznie). Zastosowanie instrukcji wiążącej pozwala na wygodniejsze odwoływanie się do tych pól, metod i własności, a także zwiększa czytelność tekstu źródłowego. PP-7(26 z 84)

Instrukcja wiążąca Postać instrukcji jest następująca: with lista-zmiennych do instrukcja przy czym lista zmiennych zawiera oddzielone przecinkami identyfikatory zmiennych rekordowych lub obiektowych (typu klasowego). Umieszczenie zmiennej rekordowej lub obiektowej po słowie kluczowym with pozwala wewnątrz instrukcji wiążącej na odwoływanie się do pól, metod i własności za pomocą samych ich PP-7(27 z 84) identyfikatorów.

Instrukcja wiążąca Przyjmuje się, że instrukcja postaci with z1, z2,..., zn do instrukcja jest równoważna zagnieżdżonej instrukcji wiążącej postaci with z1 do with z2 do... with zn do instrukcja PP-7(28 z 84)

Przykłady Instrukcje Instrukcja wiążąca Załóżmy, że jest dana następująca deklaracja: var complex : record re, im : Extended end; Przypisania w instrukcji wiążącej with complex do begin re:=1; im:=1 end; są równoważne przypisaniom w instrukcji złożonej begin complex.re:=1; complex.im:=1 end; PP-7(29 z 84)

Przykłady Instrukcje Instrukcja wiążąca Przy definicji i deklaracji type odcinek : class x, y : Integer; procedure zaznacz (dx, dy : Integer); end; var segment : odcinek; przypisania i wywołanie metody zaznacz mogą mieć postać with segment do begin x:=5; y:=10; zaznacz (15, 25) end; PP-7(30 z 84)

Instrukcje obsługi warunków i stanów wyjątkowych Warunkiem i (lub) stanem wyjątkowym nazywamy wystąpienie błędu lub innego zdarzenia, które przerywa normalne wykonywanie programu. Prawidłowa obsługa warunków i stanów wyjątkowych w programie (module, bibliotece łączonej dynamicznie) pozwala na podniesienie jego niezawodności i uczynienie go bardziej odpornym na ewentualne błędy wykonania. W języku Delphi warunki i stany wyjątkowe są reprezentowane przez typy klasowe. Obsługę błędów, które normalnie powodują przerwanie wykonywania programu, zapewnia moduł System.SysUtils. PP-7(31 z 84)

Instrukcje obsługi warunków i stanów wyjątkowych Z obsługą warunków i stanów wyjątkowych są związane trzy instrukcje: Pwywoływania stanów wyjątkowych (raise), Ptry...except, Ptry...finally. PP-7(32 z 84)

Instrukcja wywoływania stanów wyjątkowych Może mieć trzy różne postacie: raise stan-wyjątkowy raise stan-wyjątkowy at adres lub raise Stan wyjątkowy oznacza tu obiekt (wyrażenie typu klasowego). Na ogół nie podaje się w tym miejscu zmiennej typu klasowego, lecz wywołuje konstruktor odpowiedniego typu klasowego reprezentującego warunek lub stan wyjątkowy. Wywołanie warunku powoduje utworzenie obiektu-warunku, jego obsługę, a następnie automatyczne usunięcie tego PP-7(33 z 84) obiektu-warunku za pomocą jego destruktora.

Instrukcja wywoływania stanów wyjątkowych Po wykonaniu instrukcji raise występującej w instrukcji try...except (będzie dalej) pomiędzy słowami try i except, sterowanie nie jest przekazywane do instrukcji występującej bezpośrednio po niej. Instrukcja raise przekazuje sterowanie do bloku obsługi warunków dotyczącego warunków danej klasy (bloki takie występują po słowie except) i następuje wykonanie instrukcji wchodzących w skład tego bloku. Gdy instrukcja raise zostanie umieszczona poza instrukcją try...except, jej wykonanie polega zwykle na zatrzymaniu programu i wyświetleniu stosownego komunikatu. PP-7(34 z 84)

Instrukcja wywoływania stanów wyjątkowych Wywołanie określonego warunku powoduje też przypisanie zmiennej standardowej ErrorAddr, zadeklarowanej w module System, adresu miejsca programu, w którym to wywołanie nastąpiło. W bloku obsługi warunku można odwołać się do tej zmiennej podając, na przykład, użytkownikowi programu adres miejsca wystąpienia błędu. Jeśli adres ten ma być inny niż miejsce wystąpienia błędu, to można go określić za pomocą klauzuli at adres w której adres oznacza w ogólności wyrażenie adresowe (typu Pointer), a więc np. zmienną typu wskaźnikowego. PP-7(35 z 84)

Instrukcja wywoływania stanów wyjątkowych Trzecia postać instrukcji raise, składająca się z samego słowa kluczowego, służy do ponownego wywołania bieżącego warunku i może być użyta tylko w bloku except instrukcji try...except (będzie dalej). PP-7(36 z 84)

Instrukcja wywoływania stanów wyjątkowych Przykład Załóżmy, że w pewnym miejscu programu zmienna liczba typu Integer może mieć tylko wartości całkowite z przedziału [!10, 10]. Standardowym warunkiem przekroczenia zakresu dozwolonych wartości całkowitych jest EIntOverflow. Wykorzystanie tego warunku do wyświetlenia komunikatu o niedozwolonej wartości zmiennej liczba może mieć postać if (liczba<!10) or (liczba>10) then raise EIntOverflow.Create ( Wartość zmiennej liczba poza + dozwolonym zakresem ); PP-7(37 z 84)

Instrukcja try...except Jest podstawową instrukcją obsługi warunków. Powoduje sekwencyjne wykonywanie instrukcji występujących pomiędzy słowami try i except. Jeśli podczas ich wykonywania nie zostanie wywołany żaden warunek, to ciąg instrukcji występujący po słowie except jest ignorowany i sterowanie jest przekazywane do instrukcji występującej bezpośrednio po słowie end kończącym instrukcję try...except (jakby instrukcji try...except nie było). PP-7(38 z 84)

Instrukcja try...except Ogólna postać instrukcji jest następująca: try sekwencja-instrukcji except blok-obsługi-warunków end gdzie blok obsługi warunków może składać się albo z sekwencji instrukcji, albo z klauzul on postaci (vérte) PP-7(39 z 84)

Instrukcja try...except on identyfikator-warunku do instrukcja przy czym ostatnia klauzula może zawierać jednostkę else: on identyfikator-warunku do instrukcja else sekwencja-instrukcji Poszczególne klauzule on oddziela się średnikami. Identyfikator warunku oznacza albo identyfikator typu klasowego, albo nazwę typu klasowego poprzedzoną dwukropkiem oraz identyfikatorem, który będzie oznaczał obiekt-warunek w instrukcji podanej po słowie do. PP-7(40 z 84)

Instrukcja try...except Blok obsługi warunków może być uaktywniony wskutek: Pwystąpienia błędu wśród sekwencji instrukcji poddawanych próbie, tj. wśród instrukcji występujących pomiędzy słowami try i except, Pza pomocą instrukcji raise zamieszczonej wśród tej sekwencji, Pwskutek wywołania procedury (funkcji, metody) z tej sekwencji, której wykonanie spowoduje błąd. PP-7(41 z 84)

Instrukcja try...except W zależności od jednej z trzech postaci bloku obsługi warunków (sekwencja instrukcji, klauzule on, klauzule on z jednostką else) działanie instrukcji jest różne zostanie przedstawione na przykładach. Bez względu na to, który ze sposobów obsługi wystąpi, po obsłudze obiekt-warunek zostanie automatycznie usunięty z pamięci przez wywołanie jego destruktora. PP-7(42 z 84)

Instrukcja try...except Przykłady Rozważmy następujący program: program programam4; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; var i, j, k : Integer; begin i:=0; k:=1; j:=k div i; {*} Writeln (j); Readln end. Jego wykonanie spowoduje pojawienie się na chwilę symulowanego okienka tekstowego, szybkie jego zamknięcie i zakończenie wykonywania programu. Takie działanie programu jest spowodowane wystąpieniem błędu dzielenia przez zero w wierszu oznaczonym gwiazdką. PP-7(43 z 84)

Przykłady Instrukcje Instrukcja try...except W celu obsługi tego błędu można zastosować instrukcję try...except i instrukcje części wykonawczej programu zapisać w postaci: try i:=0; k:=1; j:=k div i; {*} Writeln (j) except on EDivByZero do ShowMessage ( Dzielenie całkowite przez zero ) end; Użycie tej procedury wymaga deklaracji modułu Vcl.Dialogs (program z tą deklaracją niech nazywa się programam5). Readln PP-7(44 z 84)

Przykłady Instrukcje Instrukcja try...except Uruchomienie tak zmodyfikowanego programu spowoduje wyświetlenie następującego okienka z komunikatem: PP-7(45 z 84)

Przykłady Instrukcje Instrukcja try...except Jeśli instrukcję try...except zapiszemy następująco: try i:=0; k:=1; j:=k div i; Writeln (j) except on EOutOfMemory do ShowMessage ( Brak pamięci ) else ShowMessage ( Wystąpił błąd inny niż brak pamięci ) end; PP-7(46 z 84) to zostanie wykonana instrukcja po słowie else (dlaczego?).

Przykłady Instrukcje Instrukcja try...except Zapisanie instrukcji try...except w postaci try i:=0; k:=1; j:=k div i; Writeln (j) except ShowMessage ( Wystąpił jakiś błąd ) end; spowoduje wyświetlenie następującego okienka z komunikatem: PP-7(47 z 84)

Instrukcja try...except W pewnych przypadkach może być konieczne ponowne wywołanie warunku pomimo jego (częściowej) obsługi. Do tego celu stosuje się instrukcję wywołania warunku składającą się z samego słowa kluczowego raise instrukcja try...except ma wówczas postać try sekwencja-instrukcji except sekwencja-instrukcji raise end PP-7(48 z 84)

Instrukcja try...except Przykład Podczas wykonywania funkcji wystąpienie błędu dzielenia przez zero (a także dowolnego innego) spowoduje wyświetlenie komunikatu podanego w wywołaniu procedury ShowMessage. Instrukcja raise uaktywni jednak ponownie warunek błędu. Ponieważ wywołanie funkcji k_div_i nastąpiło wewnątrz instrukcji try...except programu, po powrocie do niego rozpocznie się znowu poszukiwanie sekwencji mogącej obsłużyć ten warunek. Odpowiednią sekwencją jest tu klauzula on EDivByZero, a więc zostanie wyświetlony drugi komunikat: Dzielenie przez zero. Rozważmy następujący program: program programam6; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Vcl.Dialogs; var i, j, k : Integer; function k_div_i (k, i : Integer) : Integer; begin try if k>i then Result:=k div i else Result:=i div k except ShowMessage ( Wystąpił jakiś błąd ); raise end end; begin try i:=0; k:=1; j:= k_div_i(k, i); Writeln (j) except on EDivByZero do ShowMessage ( Dzielenie przez zero ) else ShowMessage ( Nie zidentyfikowano błędu ) end; Readln end. PP-7(49 z 84)

Instrukcja try...except Warunki błędów wywoływane i obsługiwane w bloku obsługi warunków, tj. po słowie except w instrukcji try...except, nie oddziałują na warunek oryginalny, tzn. warunek, dla którego blok obsługi został uaktywniony. Jeśli jednak warunek wywołany w bloku obsługi zostanie przeniesiony poza ten blok, to warunek oryginalny zostanie zagubiony. PP-7(50 z 84)

Instrukcja try...finally Instrukcję tę wykorzystuje się w przypadku, gdy bez względu na wystąpienie jakiegoś warunku należy wykonać pewne instrukcje, przy czym jeśli warunek wystąpi, to należy go ponownie wywołać. Postać tej instrukcji jest następująca: try sekwencja-instrukcji finally sekwencja-instrukcji end PP-7(51 z 84)

Instrukcja try...finally Instrukcja powoduje wykonywanie instrukcji występujących pomiędzy słowami try i finally w kolejności sekwencyjnej. Jeśli żadna z tych instrukcji nie zainicjuje żadnego warunku błędu, to zostaną wykonane instrukcje znajdujące się po słowie finally, po czym sterowanie zostanie przekazane do instrukcji bezpośrednio następnej po instrukcji try...finally. try sekwencja-instrukcji finally sekwencja-instrukcji end PP-7(52 z 84)

Instrukcja try...finally Jeśli któraś z instrukcji pomiędzy słowami try i finally spowoduje wystąpienie warunku błędu, to sterowanie jest przekazywane do bloku finally, w którym wykonywane są kolejno poszczególne instrukcje, a następnie warunek jest ponownie wywoływany (może więc być obsłużony na zewnątrz instrukcji try...finally). try sekwencja-instrukcji finally sekwencja-instrukcji end Wywołanie innego warunku w tym bloku powoduje zagubienie warunku oryginalnego. PP-7(53 z 84)

Instrukcja try...finally Działania instrukcji try...finally nie należy mylić z instrukcją try...except, w której bloku except występuje instrukcja raise (określona samym słowem raise). W przypadku instrukcji try...finally instrukcje występujące po słowie finally zostaną zawsze wykonane, a w przypadku podanego wariantu instrukcji try...except wykonanie instrukcji znajdujących się po słowie except nastąpi tylko wówczas, gdy wcześniej (pomiędzy słowami try i except) wystąpi jakiś warunek. PP-7(54 z 84)

Przykłady Instrukcja try...finally Rozważmy fragment programu (tekstowego): tu nie ma obsługi błędu tu jest obsługa błędu i:=2; j:=0; try try k:=i div j finally k:=0 end except on EdivByZero do ShowMessage ( Błąd ) end; Writeln (k); gdzie i, j i k oznaczają zmienne typu Integer. Na ekranie ukaże się najpierw okienko z komunikatem Błąd, a następnie (w symulowanym okienku tekstowym) liczba 0. PP-7(55 z 84)

Przykłady Instrukcje Instrukcja try...finally Instrukcja try...finally jest często wykorzystywana przy wykonywaniu operacji na plikach. Zwykle plik powinien być zamknięty bez względu na to, czy jego przetwarzanie przebiegło pomyślnie czy też nie. Operacje te można zaprogramować korzystając z następującego schematu: Reset (plik); otwarcie pliku try... przetwarzanie pliku finally CloseFile (plik) zamknięcie pliku end; Co należy dodać, aby obsłużyć ewentualny błąd EInOutError? PP-7(56 z 84)

Predefiniowane warunki i stany wyjątkowe Typem klasowym nadrzędnym w stosunku do wszystkich predefiniowanych klas reprezentujących warunki i stany wyjątkowe jest typ Exception zdefiniowany w module System.SysUtils. Ważniejsze predefiniowane typy klasowe reprezentujące warunki i stany wyjątkowe: P EAccessViolation próba dostępu do miejsca pamięci o niedozwolonym adresie (np. próba dostępu do obiektu poprzez niezainicjowane odwołanie do niego lub dereferencja niezainicjowanego wskaźnika) P EConvertError funkcja nie może przeprowadzić żądanej konwersji P EDivByZero przy dzieleniu całkowitym dzielnik ma wartość 0 PP-7(57 z 84)

Predefiniowane warunki i stany wyjątkowe Ważniejsze predefiniowane typy klasowe reprezentujące warunki i stany wyjątkowe (cd.): P EExternalException warunek jest wywoływany w przypadku wystąpienia błędu systemu operacyjnego (Windows), dla którego nie ma odpowiednika wśród predefiniowanych klas języka Delphi Pascal P EInOutError błąd podczas wykonywania operacji wejściawyjścia P EIntOverflow przekroczenie zakresu dozwolonych wartości dla liczb całkowitych P EInvalidOp próba wykonania niedozwolonej operacji arytmetycznej (np. próba obliczenia pierwiastka z liczby ujemnej) PP-7(58 z 84)

Predefiniowane warunki i stany wyjątkowe Ważniejsze predefiniowane typy klasowe reprezentujące warunki i stany wyjątkowe (cd.): P EInvalidPointer próba zwolnienia błędnego wskaźnika P EOutOfMemory za mało pamięci do wykonania operacji P EOverflow wystąpienie nadmiaru przy wykonywaniu operacji zmiennoprzecinkowej P ERangeError przekroczenie zakresu indeksów P EStackOverflow stos przeznaczony dla programu nie może być powiększony lub rozmiar stosu osiągnął górną granicę P EUnderflow wystąpienie niedomiaru przy wykonywaniu operacji zmiennoprzecinkowej PP-7(59 z 84)

Predefiniowane warunki i stany wyjątkowe Ważniejsze predefiniowane typy klasowe reprezentujące warunki i stany wyjątkowe (cd.): P EVariantError błędne wykonanie operacji na wartościach typu Variant P EZeroDivide w operacji dzielenia dzielnik ma wartość 0 PP-7(60 z 84)

Instrukcja asemblerowa Instrukcja ta umożliwia pisanie fragmentów tekstów źródłowych bezpośrednio w asemblerze i ma następującą postać: asm instrukcja-asemblera-1 instrukcja-asemblera-2... instrukcja-asemblera-n end Separatorami instrukcji asemblera są: - średnik, - nowy wiersz, - komentarz języka Delphi. PP-7(61 z 84)

Funkcje i procedury Procedurą lub funkcją nazywamy wyodrębnioną część programu (modułu, biblioteki łączonej dynamicznie), stanowiącą pewną całość, posiadającą jednoznaczną nazwę i ustalony sposób wymiany informacji z pozostałymi częściami programu (modułu, biblioteki łączonej dynamicznie). Procedury i funkcje są stosowane do wykonania czynności, które mogą być wykorzystane w różnych programach (modułach, bibliotekach łączonych dynamicznie) lub do wykonania czynności wielokrotnie powtarzanych. Stosowanie procedur i funkcji umożliwia także bardziej efektywne wykorzystanie pamięci (dynamiczny przydział pamięci), gdyż elementom określonym wewnątrz procedury lub funkcji pamięć jest przydzielana dopiero z chwilą wywołania do przetwarzania danej procedury lub funkcji. PP-7(62 z 84)

Funkcje i procedury Różnica pomiędzy procedurą i funkcją polega na sposobie przekazywania wartości. Zadaniem procedury jest wykonanie pewnej sekwencji czynności, polegających zwykle na obliczeniu jednej lub wielu wartości. Natomiast zadaniem funkcji jest zwykle obliczenie jednej wartości, przy czym niekoniecznie musi to być wartość skalarna. Odmienne są też sposoby wywoływania procedur i funkcji. PP-7(63 z 84)

Funkcje i procedury Definicje funkcji i procedur Na ogół definicja każdej procedury i funkcji składa się z trzech części: Pnagłówka, Popcjonalnej części opisowej, Pczęści operacyjnej (wykonawczej). W nagłówku podaje się identyfikator (przyporządkowany danemu algorytmowi) oraz ewentualnie parametry formalne, tj. pomocnicze nazwy parametryzujące algorytm. Dla funkcji w nagłówku określa się także typ wyniku. PP-7(64 z 84)

Funkcje i procedury Definicje funkcji i procedur W części opisowej definiuje i deklaruje się elementy lokalne wewnątrz danej procedury lub funkcji. Część operacyjna (mająca zawsze postać instrukcji złożonej) zawiera sekwencję instrukcji powodującą wykonanie czynności przewidzianych przez dany algorytm. Czynności te mogą być wykonywane zarówno na elementach lokalnych, jak i na elementach nielokalnych (zdefiniowanych lub zadeklarowanych na zewnątrz procedury lub funkcji). Elementy nielokalne występują w treści procedury lub funkcji explicite, bądź są do niej przekazywane przez parametry. PP-7(65 z 84)

Funkcje i procedury Definicje funkcji i procedur Część opisowa funkcji i procedury może być dodatkowo poprzedzona jedną z dyrektyw języka (register, pascal, cdecl, stdcall lub safecall) określającą tzw. konwencję wywołania (będzie dalej). Zamiast części opisowej i operacyjnej, treść procedury lub funkcji może składać się wyłącznie z dyrektywy języka external, która określa albo podprogram zewnętrzny, tj. funkcję lub procedurę napisaną w asemblerze i dołączaną do programu (będzie dalej), albo funkcję lub procedurę importowaną z biblioteki łączonej dynamicznie (też będzie dalej). Jeszcze inną postacią treści funkcji lub procedury jest blok asemblerowy, który pozwala na napisanie całości funkcji lub procedury PP-7(66 z 84) (poza nagłówkiem) bezpośrednio w asemblerze (też będzie dalej).

Funkcje i procedury Definicje funkcji i procedur Pomijając konwencje wywołania i przypadki, gdy treść funkcji lub procedury zawiera dyrektywę external lub jest blokiem asemblerowym, definicja procedury ma następującą postać: procedure nazwa-procedury (lista-parametrów- formalnych); część-opisowa begin ciąg-instrukcji end; PP-7(67 z 84)

Funkcje i procedury Definicje funkcji i procedur... a definicja funkcji: function nazwa-funkcji (lista-parametrów- formalnych) : typ-wyniku; część-opisowa begin ciąg-instrukcji end; przy czym w obu przypadkach część opisowa i lista parametrów formalnych (ujęta w nawiasy) jest PP-7(68 z 84) opcjonalna.

Funkcje i procedury Definicje funkcji i procedur Lista parametrów formalnych zawiera deklaracje parametrów formalnych (poszczególne deklaracje oddziela się średnikami). Określa ona także sposób, w jaki poszczególne parametry formalne zostaną zastąpione parametrami aktualnymi (argumentami) podczas wywołania danej procedury lub funkcji. W przypadku funkcji w ciągu instrukcji powinna wystąpić co najmniej jedna instrukcja przypisania postaci: nazwa-funkcji:=wyrażenie lub Result:=wyrażenie które powodują przypisanie wartości pod nazwę funkcji. Typ wyniku funkcji jest określony za pomocą identyfikatora typu lub PP-7(69 z 84) słowa kluczowego string.

Funkcje i procedury Definicje funkcji i procedur Jeśli uporządkowanie definicji funkcji i (lub) procedur jest takie, że odwołania do nich nie występują w zasięgu definicji, to niezbędne jest ich zadeklarowanie (zapowiedzenie wystąpienia ich definicji dalej): procedure nazwa-procedury (lista-parametrów- formalnych); forward; function nazwa-funkcji (lista-parametrów-formalnych) : typ- wyniku; forward; Lista parametrów formalnych jest opcjonalna. PP-7(70 z 84)

Definicje funkcji i procedur Przykład Funkcje i procedury Jeśli wewnątrz bezparametrowej procedury Procedura1 jest konieczne wywołanie procedury (bezparametrowej) Procedura2, a ponadto druga procedura ma wywoływać pierwszą, to struktura ich opisu powinna być następująca: procedure Procedura2; forward; procedure Procedura1;... begin... Procedura2;... end {Procedura1}; procedure Procedura2;... begin... Procedura1;... end {Procedura2};... lub na odwrót, tj. najpierw zapowiedź definicji procedury Procedura1, następnie definicja procedury Procedura2, a na PP-7(71 z 84) końcu definicja procedury Procedura1.

Funkcje i procedury Rodzaje parametrów W zależności od sposobu przekazywania wartości do procedury lub funkcji, tj. zastępowania parametrów formalnych argumentami, wyróżniamy 10 rodzajów parametrów: P parametry przekazywane przez wartości, P parametry przekazywane przez stałe określonego typu, P parametry przekazywane przez zmienne określonego typu, P parametry przekazywane przez stałe nieokreślonego typu, PP-7(72 z 84)

Funkcje i procedury Rodzaje parametrów W zależności od sposobu przekazywania wartości do procedury lub funkcji, tj. zastępowania parametrów formalnych argumentami, wyróżniamy 10 rodzajów parametrów: P parametry przekazywane przez zmienne nieokreślonego typu, P parametry wyjściowe określonego typu, P parametry wyjściowe nieokreślonego typu, P parametry otwarte, PP-7(73 z 84)

Funkcje i procedury Rodzaje parametrów W zależności od sposobu przekazywania wartości do procedury lub funkcji, tj. zastępowania parametrów formalnych argumentami, wyróżniamy 10 rodzajów parametrów: P otwarte parametry tablicowe typu wariantowego, P parametry o domyślnej wartości. PP-7(74 z 84)

Funkcje i procedury Parametry przekazywane przez wartości Deklaracja: lista-parametrów : typ Poszczególne parametry listy parametrów oddziela się przecinkami. Typ oznacza identyfikator typu lub słowo kluczowe string. Dla parametrów typu łańcuchowego (string) nie jest dozwolona specyfikacja długości łańcucha. Jeżeli parametr jest przekazywany przez wartość, to w wywołaniu procedury (funkcji) odpowiadający mu argument może być wyrażeniem. Parametry przekazywane przez wartości nie mogą być typu plikowego PP-7(75 z 84) i typu strukturalnego o elementach składowych typu plikowego.

Funkcje i procedury Parametry przekazywane przez stałe określonego typu Deklaracja: const lista-parametrów : typ Parametry tego rodzaju są w treści procedury lub funkcji traktowane jako zmienne lokalne przeznaczone tylko do odczytu. Argument wywołania odpowiadający parametrowi przekazywanemu przez stałą określonego typu w ogólności może być wyrażeniem, ale jego typ musi być zgodny w sensie przypisania z typem parametru formalnego. Dla parametrów typu łańcuchowego i strukturalnego zaleca się stosować parametry przekazywane przez stałe zamiast przekazywanych przez wartości, gdyż kompilator generuje PP-7(76 z 84) dla nich bardziej efektywny kod wynikowy.

Funkcje i procedury Parametry przekazywane przez zmienne określonego typu Deklaracja: var lista-parametrów : typ Argumenty odpowiadające parametrom przekazywanym przez zmienną określonego typu muszą być zmiennymi. Typ odpowiedniej zmiennej musi być przy tym identyczny z typem parametru formalnego. Zastosowanie tych parametrów do przekazywania elementów tablic wariantowych nie jest dozwolone. Parametry typu plikowego mogą być przekazywane tylko przez zmienną. PP-7(77 z 84)

Funkcje i procedury Parametry przekazywane przez stałe i zmienne nieokreślonego typu Deklaracje: const lista-parametrów var lista-parametrów Argumenty im odpowiadające mogą być literałami lub zmiennymi dowolnych typów. W treści procedury (funkcji) parametry te nie są zgodne z żadnymi innymi zmiennymi. Zgodność tę uzyskuje się za pomocą konstrukcji zmiany typu zmiennej, która nadaje parametrom odpowiednie typy. Parametry nieokreślonego typu służą głównie do konstrukcji procedur i funkcji przetwarzających podobne struktury danych, ale o różnych rozmiarach. PP-7(78 z 84)

Funkcje i procedury Parametry wyjściowe Deklaracje: out lista-parametrów : typ out lista-parametrów Argument odpowiadający parametrowi wyjściowemu musi być zmienną. Parametry te są przeznaczone do przekazywania wartości z procedury lub funkcji na zewnątrz. Jakiekolwiek wartości nadane argumentom odpowiadającym parametrom wyjściowym przed wywołaniem procedury (funkcji) po przekazaniu do procedury (funkcji) są anulowane. PP-7(79 z 84)

Funkcje i procedury Parametry otwarte Deklaracje: var parametr : array of identyfikator-typu const parametr : array of identyfikator-typu parametr : array of identyfikator-typu Zastosowanie tych parametrów umożliwia przekazywanie do tej samej procedury lub funkcji tablic o różnych rozmiarach. Parametr aktualny (argument) odpowiadający tablicowemu parametrowi otwartemu musi być zmienną typu określonego przez identyfikator typu lub tablicą elementów o typie określonym przez ten identyfikator. PP-7(80 z 84)

Funkcje i procedury Parametry otwarte W treści procedury lub funkcji tablicowy parametr otwarty jest traktowany tak, jakby był zadeklarowany za pomocą konstrukcji array [0..n!1] of identyfikator-typu gdzie n oznacza liczbę elementów argumentu. Jeśli argument jest zmienną typu określonego przez identyfikator typu, to traktuje się go jak tablicę jednoelementową o tym typie. W treści funkcji lub procedury do określenia liczby elementów tablicy otwartej stosuje się funkcję standardową High. PP-7(81 z 84)

Funkcje i procedury Tablicowe parametry otwarte typu wariantowego Służą do przekazywania do procedury lub funkcji tablic zawierających wartości różnych typów. Typ takiego parametru powinien być określony za pomocą konstrukcji array of const która odpowiada konstrukcji array of TVarRec gdzie TVarRec oznacza wariantowy typ rekordowy (predefiniowany w module System), który może reprezentować wartości różnych (ale nie wszystkich) typów. PP-7(82 z 84)

Funkcje i procedury Parametry o domyślnej wartości Deklaracje: const parametr : typ = wyrażenie-stałe parametr : typ = wyrażenie-stałe Parametry z domyślnymi wartościami muszą wystąpić jako ostatnie na liście parametrów. Każdy parametr z domyślną wartością musi być przy tym specyfikowany oddzielnie (użycie listy parametrów nie jest dozwolone). PP-7(83 z 84)

Do zobaczenia na następnym wykładzie PP-7(84 z 84)