PROGRAMOWANIE STRUKTURALNE WYKŁAD 2 Wprowadzenie do programowania w Pascalu cd. Mgr inż. Agnieszka Sroka
TEMATY Etapy tworzenia programu. Zasady programowania strukturalnego. Podstawy zapisywania programu w języku Pascal: słowa kluczowe, identyfikatory, komentarze, liczby, symbole podstawowe. Struktura programu w języku Pascal. Praca w środowisku FreePascal: budowa okna, pisanie procedur, kompilacja i uruchamianie. Procedury wejścia/wyjścia. Deklaracja stałych i zmiennych w programie. Operatory i wyrażenia. Instrukcje warunkowe. Tworzenie programów z instrukcjami warunkowymi. Instrukcje iteracyjne. Tworzenie programów z operatorami iteracyjnymi.
Etapy tworzenia programu. • określenie danych wejściowych, • określenie celu (wyniku konchowego), • analiza problemu i wybór modelu, • przedstawienie algorytmu: - w postaci opisu słownego, - w postaci listy kroków, - w postaci schematu blokowego (postać graficzna algorytmu), - za pomocą jednego z języków formalnych (np. UML). • analiza poprawności rozwiązania, • kodowanie algorytmu w postaci instrukcji języka programowania, • zapis programu do pliku, • kompilacja i usuwanie usterek, • utworzenie wersji wykonywalnej, • testowanie i analiza wyników.
Etapy tworzenia programu.
Zasady programowania strukturalnego. program powinien składać się z niedużych jednostek zwanych procedurami, w których obrębie nie ma już mniejszych podprogramów w kodzie modułu powinno być tylko jedno wejście i jedno wyjście kod powinien być budowany z pomocą następujących konstrukcji podstawowych: ciągu sekwencyjnego rozgałęzienia warunkowego pętli ze sprawdzeniem warunku powtarzania na początku lub końcu ciągu sekwencyjnego instrukcji wyboru jeden z wielu możliwe jest zagnieżdżanie jednych konstrukcji wewnątrz innych należy ograniczyć do niezbędnego minimum stosowanie skoku bezwarunkowego program powinien zapewniać proste i jasne rozwiązanie problemu, być napisany w poprawnym stylu, przejrzysty, czytelny
Podstawy zapisywania programu w języku Pascal. Program w TP podzielony jest na: Nagłówek (Program pole;) Część deklaracyjną (Deklaracja modułów, stałych i zmiennych) Część wykonawczą (Begin .... End.) Słowa kluczowe Zastrzeżone słowa języka (Object) Pascal. Są integralną częścią języka i nie mogą być definiowane przez programistę: and | array | as | asm | begin | case | class | const | constructor | destructor | dispinterface |div | do | downto | else | end | except | exports | file | finalization | finally | for | function | goto | if | implementation | in | inherited | initialization | inline | interface | label | library | mod | nil | not | object | of | or | out | packed | procedure | program | property | raise | record | repeat | resourcestring | set | shl | shr | string | then | threadvar | to | try | type | unit | until | uses | var | while | with | xor
Podstawy zapisywania programu w języku Pascal. Identyfikatory Definicja identyfikatora w notacji BNF ma postać: <identyfikator> ::= <litera> { <litera> | <cyfra> } <litera> ::= A | B | C | D | E | F | G | H | I |J | K | L | M | N |O | P | Q | R | S | T | U | V | W | X | Y | Z a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | _ <cyfra> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7| 8 | 9 Identyfikator to ciąg liter lub cyfr zaczynający się od litery (znak _ zaliczany jest do liter). Długość identyfikatora jest dowolna, ale tylko pierwszych 255 znaków jest znaczące. Identyfikator nie może zaczynać się od cyfry, np. dozwolony jest identyfikator: _11 natomiast nie wolno użyć: 11_. Nie wolno również używać w identyfikatorach słów kluczowych. Identyfikatory służą do oznaczania programów, procedur, funkcji, metod, parametrów formalnych, modułów, bibliotek DLL, typów, zmiennych, stałych, etykiet (identyfikator etykiety może być też liczbą), pól rekordów i obiektów.
Podstawy zapisywania programu w języku Pascal. Komentarze Komentarze są to ciągi wyrazów, znaków nie mających wpływu na przebieg programu, oznacza się je w następujące sposoby: {komentarz} (*komentarz*) //komentarz Zapis liczb Liczba całkowita dziesiętna musi być z przedziału : [-2 147 483 648, 2 147 483 647] Liczba całkowita szesnastkowa (należy użyć symbolu $ i liter od A do F dla oznaczenia cyfr szesnastkowych) powinna być z przedziału: [-$80000000, $7FFFFFFF] Liczba rzeczywista składa się z: mantysy – jest to liczba dziesiętna postaci: część-całkowita [. część-ułamkowa] opcjonalnie: litery E (lub e) – oznacza że podstawą wykładnika jest liczba 10 cechy – jest to liczba całkowita
Podstawy zapisywania programu w języku Pascal. Łańcuchy Łańcuch jest to ciąg znaków (maksymalnie 255) zapisanych w jednej linii i ujętych w apostrofy, znaków sterujących oraz znaków w postaci dziesiętnej i szesnastkowej poprzedzonych znakiem #. TYPY DANYCH: • TYPY CAŁKOWITE shortint (-128..127) 1B integer (-32768..32767} 2B longint {-2147483648.. 2147483647} 4B byte {0..255} 1 bajt word {0..65535} 2 bajty • TYP RZECZYWISTY real od 5.0e-324 do 1.7e308. • TYP LOGICZNY boolean - TRUE (prawda) lub FALSE (fałsz) • TYP ZNAKOWY char - pojedynczy znak o kodach ASCII (0..255) np. znak "A" czy "!" • TYP ŁAŃCUCHOWY string - ciąg o dł.0-255 znaków, przykładowym łańcuchem jest: 'To jest tekst‘.
Podstawy zapisywania programu w języku Pascal. Instrukcja przypisania. Nadawanie wartości następuje bardzo często za pośrednictwem instrukcji przypisania, która ma ogólna postać: zmienna := wyrażenie; Operator „ := ” nazywa się operatorem przypisania , symbol zmienna oznacza tu identyfikator; wyrażenie musi być typu konwertowanego do typu zmiennej. W wersji najprostszej: zmienna := stała ; liczba := 10 ; {czytamy : zmiennej liczba przypisz wartość 10 ;} Przykład 1. var a,b :integer; begin a:=1; b:=a; writeln(c); writeln(b); end . Przykład 2. (Zmienne miały różne typy.) Program Instr_przypisania ; var liczba : integer; litera : char; BEGIN liczba := 33; {wynik wykonania programu } litera := char (liczba); { ! } writeln(litera); END.
Struktura programu w języku Pascal. program nazwa_programu; {Nagłówek programu - opcjonalny} ................................................... { SEKCJA DEKLARACJI } uses lista_nazw_modułów ; const sekwencja_definicji_stałych ; {Definicje stałych} type sekwencja_definicji_typów ; {Definicje typów} label lista_etykiet ; {Deklaracja etykiet} var sekwencja_deklaracji_zmiennych ; {Deklaracje zmiennych} procedure nazwa_procedury_1 ; {Definicje procedur} begin { Definicje składowych procedury_1 – kod procedury } end; procedure nazwa_procedury_2 ( lista_parametrów ) ; begin { Definicje składowych procedury_2 – kod procedury } end; . . .
Struktura programu w języku Pascal. function nazwa_funkcji_1 : typ_wartosci ; {Definicje funkcji} begin { Definicje składowych funkcji_1 – kod funkcji } nazwa_funkcji_1:= wynik; { przekazanie wyniku funkcji na zewnatrz } end; function nazwa_funkcji_2( lista_parametrów ) : typ_wartosci ; { Definicje składowych funkcji_2 – kod funkcji } nazwa_funkcji_2:= wynik; { przekazanie wyniku funkcji na zewnatrz } .................................................... { SEKCJA INSTRUKCJI } instrukcja_1 ; instrukcja_2 ; . . . instrukcja_N ; end .
Procedury wejścia/wyjścia. Write(); - powoduje wypisanie wartości wyrażenia zawartego w nawiasie. Writeln(); - powoduje wypisanie wartości wyrażenia zawartego w nawiasie i przejście do nowego wiersza. Write(123); Writeln(x); Writeln(‘To jest zdanie’); Write(‘Tekst’,4,’ ‘); Write(x:4:2); Readln(); - odczytanie danej z klawiatury i zakończonej naciśnięciem klawisza Enter. Read(); - odczytanie danej z dysku. Instrukcję Readln(); (bez parametru) stosujemy do zatrzymania programu. Naciśnięcie klawisza Enter powoduje dalszy ciąg programu.
Deklaracja stałych i zmiennych w programie. Definiowanie stałych Definicje stałych rozpoczynają się od słowa kluczowego const. Każda definicja stałej ma następującą postać: nazwa_stałej = wartosc_stałej; Typ stałej jest określany na podstawie nadawanej jej wartości. Definicja stałej globalnej może występować tylko raz w całym programie. Wartości stałej nie można modyfikować w części wykonawczej programu. Przykładowe definicje stałych: Const k = 15; { stała całkowita typu integer } n = 40000; { stała całkowita typu word } d = 500000; { stała całkowita typu longint } x = -3.14; { stała rzeczywista typu real } y = 0.3E2; { stała rzeczywista typu real } c = ’K’; { stała znakowa
Deklaracja stałych i zmiennych w programie. Deklarowanie zmiennych Zmienne globalne, tj. dostępne w całym programie, deklaruje się w sekcji deklaracji zmiennych programu. Deklaracje zmiennych rozpoczynają się od słowa kluczowego var. Każda deklaracja zmiennej ma następującą postać: nazwa_zmiennej : typ_zmiennej; Typ zmiennej musi być: • jednym z typów standardowych, • typem zdefiniowanym wcześniej przez użytkownika, • typem opisanym w deklaracji zmiennej. Deklaracja zmiennej globalnej może występować tylko raz w całym programie.
Deklaracja stałych i zmiennych w programie. Przykładowe deklaracje zmiennych: Var a, b : integer; { zmienne typu integer } c : char; { zmienna typu char } d : boolean; { zmienna typu boolean } e, h : longint; { zmienne typu longint } x, y, z, w : real; { zmienne typu real } s : string; { zmienna typu string } W deklaracji zmiennej można użyć typu zdefiniowanego przez użytkownika. type Bajt = byte; { typ o nazwie Bajt - zgodny z bajt } Tlicz = real; { typ o nazwie Tlicz - zgodny z real } p : Bajt; { zmienna typu Bajt } q, r : Tlicz; { zmienne typu Tlicz }
Operatory i wyrażenia. Operatory
Operatory i wyrażenia. Konstrukcja i obliczanie wyrażeń Wyrażenia są budowane w oparciu o stałe, zmienne, operatory, nazwy funkcji i zbiorów oraz nawiasy okrągłe. Wyrażenia zapisujemy w jednym wierszu, bez opuszczania znaku mnożenia, z wykorzystaniem nawisów zwykłych. Wartościowanie wyrażenia – wyznaczenie wartości wyrażenia, tj. wykonanie operacji na argumentach zgodnie kolejnością określona przez nawiasy zwykłe lub priorytet operatorów. Przykładowe wyrażenia: (a-b)/(c+d); a-c/(d+e); (a+b)/c-d. Reguły obliczania wartości wyrażeń zawierających operatory: - wykonywanie obliczeń w kolejności określonej przez nawiasy grupujące; - w pierwszej kolejności realizacja działań dla operatorów o najwyższym priorytecie; - w przypadku jednakowego priorytetu operatorów wykonywanie działań od lewej strony do prawej.
Instrukcje warunkowe. Tworzenie programów z instrukcjami warunkowymi. INSTRUKCJA WARUNKOWA „IF THEN” if wyrażenie_logiczne then instrukcja ; _____________________________________________________ if wyrażenie_logiczne then begin instrukcja_1; instrukcja_2; { ciąg instrukcji } . . . instrukcja_n; end;
Instrukcje warunkowe. Tworzenie programów z instrukcjami warunkowymi.
Instrukcje warunkowe. Tworzenie programów z instrukcjami warunkowymi. INSTRUKCJA WARUNKOWA „IF THEN ELSE” if wyrażenie_logiczne then instrukcja_1 else instrukcja_2 ; ________________________________________________________ if wyrażenie_logiczne then begin {ciąg_instrukcji_1} end else {ciąg_instrukcji_2} end;
Instrukcje warunkowe. Tworzenie programów z instrukcjami warunkowymi.
Instrukcje warunkowe. Tworzenie programów z instrukcjami warunkowymi. { Uporządkuj trzy liczby } var a, b, c : real ; begin write( ' Podaj pierwsza liczbe: ' ); readln( a ); write( ' Podaj druga liczbe: ' ); readln( b ); write( ' Podaj trzecia liczbe: ' ); readln( c ) ; if a>b then if b>c then writeln( a,b,c ) else if a>c then writeln( a,c,b ) writeln( c,a,b ) writeln( b,a,c ) writeln( b,c,a ) writeln( c,b,a ) readln; end.
Instrukcje warunkowe. Tworzenie programów z instrukcjami warunkowymi. INSTRUKCJA WYBORU: case wyróżnik of zakres_1: instrukcja_1; zakres_2: instrukcja_2; . . . zakres_N: instrukcja_N; end; ________________________________________________________ else instrukcja_M;
Instrukcje warunkowe. Tworzenie programów z instrukcjami warunkowymi.
Instrukcje iteracyjne. INSTRUKCJA ITERACYJNA REPEAT
Instrukcje iteracyjne. INSTRUKCJA ITERACYJNA WHILE
Instrukcje iteracyjne. INSTRUKCJA ITERACYJNA FOR TO
Instrukcje iteracyjne. Instrukcja iteracyjna FOR DOWNTO
Tworzenie programów z operatorami iteracyjnymi. Przykład 1 { odczytywanie klawiszy do momentu naciśnięcia klawisza k' } var znak:char; begin repeat { za pomoca petli REPEAT } write('podaj znak: '); znak:=readkey; until znak='k'; znak:=#0; { za pomoca petli WHILE } while znak<>'k' do end;
Tworzenie programów z operatorami iteracyjnymi. Przykład 2 { drukowanie na ekranie poziomej kreski o zadanej długości } var i,dlugosc:integer; begin write('Podaj zadana dlugosc kreski: '); readln(dlugosc); clrscr; { za pomoca petli REPEAT } i:=1; repeat write('-'); i:=i+1; until i>dlugosc; clrscr; { za pomoca petli WHILE } i:=1; while i<=dlugosc do begin write('-'); i:=i+1; end; clrscr; { za pomoca petli FOR } for i:=1 to dlugosc do
Tworzenie programów z operatorami iteracyjnymi. Przykład 3 { policzenie sumy N podanych liczb } var i,N:integer; liczba,suma:real; begin write('Podaj ile liczb chcesz zsumowac:'); readln(N); suma:=0; { za pomoca petli FOR } for i:=1 to N do write('Podaj ',i,' liczbe: '); readln(liczba); suma:=suma+liczba; end; writeln('Suma podanych liczb wynosi: ', suma );
Tworzenie programów z operatorami iteracyjnymi. Przykład 4 { sumowanie podawanych liczb aż ich wartość przekroczy granicę } var liczba,suma,granica:real; begin write('Podaj wartosc graniczna sumowania:'); readln(granica); suma:=0; { za pomoca petli REPEAT } repeat write('Podaj liczbe: '); readln(liczba); suma:=suma+liczba; until suma>granica; writeln('Suma podanych liczb przekroczyla ',granica, ' i wynosi: ', suma ); end;
Tworzenie programów z operatorami iteracyjnymi. Przykład 5 { sumowanie liczb naturalnych aż ich wartość przekroczy granicę } var i:integer; liczba,suma,granica:real; begin write('Podaj wartosc graniczna sumowania:'); readln(granica); suma:=0; { za pomoca petli WHILE } i:=0; while suma<=granica do suma:=suma+i; i:=i+1; end; writeln('Suma podanych liczb wynosi: ', suma );
Tworzenie programów z operatorami iteracyjnymi. Przykład 6 { wyznaczenie wartości maximum z podanych 10 liczb } var i:integer; liczba,maximum:real; begin maximum:=-1.7e38; {najmniejsza wartosc liczby real} for i:=1 to 10 do write('Podaj ',i,' liczbe: '); readln(liczba); if liczba>maximum then maximum:=liczba; end; write('Najwieksza wartosc wynosi: ',maximum);
Tworzenie programów z operatorami iteracyjnymi. Przykład 7 { wyznaczenie wartości i pozycji maximum z podanych liczb } var i,pozycja,N:integer; liczba,minimum:real; begin write('Podaj ile liczb chcesz sprawdzic:'); readln(N); minimum:=+1.7e38; {najwieksza wartosc liczby real} pozycja:=-1; i:=1; while i<=N do write('Podaj ',i,' liczbe: '); readln(liczba); if liczba<minimum then begin minimum:=liczba; pozycja:=i; end; i:=i+1; writeln('Najmniejsza byla ',pozycja, ' liczba o wartosci: ',minimum);
Tworzenie programów z operatorami iteracyjnymi. Przykład 8 { policzenie wartości n! } function SILNIA( n:word ):longint; var i:word; s:longint; begin s:=1; for i:=2 to n do s:=s*i; SILNIA:=s; end;{-------------------------------------------SILNIA}