Jak powstaje program komputerowy?
Transkrypt
Jak powstaje program komputerowy?
1 / 18 PROGRAMOWANIE 2 / 18 PROGRAMOWANIE Jak powstaje program komputerowy? Języki niskiego poziomu (ang. low-level language) – zapisane w postaci zdefiniowanych symboli 1. Etapy tworzenia programu. Języki wysokiego poziomu (ang. high-level language) – rozbudowane pod względem składniowym (ang. assembly language) i ustalonej składni odpowiedniki rozkazów procesora; przejście do postaci „maszynowej” umoŜliwia program tłumaczący – tzw. asembler. instrukcje (słowa kluczowe, operatory, …) z których kaŜda odpowiada zwykle większej liczbie rozkazów procesora; spośród dość duŜej ilości moŜemy wyróŜnić: C, C++, Pascal, FORTRAN (FORmula TRANslator), COBOL (COmmon Business Oriented Language), ALGOL (ALGOrythmic Language, ALGebraic Oriented Language), Basic (Beginner’s All-purpose Symbolic Instruction Code), …; Java, Java Script, Perl, PHP, … - języki „internetowe” i skryptowe; Delphi, Kylix (Pascal), C++ Builder, Visual C++ (C++), Visual Basic (Basic), … - języki „wizualne” oparte na składni standardowego języka. Algorytm Program (kod) źródłowy * (.pas, .pp, .c, .cpp, …) (.ppw, .h, …) 3. Podstawowe pojęcia. a) Kompilacja, interpretacja, translacja. Kompilacja Plik binarny Łączenie (konsolidacja) Program (kod) wynikowy KaŜdy program zapisany w języku niskiego bądź wysokiego poziomu naleŜy przetłumaczyć na język maszynowy. W procesie tym – ogólnie nazywanym kompilacją – tłumaczone są najpierw wszystkie instrukcje, aby następnie uruchomić cały program. Jeśli jednak mamy do czynienia z sytuacją, w której kaŜda instrukcja jest tłumaczona i zaraz potem wykonywana to taki sposób nazywamy interpretacją. Odpowiednio teŜ określamy programy tłumaczące jako kompilator i interpreter. Obydwa powyŜsze procesy jak równieŜ programy określane są jako translacja (kompilacja lub interpretacja) oraz translator (kompilator lub interpreter). (.ow, .obj, .o, …) Binarne pliki nagłówkowe, moduły (.ow, .aw, .o, .a, .obj, .lib, …) b) Syntaktyka i semantyka. Syntaktyka (składnia) języka programowania to zbiór elementów (słowa kluczowe, pojedyncze lub podwójne znaki, …) oraz reguł stosowanych do tworzenia instrukcji („zdań”). Jeden prosty błąd w składni uniemoŜliwia przeprowadzenie kompilacji programu. W momencie, gdy składnia jest prawidłowa (kompilacja przebiegła prawidłowo) a jednak program nie daje oczekiwanych wyników mamy do czynienia z niepoprawną semantyką programu. Mówimy wówczas o błędach „logicznych” programu. (.exe, …) Rys. A. Od algorytmu do gotowego programu. * Program (kod) źródłowy – zapisany (na podstawie algorytmu) tekst programu przy uŜyciu składni wybranego języka programowania. Program (kod) wynikowy – nazywany równieŜ kodem maszynowym lub wykonywalnym, plik zawierający rozkazy (instrukcje, polecenia) gotowe do wykonania przez procesor. Kompilacja (ang. compilation) – tłumaczenie kodu źródłowego na kod binarny, którego postać zaleŜy od systemu operacyjnego. Łączenie (ang. link editing, linking) – łączenie pliku programu głównego z plikami nagłówkowymi, modułami w wyniku czego, powstaje gotowy do uruchomienia program wynikowy; wszystkie łączone pliki występują w postaci binarnej. 2. Języki programowania. Wśród wielu istniejących języków programowania moŜemy wyróŜnić kilkanaście z umownym podziałem na poziomy: Język maszynowy – przedstawione liczbowo (w kodzie dwójkowym lub szesnastkowym) lub zakodowane znakowo rozkazy gotowe do odczytania i wykonania przez procesor; kaŜdy procesor posiada listę rozkazów (od kilkunastu do kilkuset), które potrafi wykonać. * Przed właściwą kompilacją dokonywana jest tzw. kompilacja wstępna – prekompilacja (ang. preprocessing). Jednym z jej zadań jest dołączenie do kodu źródłowego plików nagłówkowych, modułów (.ppw, .h, …) przechowujących deklaracje standardowych funkcji i procedur, z których nasz program będzie korzystał. Innym zadaniem kompilacji wstępnej jest zastąpienie wszelkich napisów (deklarowanych na początku programu jako stałe) ich wartościami. 3 / 18 PROGRAMOWANIE 4 / 18 PROGRAMOWANIE Środowisko tworzenia programów. Struktura i podstawowe instrukcje programu. 1. Tworzenie i kompilacja z wiersza poleceń. 1. Przykładowy program. Po utworzeniu pliku z kodem źródłowym (w dowolnym „prostym” edytorze tekstu) wydajemy polecenie uruchomienia kompilatora „zewnętrznego” według poniŜszego schematu: kompilator program.pas <Enter> Szczegóły (w systemie Windows) mogą przedstawiać się następująco: uruchomienie wiersza poleceń: Start | Programy | Akcesoria | Wiersz polecenia przejście do katalogu z programem: >cd ”c:\Document and Settings\user\Moje Dokumenty\programy <Enter> otwarcie pustego pliku program.pas w edytorze edit: >edit program.pas <Enter> wpisanie kodu źródłowego programu tłumaczenie kodu źródłowego na kod wynikowy (program.exe): >fpc program.pas <Enter> Po wykonaniu powyŜszych poleceń w domyślnym katalogu znajdziemy plik program.exe, który moŜemy uruchomić przez wpisanie nazwy i zatwierdzenie klawiszem <Enter>. Na ekranie powinniśmy zobaczyć efekt działania naszego programu. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 var x,y: integer; BEGIN writeln(’AUTOKALKULATOR’); writeln; write(’Podaj pierwszą liczbę: ’); readln(x); write(’Podaj drugą liczbę: ’); readln(y); writeln; writeln(’Suma: ’,x+y); writeln(’RóŜnica: ’,x-y); writeln(’Iloczyn: ’,x*y); writeln(’Iloraz: ’,x/y:0:2); writeln(’Dzielenie całkowite: ’,x div y); writeln(’Reszta z dzielenia: ’,x mod y); readln; END. 2. IDE – zintegrowane środowisko programowania. a) Przygotowanie IDE (ang. Integrated Development Environment): (na przykładzie środowiska FreePascal – FPC 2.0.0) - instalacja programu (fpc-2.0.0.i386-win32.exe); - utworzenie w wybranym miejscu (np. na Pulpicie) katalogu do przechowywania własnych plików konfiguracyjnych i tworzonych programów oraz skopiowanie ścieŜki dostępu do tego katalogu; - utworzenie w wybranym miejscu (np. na Pulpicie) oraz konfiguracja właściwości skrótu do programu fp.exe (karta: Skrót - Rozpocznij w: „skopiowana wcześniej ścieŜka dostępu” oraz Zmień ikonę…, karta: Opcje - Opcje wyświetlania: Pełny ekran, karta: Układ - Rozmiar buforu ekranu: Wysokość: 25). 2. Podstawowe elementy programu. a) Początek (2) i koniec (17) programu. b) Deklaracja zmiennych (1): Po słówku var – rozpoczynającym deklarację – umieszczamy nazwy zmiennych (x, y) a następnie określamy typ danych (integer), czyli zakres wartości, jakie będą mogły przyjmować zmienne. Dostępne typy danych liczbowych zawierają poniŜsze tabele. Typ Byte Shortint Word Integer Longint Liczby całkowite Zakres 0 . . 255 -128 . . 127 0 . . 65535 -32768 . . 32767 -2147483648 . . 2147483647 Cardinal Int64 Qword 0 . . 4294967295 -9,2·1018 . . 9,2·1018 0 . . 18,4·1018 Typ Single Real (Double) Liczby rzeczywiste Zakres* 1,5E-45 . . 3,4E38 5,0E-324 . . 1,7E308 b) Podstawowe operacje w zintegrowanym środowisku: - otwarcie nowego dokumentu (File | New); - otwarcie istniejącego dokumentu (File | Open – F3); - zapisanie dokumentu (File | Save – F2); - zapisanie dokumentu pod inną nazwą (File | Save as…); - tłumaczenie, kompilacja programu (Compile | Compile – Alt+F9); - uruchomienie programu (Run | Run – Ctrl+F9); - „przechodzenie” między okienkami (Window | Next/Previous – F6/Shift+F6); - zamknięcie okienka (Window | Close – Alt+F3); - koniec pracy z programem (File | Exit – Alt+X). Długość [B] 1 1 2 2 4 4 8 8 Długość* [B] 4 (7-8) 8 (15-16) 5 / 18 PROGRAMOWANIE Extended Comp 1,9E-4951 . . 1,1E4932 -2E-64+1 . . 2E63-1 10 (19-20) 8 (19-20) c) Wypisywanie tekstu oraz wartości zmiennych lub wyraŜeń na standardowe wyjście, czyli ekran (3-5, 7, 9-15). 6 / 18 PROGRAMOWANIE Podejmowanie decyzji – instrukcja wyboru „IF…”. 1. Struktura i działanie instrukcji. d) Odczytywanie danych ze standardowego wejścia, czyli klawiatury (6, 8, 16). e) Operatory arytmetyczne: Operator + – * / div mod Operatory arytmetyczne Działanie Dodawanie Odejmowanie MnoŜenie Dzielenie „rzeczywiste” Dzielenie „całkowite”, np. 9 div 4 = 2 Reszta z dzielenia całkowitego, np. 9 mod 4 = 1 T IF warunek THEN instrukcja1 ELSE instrukcja2; warunek instrukcja1 T N instrukcja2 warunek N IF warunek THEN instrukcja; instrukcja f) Średnik (;) na końcu instrukcji oraz kropka (.) na końcu programu. g) Zmiana sposobu wyświetlania liczb rzeczywistych: writeln(’Iloraz: ’,x/y:0:2); Jeśli warunek jest prawdziwy to wykonywana jest instrukcja umieszczona za słówkiem THEN (instrukcja1), w przeciwnym wypadku – warunek nieprawdziwy – będzie wykonana instrukcja po słówku ELSE (instrukcja2). Część instrukcji od słówka ELSE jest opcjonalna. 2. Przykładowy program. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 var l,d,r: integer; BEGIN writeln(’PODZIELNOŚĆ LICZB’); writeln; write(’Podaj liczbę: ’); readln(l); write(’Podaj dzielnik: ’); readln(d); writeln; r:=l mod d; if r=0 then writeln(’Liczba PODZIELNA’) else writeln(’Liczba NIEPODZIELNA’); readln; END. 3. Elementy programu. a) Operacja i operator przypisania (:=). W instrukcjach przypisania wartość stojąca po prawej stronie operatora jest przypisywana do zmiennej stojącej po jego lewej stronie. Jeśli po prawej stronie znajduje się wyraŜenie to przed przypisaniem będzie obliczone (np. r:=l mod d). 7 / 18 PROGRAMOWANIE b) Operacja i operatory porównania: Operator = <> < > <= >= Operatory relacji Działanie Równy RóŜny Mniejszy Większy Mniejszy lub równy Większy lub równy c) Deklaracja modułów: Moduł to zewnętrzny plik z opisem dodatkowych funkcji. Dołączenie go do tworzonego przez nas programu pozwala na korzystanie z tych funkcji. Moduły dołączamy za pomocą słówka uses, po którym podajemy nazwę modułu. MoŜemy dodać większą ilość modułów rozdzielając ich nazwy znakiem przecinka. Przykład deklaracji modułu oraz uŜycia niektórych jego funkcji – poniŜej. uses crt; ... BEGIN clrscr; { funkcja do „czyszczenia” ekranu } ... textcolor(blue); { funkcja do ustalenia koloru tekstu } ... END. d) Instrukcja złoŜona: ... IF r=0 THEN begin textcolor(red); writeln(’Liczba...’); end else begin textcolor(blue); writeln(’Liczba...’); end; ... ĆWICZENIA 1. Korzystając z instrukcji „IF…” napisz program, który spośród 3 liczb podanych przez uŜytkownika wypisze największą (najmniejszą). 2. Uporządkuj rosnąco i wypisz na ekran 3 liczby podane przez uŜytkownika. 8 / 18 PROGRAMOWANIE Instrukcja wielokrotnego wyboru „CASE…”. 1. Przykładowy program. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var x,y: integer; zn: char; BEGIN writeln(’PROSTY KALKULATOR’); writeln; write(’Podaj pierwszą liczbę: ’); readln(x); write(’Podaj drugą liczbę: ’); readln(y); write(’Podaj znak działania (+,-,*,/,d-dziel.całk.,m-reszta…: ’); readln(zn); case zn of ’+’ : writeln(’Suma: ’,x+y); ’-’ : writeln(’RóŜnica: ’,x-y); ’*’ : writeln(’Iloczyn: ’,x*y); ’/’ : writeln(’Iloraz: ’,x/y:0:3); ’d’,’D’ : writeln(’Dzielenie całkowite: ’,x div y); ’m’,’M’ : writeln(’Reszta z dzielenia: ’,x mod y); else writeln(’Podałeś nieprawidłowy znak’); end; readln; END. 2. Opis instrukcji. Instrukcja case umoŜliwia wybór (tutaj spośród sześciu operacji) polecenia w zaleŜności od wartości zmiennej (zn) umieszczonej między słowami case i of. Jeśli zmienna zn przyjmie wartość róŜną od zdefiniowanych (tutaj róŜną od: +,-,*,/,d,D,m,M) wówczas program wykona instrukcję umieszczoną po słówku else. Zakończenie instrukcji case stanowi słówko end. Słowo else i występujące za nim polecenie (17) są opcjonalne, tzn. mogą nie wystąpić. Zmienna, na podstawie której dokonujemy wyboru moŜe być takŜe liczbą całkowitą (ćwicz. 1). Oprócz pojedynczych znaków (’+’) lub grupy znaków oddzielanych przecinkiem (’d’,’D’) dozwolone jest takŜe stosowanie zakresu (np.: ’a’..’z’). 3. Typ znakowy. Zmienna zn jest typu char (2) co oznacza, Ŝe moŜemy w niej przechowywać pojedyncze znaki. W pamięci komputera zmienne tego typu zajmują 1 bajt. ĆWICZENIA 1. Zastosuj instrukcję „CASE…” w programie wypisującym informacje o ilości dni podanego przez uŜytkownika miesiąca (miesiąc podawany jest w postaci liczb arabskich). 2. Na podstawie odpowiednich danych oblicz pola, obwody lub objętości wybranych figur geometrycznych (co najmniej trzech). 9 / 18 PROGRAMOWANIE 1. Instrukcja „REPEAT…”. instrukcja(-e) T (true /false) warunek N Działanie „pętli” rozpoczyna się od wykonania wszystkich instrukcji zawartych między słówkami repeat i until. Następnie sprawdzany jest warunek. Jeśli okaŜe się nieprawdziwy (false) to program wraca na początek pętli i wykonuje instrukcje ponownie. Dzieje się tak do momentu, kiedy warunek okaŜe się prawdziwy (true). Następuje wówczas przejście do kolejnej instrukcji programu (umieszczonej za pętlą „REPEAT…”. Ze względu na sprawdzanie warunku na końcu „pętli”, instrukcja(-e) zawarte pomiędzy słówkami repeat i until wykonane zostaną co najmniej jeden raz. 2. Instrukcja „WHILE…”. WHILE warunek DO instrukcja(-e); (true /false) T warunek N instrukcja(-e) Tym razem działanie „pętli” rozpoczyna się od sprawdzenia warunku. Jeśli jest prawdziwy (true) wykonywane są instrukcje umieszczone po słówku DO i program wraca do ponownego sprawdzenia warunku. W przeciwnym wypadku – warunek nieprawdziwy (false) - pętla kończy działanie i program przechodzi do dalszej części programu. Ze względu na sprawdzanie warunku na początku „petli” instrukcja(-e) umieszczone po słówku DO mogą być zupełnie pominięte. 3. Instrukcja „FOR…”. FOR i:=wp TO wk DO instrukcja; FOR i:=wk DOWNTO wp DO instrukcja; (1) (2) PROGRAMOWANIE Działanie pętli FOR sprowadza się do wykonania instrukcji umieszczonej po słówku DO tyle razy ile jest kolejnych wartości od wp do wk. Wartości te zmieniają się automatycznie o 1, rosnąco - jeśli uŜyjemy słówka TO (1), malejąco – jeśli uŜyjemy słówka DOWNTO (2). Jeśli zmienna sterująca i jest typu znakowego (char) to przyjmuje ona kolejne wartości z zestawu znaków ASCII. Powtarzanie operacji – opis instrukcji. REPEAT ... instrukcja(-e); ... UNTIL warunek; 10 / 18 11 / 18 PROGRAMOWANIE Powtarzanie operacji w programach. 1. Powtórzenie wykonania programu w zaleŜności od decyzji uŜytkownika. 1 2 3 4 5 6 7 8 9 10 11 ... var odp: char; BEGIN REPEAT ... instrukcja(-e); ... write(’Koniec programu?(t/n): ’); readln(odp); UNTIL (odp=’t’) or (odp=’T’) END. 2. Największa i najmniejsza spośród wprowadzanych liczb. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var liczba, max, min: integer; BEGIN writeln(’MAX I MIN’); writeln; writeln(’Wprowadzaj liczby (”0” – kończy wprowadzanie):’); readln(liczba); max:=liczba; min:=liczba; WHILE liczba<>0 DO begin if liczba>max then max:=liczba else if liczba<min then min:=liczba; readln(liczba); end; writeln(’Max = ’,max); writeln(’Min = ’,min); readln; END. 3. Suma i średnia arytmetyczna. 1 2 3 4 5 6 7 8 9 10 11 12 var s,liczba: integer; i: byte; BEGIN writeln('SUMA I SREDNIA ARYTMETYCZNA'); writeln(' Wprowadzaj kolejne liczby ("0" - konczy wprowadzanie'); s:=0; i:=1; write('x',i,' = '); readln(liczba); WHILE liczba<>0 DO begin s:=s+liczba; i:=i+1; write('x',i,' = '); readln(liczba); end; 12 / 18 13 14 15 16 17 PROGRAMOWANIE writeln; writeln(' Suma = ',s); writeln('Srednia = ',s/i:0:2); readln; END. 4. Wypisywanie liczb. a) liczby parzyste i nieparzyste: FOR i:=1 TO 100 DO write(i*2,’ ’); FOR i:=50 DOWNTO 1 DO write(i*2-1,’ ’); b) liczby Fibonacciego: 1 1 2 3 5 8 13 21 34 55 … 1 2 3 4 5 6 7 8 9 10 11 12 13 14 var n,i: integer; a,b,s: longint; BEGIN writeln('LICZBY FIBONACCIEGO'); writeln; write('Podaj ilosc liczb do wypisania: '); readln(n); a:=0; b:=1; writeln; write(b,' '); FOR i:=1 TO n-1 DO begin s:=a+b; write(s,' '); a:=b; b:=s; end; readln; END. 5. Rysowanie choinki z gwiazdek. 1 2 3 4 5 6 7 8 9 10 11 var i,wrs,gw: integer; BEGIN writeln('CHOINKA Z GWIAZDEK'); writeln; write('Podaj wysokosc (ilosc wierszy) choinki: '); readln(wrs); writeln; FOR i:=1 TO wrs DO begin FOR gw:=1 TO i DO write('*'); writeln; end; readln; END. 6. Znaki i ciągi znaków. a) litery alfabetu oraz znaki kodu ASCII: var z: char; i: byte; ... FOR z:=’a’ TO ’z’ DO write(z,’ ’); 13 / 18 PROGRAMOWANIE writeln; writeln; FOR i:=0 TO 255 DO write(char(i),’ ’); b) tekst „rozstrzelony”: 1 2 3 4 5 6 7 8 9 var s: string; i: byte; BEGIN writeln('TEKST ROZSTRZELONY'); writeln; writeln('wpisz dowolny tekst (do 250 znakow):'); writeln; readln(s); writeln; FOR i:=1 TO length(s) DO write(s[i],' '); readln; END. 14 / 18 PROGRAMOWANIE Przechowywanie danych w tablicach. 1. Definicja i rodzaje tablic. Tablica to zbiór danych tego samego typu (mat. wektor, macierz). Deklaracje oraz wpisywanie wartości do komórek tablicy przedstawiają poniŜsze przykłady. a) Tablice jednowymiarowe. var tl: array[1..5] of byte; 1 tl[4]:=35; 2 3 tl 4 5 35 var tz: array[1..5] of char; 1 tz[3]:=’a’; 2 tz 3 4 5 4 a var tz: string[5]; ĆWICZENIA 1. Podaj ile liczb zostanie wypisanych w zadaniu 4a. 2. Korzystając z przykładu umieszczonego w punkcie 5, napisz program rysujący „pełną” choinkę.. tz:=’ala’; tz 1 2 3 a l a 5 var ts: array[1..2] of string[3]; 1 ts[2]:=’ola’; 2 tz 1 2 3 4 o l a 1 2 3 4 write(’Imie: ’); readln(ts[2]); Dla ułatwienia pracy z tablicami często umieszcza się wielkość tablicy pod określoną nazwą w części definicji stałych, np.: const max=50; var tl: array[1..max] of integer; b) Tablice dwuwymiarowe. var dtl: array[1..3,1..5] of integer; 1 dtl[1,4]:=35; dtl[2,2]:=-32; 1 2 3 2 3 4 5 35 -32 2. Wartości początkowe tablic. Wartości początkowe elementom tablic moŜemy nadać w części deklaracji stałych, np.: const tl: array[1..5] of byte = (1,2,3,4,5); const samogloska: array[1..6] of char = (’a’,’e’,’i’,’o’,’u’,’y’); const dtl: array[1..2,1..3] of byte = ((1,3,5),(2,4,6)); Wartości te mogą być zmieniane w trakcie działania programu w odróŜnieniu od stałych „samodzielnych”, np.: const max=3; gdzie stała max nie moŜe przyjmować w trakcie działania programu innych wartości. 15 / 18 PROGRAMOWANIE 16 / 18 PROGRAMOWANIE Podprogramy – procedury i funkcje. Moduł – zbiór procedur, funkcji oraz zmiennych. 1. Ogólna definicja procedury i funkcji. 1. Definiowanie modułu. PROCEDURA procedure nazwa_p(parametry); deklaracje; begin instrukcje; end; FUNKCJA function nazwa_f(parametry):typ_wyniku; deklaracje; begin instrukcje; nazwa_f:=wyraŜenie; end; Zarówno w przypadku procedury jak i funkcji wystąpienie parametrów (argumentów) oraz ewentualnych deklaracji jest opcjonalne. 2. Definicja i wywołanie podprogramów. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 uses crt; procedure start(t:string[80]); begin clrscr; writeln(t); writeln; end; function silnia(n:byte):longint; var s:longint; i:byte; begin s:=1; for i:=1 to n do s:=s*i; silnia:=s; end; var liczba: byte; BEGIN start('OBLICZENIA'); write('Podaj liczbę naturalną: '); readln(liczba); writeln(’Silnia z ’,liczba,’ = ’,silnia(liczba)); readln; END. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 unit modul; interface uses crt; procedure start(t:string[80]); function silnia(n:byte):longint; function potega(x,y:byte):longint; implementation procedure start(t:string[80]); begin clrscr; writeln(t); writeln; end; function silnia(n:byte):longint; var s:longint; i:byte; begin s:=1; for i:=1 to n do s:=s*i; silnia:=s; end; function potega(x,y:byte):longint; var p:longint; i:byte; begin p:=x; for i:=1 to y-1 do p:=p*x; potega:=p; end; end. Po wpisaniu treści modułu zapisujemy go pod taką nazwą, jaką umieściliśmy po słówku unit (program sam dopisze rozszerzenie .pas). Następnie dokonujemy kompilacji. Jeśli nie będzie błędów po tej operacji zostanie utworzony na dysku plik o rozszerzeniu .ppu. Jest to standardowe rozszerzenie nazw plików modułów środowiska FreePascal (w środowisku TurboPascal skompilowane moduły otrzymują rozszerzenie .tpu). Od tego momentu moduł jest gotowy do uŜycia. Modułu nie uruchamiamy – poniewaŜ nie jest on programem – tylko dołączamy do wybranego programu przy uŜyciu polecenia uses. PoniŜej sposób dołączenia modułu do programu i korzystanie z zawartych w nim podprogramów. 2. Program z wykorzystaniem modułu. Parametry podawane przy definicji procedury lub funkcji nazywamy parametrami formalnymi (2,7), natomiast parametry podane w momencie wywołania nazywamy parametrami aktualnymi (16,18). Jeśli deklarujemy zmienne w procedurze lub funkcji to nazywamy je zmiennymi lokalnymi; zachowują one swoje znaczenie tylko w obrębie danej procedury lub funkcji. Zmienne deklarowane poza podprogramami nazywane są zmiennymi globalnymi i obowiązują zarówno w programie głównym jak i we wszystkich procedurach i funkcjach. 1 2 3 4 5 6 7 8 9 uses modul; var liczba,pot: byte; BEGIN start('OBLICZENIA'); writeln(’SILNIA’); write('Podaj liczbę naturalną: '); readln(liczba); writeln(’Silnia z ’,liczba,’ = ’,silnia(liczba)); writeln; writeln(’POTĘGOWANIE’); write('Podaj liczbę naturalną: '); readln(liczba); 17 / 18 10 11 12 13 PROGRAMOWANIE write(’Podaj potęgę: ’); readln(pot); writeln(liczba,’ do potęgi ’,pot,’ = ’,potega(liczba,pot)); readln; END. 18 / 18 PROGRAMOWANIE Pliki – odczytywanie i zapisywanie danych. 1. Podstawowe operacje na plikach tekstowych. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var d,w: text; l: integer; dodatnie, ujemne: byte; BEGIN writeln('ZLICZANIE DODATNICH I UJEMNYCH LICZB'); writeln; assign(d,’dane.txt’); assign(w,’wyniki.txt’); reset(d); rewrite(w); while not eof(d) do begin readln(d,l); if l>=0 then dodatnie:=dodatnie+1 else ujemne:=ujemne+1; end; writeln(w,’Liczb dodatnich: ’,dodatnie); writeln(w,’Liczb ujemnych: ’,ujemne); close(d); close(w); END. W programie deklarujemy zmienne typu text (1), aby później skojarzyć je z właściwymi plikami za pomocą instrukcji assign (6,7). Następnie otwieramy plik do odczytywania danych – reset (8) oraz tworzymy nowy plik do zapisywania danych – rewrite (9). W trakcie odczytywania danych z pliku stosujemy standardową instrukcję readln (11), której pierwszym parametrem jest odpowiednia zmienna plikowa. To samo dotyczy instrukcji zapisywania danych do pliku – writeln (14,15). W trakcie wykonywania operacji na plikach przydatną moŜe okazać się instrukcja sprawdzająca osiągnięcie końca pliku – eof (10). Funkcja ta zwraca wówczas wartość true. Po ukończeniu wszelkich operacji na plikach zamykamy je poleceniem close (16,17).