PROCEDURY i FUNKCJE w Pascalu
Procedurą lub funkcją nazywamy wyodrębnioną część programu, stanowiącą pewną całość, posiadającą jednoznaczną nazwę i ustalony sposób wymiany informacji z pozostałymi częściami programu.
Procedury i funkcje stosowane są do wykonania czynności, które mogą być wykorzystywane w różnych programach, lub do wykonania czynności wielokrotnie powtarzanych przez dany program.
Definicja procedury w Pascalu
procedure nazwa_procedury (lista_parametrów_formalnych) część opisowa
{tak jak w programie głównym z wyjątkiem deklaracji modułów}
begin
ciąg instrukcji, które są wykonywane po wywołaniu procedury end;
Definicja funkcji w Pascalu
function nazwa_funkcji (lista_parametrów) : typ wyniku część opisowa
{tak jak w programie głównym z wyjątkiem deklaracji modułów}
begin
ciąg instrukcji, które są wykonywane po wywołaniu funkcji; nazwa_funkcji:=
{przypisanie do funkcji wartości wyrażenia}
end;
Wywołanie funkcji - następuje za pomocą podania nazwy funkcji jako argumentu dowolnego wyrażenia o postaci:
y:= nazwa_funkcji ( lista_parametrów_aktualnych )
Wywołanie procedury - następuje za pomocą podania nazwy procedury o postaci:
nazwa_procedury;
lub
nazwa_procedury ( lista_parametrów_aktualnych )
Przykład - definicja funkcji, która poszukuje
maksimum w zbiorze liczbowym
type wektor = array[1..50] of integer;
var tab1, tab2 : wektor;
function Max(n:integer; x:wektor) : integer
{ Wartością funkcji jest największa wśród n liczb danych w tablicy x[1..n]. W programie głównym należy zdefiniować wykorzystany przy definicji funkcji typ danych wektor (patrz wyżej) }
var
i, maks : integer;
begin
maks:=x[1];
for i:=2 to n do if x[i]>maks then maks:=x[i];
Max:=maks;
end;
…………………………….. Przykłady wywołania funkcji Max …………………
y1:= Max(10,tab1);
y2:= 5*sqrt(Max(10,tab2));
function [war_1,…,war_k] = nazwa_funkcji (argument_1, ... , argument_N) ciąg instrukcji
war_1=…
war_k=…
end
% słowo kluczowe end nie jest konieczne, ale często stosowane Przykład 1:
Przykład 2:
Napisz funkcję wyznaczającą wartość
Napisz funkcję wyznaczającą obwód
wyrażenia y = x3 +2x oraz z = y2 - x2
prostokąta o bokach a i b
% Funkcja obliczająca y oraz z
function wynik = obwod(a,b)
function [y,z] = wielomian(x)
if a<0 | b<0
y = x^3 + 2*x;
disp( ’złe dane’ ); return
z = y^2 – x^2;
else
end
wynik=2*a + 2*b;
end
Funkcję wywołuje się podając jej nazwę i w nawiasie listę parametrów aktualnych oddzielonych przecinkami, np.
» [w1,w2]=wielomian(2)
» c=2*obwod(2,5) +10
Standardowe funkcje arytmetyczne w Pascalu
Wywołanie funkcji standardowej:
nazwa_funkcji(argument); np. Sqr(x) co znaczy x*x
nazwa_funkcji znaczenie funkcji
typ argumentu
Abs
wartość bezwzględna
rzeczywisty, całkowity
ArcTan
arcus tangens
rzeczywisty, całkowity
Cos
cosinus
rzeczywisty, całkowity
Exp
e do potęgi
rzeczywisty, całkowity
Frac
część ułamkowa argumentu
rzeczywisty, całkowity
Int
część całkowita argumentu
rzeczywisty, całkowity
Ln
logarytm naturalny
rzeczywisty, całkowity
Pi
3.141592653589793238
Sin
sinus
rzeczywisty, całkowity
Sqr
kwadrat argumentu
rzeczywisty, całkowity
Sqrt
pierwiastek kwadratowy
rzeczywisty, całkowity
Ważniejsze funkcje elementarne MATLAB’a Nazwa funkcji
Objaśnienie
sqrt (x)
pierwiastek ze zmiennej x
abs (x)
wartość bezwzględna ze zmiennej x
exp (x)
e do potęgi x
log
logarytm naturalny
log2
logarytm o podstawie 2
log10
logarytm o podstawie 10
sign
znak
mod
reszta z dzielenia
sin, cos, tan, cot
funkcje trygonometryczne
sinh, cosh, tanh, coth
funkcje hiperboliczne
asin, acos, atan, acot
funkcje odwrotne do trygonometrycznych
round
zaokrągla do najbliższej całkowitej
ceil
zaokrąglenie w górę (dosłownie: sufit)
fix
zaokrągla w stronę zera
floor
zaokrągla w dół (dosłownie: podłoga)
imag
część urojona liczby zespolonej
real
część rzeczywista liczby zespolonej
gcd
największy wspólny podzielnik
lcm
najmniejsza wspólna wielokrotność
Wykaz funkcji elementarnych można uzyskać wpisując: help elfun
OPERACJE WEJŚCIA - WYJŚCIA
Wykonanie programu przez komputer polega w zasadzie na wprowadzeniu odpowiednich danych do pamięci operacyjnej, wykonaniu instrukcji przetwarzających dane oraz wyprowadzeniu uzyskanych wyników.
Standardowe wejście – wyjście w Pascalu (dotyczy w uproszczeniu klawiatury i ekranu monitora). Do wprowadzenia danych z klawiatury używamy następujących procedur:
read (lista_zmiennych);
{kursor pozostaje w tej samej linii}
readln (lista_zmiennych)
{kursor wędruje na początek następnej linii}
Przykład read(x, y, tekst);
Do wyprowadzenia danych na ekran monitora używamy procedur: write (’ jakiś tekst ’, lista_zmiennych);
{kursor pozostaje w tej samej linii}
writeln (’ jakiś tekst ’, lista_zmiennych);
{kursor wędruje do linii niżej}
Przykład write( ’zmienna x = ’ , x , ’ a zmienna y = ’ , y);
Standardowe wejście – wyjście w MATLAB-ie Wczytanie z klawiatury do zmiennej (liczby lub łańcucha znaków) za pomocą funkcji input( ’jakiś tekst’ ), np.:
» x = input ( ’ Podaj wartość x: ’ );
Podaj wartość x: | % ten tekst zostanie wyświetlony a wprowadzona z klawiatury liczba zostanie przypisana zmiennej x
» imie = input( ’Jak masz na imię? ’ , ’s’ );
Jak masz na imię? | % ten tekst zostanie wyświetlony a wprowadzony z klawiatury ciąg znaków zostanie przypisany zmiennej
imie jako łańcuch znaków. Użycie parametru ’s’ w funkcji input powoduje, iż wprowadzona dana jest traktowana jako łańcuch znaków.
Wyświetlanie na ekranie za pomocą funkcji disp( [ ] ) disp( nazwa_zmiennej lub ’tekst’) np.:
» X=3.25; y=5; z=1.05; format short; disp(X) % wyświetli 3.2500
» disp( [X, y, z] ) % wyświetli 3.2500 5 1.0500
» disp( [ ’ X = ’ , num2str(X)] ) % wyświetli X = 3.25
PRZETWARZANIE PLIKÓW
var plik1 : Text; {deklaracja zmiennej plikowej}
var plik2 : file of real;
W przetwarzaniu plików możemy wyróżnić następujące sytuacje:
- zakładanie, otwieranie, zamykanie pliku
- wprowadzanie elementów do założonego pliku;
- dodawanie elementów do pliku istniejącego;
- przeszukiwanie pliku;
- wyprowadzanie elementów z pliku;
- wymiana elementów pliku.
Typowe procedury standardowe do przetwarzania pliku:
- Assign (identyfikator-pliku, wyrażenie-łańcuchowe);
{gdzie identyfikator pliku oznacza dowolną zmienną plikową a wyrażenie łańcuchowe – fizyczny zbiór danych, procedura ta wiąże (kojarzy), zmienną plikową z fizycznym zbiorem danych}
- Reset (zmienna-plikowa)
- (otwarcie pliku – istniejący zbiór);
- Rewrite (zmienna-plikowa) - (otwarcie pliku – nowy zbiór).
Skojarzenie zmiennej ze zbiorem
Przed wykonaniem jakichkolwiek czynności zmienną plikową należy skojarzyć (powiązać) ze zbiorem dyskowym za pomocą procedury Assign:
Assign(F, sciezka_dostepu);
Ścieżka dostępu jest łańcuchem typu String, może zawierać tylko nazwę pliku, ścieżkę względną lub pełną ścieżkę dostępu do pliku (może to być ścieżka wskazująca nie istniejący plik danych):
{ Plik w katalogu bieżącym }
Assign(F, 'dane.txt');
{ Plik w katalogu nadrzędnym }
Assign(F, '..\osoby.txt');
{ Plik w podkatalogu DANE }
Assign(F, 'dane\sms.txt');
{ Plik na dysku d: }
Assign(F, 'd:\kopie\archiwum\lista.txt');
Otwarcie i zamknięcie pliku
Plik skojarzony ze zmienną plikową należy otworzyć jedną z procedur:
Reset(F);
{lub}
Rewrite(F);
Procedura Rewrite tworzy na dysku nowy pusty plik danych o nazwie wskazanej podczas kojarzenia zmiennej plikowej z fizycznym zbiorem danych i otwiera go do zapisu danych - jeśli plik taki już istnieje, to jego zawartość zostanie usunięta.
Procedura Reset otwiera istniejący plik danych skojarzony ze zmienną plikową.
Po zakończeniu przetwarzania plik powinien zostać zamknięty za pomocą procedury
Close(F);
Po zamknięciu pliku zmienną plikową można skojarzyć z innym fizycznym zbiorem danych.
Przetwarzanie plików w MATLAB-ie
1. Zapis i odczyt tzw. MAT-pliku (dane w postaci binarnej) save
% zapisuje wszystkie zmienne do pliku binarnego matlab.mat save nazwa_pliku
% zapisuje wszystkie zmienne do pliku binarnego nazwa_pliku.mat load
% wczytuje dane z pliku matlab.mat
load nazwa_pliku
% wczytuje wszystkie dane z pliku nazwa_pliku.mat
load nazwa_pliku x y % wczytuje zmienne x, y z pliku nazwa_pliku.mat 2. Zapis i odczyt do pliku tekstowego (dane w postaci ASCII) save nazwa_pliku.roz x y -ascii
% zapisuje zmienne x, y do pliku nazwa_pliku.roz
% Uwaga: rozszerzenie pliku może być dowolne,
ale dane muszą tworzyć jakąś tablicę.
load nazwa_pliku.roz
% wczytuje wszystkie dane z pliku nazwa_pliku.roz, a w konse-kwencji w zmiennej nazwa_pliku są wartości wczytanych danych Z = load( ’nazwa_pliku.roz’ , ’-ascii’ );
% spowoduje, że do zmiennej Z będą
wczytane dane z pliku nazwa_pliku.roz