Lekcja 6: Pascal. Procedura i funkcja S. Hoa Nguyen 1 Materiał Książka: Programowanie w języku Pascal. Rozdział 9. Podprogramy Podprogramy - motywacja Skrócenie zapisu (wielokrotne powtórzenia tej samej sekwencji instrukcji), Lepsze wykorzystanie pamięci operacyjnej (zmienne lokalne), Ułatwienie i przyśpieszenie projektowania programu (dekompozycja), Czytelność programu i łatwość modyfikacji. 2 Procedura i funkcja Definicja procedur i funkcji: PROGRAM nazwa; uses {deklaracja bibliotek} var {deklaracja zmiennych globalnych}; {nagłówek procedury} PROCEDURE NazwaProcedury(parametr1:typ1; parametr2:typ2); var {deklaracja zmiennych lokalnych} {początek procedury} I1; I2; {nagłówek funkcji} FUNCTION NazwaFunkcji(parametr1:typ1; parametr2:typ2): typ_funkcji; var {deklaracja zmiennych lokalnych}; {początek funkcji} I1; I2; NazwaFunkcji:= wyrażenie; 1
{Program główny}... {wywołanie procedury} NazwaProcedury(parametr1, parametr2); {wywołanie funkcji} wynik := NazwaFunkcji(parametr1, parametr2); Przykład 1 (Kopij linię) program Kopiuj; PROCEDURE KopujLinie; var z: char; while not eoln do read(z); write(z); readln; KopujLinie; readln; Przykład 2 (Silnia) program obliczenie_silni; FUNCTION Silnia(n: integer): LongInt; if (n <= 1) then Silnia:= 1 else Silnia := n * Silnia(n-1); Writeln(silnia(5)); readln; 2
Rysunek 1: Parametr formalny i aktualny Przekazanie parametrów Przykład 3 (Przekazanie parametrów) program PrzekazanieParametrow; var tmp : string; PROCEDURE WczytajNapis(var s : string); WriteLn( Prosze podac napis ); ReadLn(s); PROCEDURE WczytajNapisBezVar(s : string); WriteLn( Prosze podac napis ); ReadLn(s); tmp := Ala ma kota ; WczytajNapisBezVar(tmp); {tmp zostało zmienione w procedurze} WriteLn(tmp); {tmp dalej ma wartość Ala ma kota pomimo zmian wewnątrz procedury} 3
WczytajNapis(tmp); WriteLn(tmp); {Teraz tmp będzie takie jakie wczytano z klawiatury} Zmienne używane z procedurze i funkcji Rysunek 2: Zmienne globalne i lokalne 3 Zadania Zadanie 1 (Średnia arytmetyczna). Napisz funkcję, która znajduje ile liczb w tablicy liczb rzeczywistych T jest większych od średniej arytmetycznej wszystkich liczb z tej tablicy. A=[1,2,3,4,5,6] Średnia: 3.5 Liczba większa od średniej: 3 Zadanie 2 (Szyfr Cezara). Szyfr Cezara jest najstarszą metodą szyfrowania, która polega na zastępowaniu litery, znakiem znajdującym się n miejsca dalej w alfabecie. Napisz procedurę SzyfrCezara z parametrem n, która zamieni każdą literę lub cyfrę w podanym tekście literą lub cyfrą o n pozycji dalej w kodzie ASCII. Jeśli litera jest mała, to zastępuje ją małą literą, a jeśli litera jest drukowana, to zastępuje go dużą literą. Wywołać funkcję dla n = 3. ABcde56789 4
DEfgh89012 Zadanie 2.1 (Deszyfracja do kodu Cezara). Napisz procedurę Deszyf- Cezara z parametrem n do odkodowania szyfr Cezara. Wywołać funkcję dla n = 3. Zadanie 3 (Zamiana systemu dziesiętnego na trójkowy). Napisać procedurę, która zamieni liczbę z systemu dziesiętnego na trójkowy i sprawdzi czy prezentacja trójkowa jest palindromem. Zadanie 4 (Zamiana systemu trókowego na dziesiętny). Napisać procedurę, która zamieni liczbę z systemu trójowego na dziesiętny. Zadanie 5 (Dodawanie w systemie trójkowym). Napisać procedurę Suma, która wczytuje dwie liczby całkowite dodatnie zapisane w systemie trókowym zwraca ich sumę (w prezentacji trójkowej). 10120 1002110 1020000 Zadanie 6 (Transponowanie macierzy). Napisz procedurę, która transponuje macierz n na n liczb rzeczywistych. Zadanie 7 (Najdłuższy podciąg rosnący). Dany jest ciąg liczb całkowitych. Napisać funkcję, która zwraca długość najdłuższego podciągu niemalejącego. 3433211234521 Długość najdluższego ciągu rosnącego: 5 Zadanie 8 (Zliczanie dużych liter). Napisz funkcję, która dla podanego tekstu (zakłada się, że tekst kończy się znakiem koniec linii - eoln), zwraca w formie tablicy liczbę wystąpień każdej z dużych liter. ALA MA KOTA A:4 K:1 L:1 M:1 O:1 T:1 5
4 Praca domowa Zadanie 9 (Zliczanie znaków). Modyfikować procedurę w zadaniu 8, żeby otrzymać funkcję, która dla podanego tekstu (zakłada się, że tekst kończy się znakiem koniec linii - eoln), zwraca w formie tablicy liczbę wystąpień każdej z dużych, małych liter i cyfr. Zadanie 10 (Minimalny fragment). Napisz procedurę, która dla danej tablicy n liczb całkowitych znajdzie liczby 1 p 1 p 2 n takie, żeby p 2 p 1 było najmniejsze oraz po uporządkowaniu fragmentu tablicy pomiędzy p 1 a p 2 cała tablica była uporządkowana niemalejąco. Rozwiązania o złożoności powyżej O(n) będą znacznie niżej oceniane. 1234533678 p1 = 4 p2 = 7 6