380 likes | 589 Views
PROGRAMOWANIE STRUKTURALNE WYKŁAD 2. Wprowadzenie do programowania w Pascalu cd. Mgr inż. Agnieszka Sroka. TEMATY. Etapy tworzenia programu. Zasady programowania strukturalnego.
E N D
PROGRAMOWANIE STRUKTURALNEWYKŁ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.
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. • TYPY DANYCH: • TYPY CAŁKOWITEshortint (-128..127) 1Binteger (-32768..32767} 2Blongint {-2147483648.. 2147483647} 4Bbyte {0..255} 1 bajtword {0..65535} 2 bajty • TYP RZECZYWISTYreal od 5.0e-324 do 1.7e308. • TYP LOGICZNY boolean - TRUE (prawda) lub FALSE (fałsz) • Ł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 #. • TYP ZNAKOWY char - pojedynczy znak o kodach ASCII (0..255) np. znak "A" czy "!" • TYP ŁAŃCUCHOWYstring - 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 ; begin { Definicje składowych funkcji_2 – kod funkcji } nazwa_funkcji_2:= wynik; { przekazanie wyniku funkcji na zewnatrz } end; .................................................... { SEKCJA INSTRUKCJI } begin 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 } Var 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 theninstrukcja_1 else instrukcja_2 ; ________________________________________________________ if wyrażenie_logicznethen begin {ciąg_instrukcji_1} end else begin {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 ) else writeln( c,a,b ) else if a>c then writeln( b,a,c ) else if b>c then writeln( b,c,a ) else writeln( c,b,a ) readln; end.
Instrukcje warunkowe.Tworzenie programów z instrukcjami warunkowymi. • INSTRUKCJA WYBORU: case wyróżnikof zakres_1: instrukcja_1; zakres_2: instrukcja_2; . . . zakres_N: instrukcja_N; end; ________________________________________________________ case wyróżnikof zakres_1: instrukcja_1; zakres_2: instrukcja_2; . . . zakres_N: instrukcja_N; else instrukcja_M; end;
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 begin write('podaj znak: '); znak:=readkey; end; 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 write('-'); end;
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 begin write('Podaj ',i,' liczbe: '); readln(liczba); suma:=suma+liczba; end; writeln('Suma podanych liczb wynosi: ', suma ); end;
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 begin suma:=suma+i; i:=i+1; end; writeln('Suma podanych liczb wynosi: ', suma ); end;
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 begin write('Podaj ',i,' liczbe: '); readln(liczba); if liczba>maximum then maximum:=liczba; end; write('Najwieksza wartosc wynosi: ',maximum); end;
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 begin write('Podaj ',i,' liczbe: '); readln(liczba); if liczba<minimum then begin minimum:=liczba; pozycja:=i; end; i:=i+1; end; writeln('Najmniejsza byla ',pozycja, ' liczba o wartosci: ',minimum); end;
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}