background image

Paradygmaty 

Paradygmaty 

programowania

programowania

Wykład 5 – Przepływ sterowania,

procedury i funkcje

procedury i funkcje

background image

Przepływ sterowania

Przepływ sterowania

C

E

F

E

T

F

Komendy o pojedynczym wejściu i wyjściu

C

C

1

C

2

C

1

E

T

F

C

1

C

2

E

T

F

background image

Przepływ sterowania 

Przepływ sterowania –

– sekwensery

sekwensery

Sekwenser

– konstrukcja, która pozwala na przeniesienie

kontroli w inne miejsce programu, nazywane

celem

sekwensera

.

Sekwensery

nisko-poziomowe

Skoki

wysoko-poziomowe

Komendy ucieczki
Wyjątki

background image

Przepływ sterowania 

Przepływ sterowania –

– skoki

skoki

Skok

sekwenser,

który

pozwala

na

przeniesienie

kontroli

w

określone

miejsce

programu.

Najczęściej

przyjmuje postać komendy goto L;, gdzie L jest etykietą
oznaczającą miejsce docelowe.

int main()

C

int main()
{

C

1

;

if(E

1

goto A;

if(E

2

goto B;

C

2

;

A:

C

3

;

B:

C

4

;

C

5

;

}

C

1

1

E

1

2

E

2

C

2

C

3

C

4

background image

Komenda ucieczki

– sekwenser, który przerywa wykonanie

komendy blokowej lub procedury. Pozwala na przepływ
sterowania typu: jedno-wejście wiele-wyjść

Przepływ sterowania 

Przepływ sterowania –

– komenda ucieczki

komenda ucieczki

int sumuj(int tab[])

C

1

int sumuj(int tab[])
{

int suma = 0;
for(int i=0; i<10; i++)
{

suma += tab[i];
if(suma > 10)

break;

}
return suma;

}

C

2

1

E

1

T

F

C

1

2

E

2

T

F

background image

Przepływ sterowania 

Przepływ sterowania –

– wyjątki

wyjątki

Sytuacja nietypowa (wyjątkowa)

– jest to sytuacja, w której

program nie może działać normalnie.

Wyjątki

– są techniką pozwalającą na obsługę sytuacji

wyjątkowych.

Wyjątek

– jednostka reprezentująca sytuację wyjątkową lub

rodzinę takich sytuacji.

background image

Przepływ sterowania 

Przepływ sterowania –

– wyjątki

wyjątki

Wyjątki

Rzucanie wyjątku

Przechwytywanie 

wyjątku

Rzucanie wyjątku: 

Rzucanie wyjątku: 

if(E) throw new Ex;

Przechwytywanie wyjątku:

try

C

a

; C

b

;

catch(T

1

I

1

) C

1

;


catch(T

n

I

n

) C

n

;

finally C

f

background image

double funkcja(double a, double b) {

if (b == 0)

throw new DivideByZeroException("Nie dzieli się przez zero");

else

return a / b;

}

static void Main(string[] args){ 

double wartosc=0;

Przepływ sterowania 

Przepływ sterowania –

– wyjątki (przykład C#)

wyjątki (przykład C#)

double wartosc=0;
try

{

wartosc = Funkcja(3, 0);

}
catch (DivideByZeroException e) {

Console.WriteLine(e.Message);
wartosc = 0;

}
finally {

wartosc = 1;

}

}

background image

Abstrakcja w programowaniu

Abstrakcja w programowaniu

W języku programowania abstrakcja pozwala na rozróżnienie

co

jednostka programu robi i

jak

jednostka programu pracuje.

Procedura

– jednostka obejmująca instrukcje programu.

Procedury

Procedury 

właściwe 

Procedury 

funkcyjne (funkcje)

Procedura

– jednostka obejmująca instrukcje programu.

background image

Procedury właściwe

Procedury właściwe

Procedura właściwa

obejmuje komendy do wykonania

i podczas działania modyfikuje wartości zmiennych.

C++:

Pascal:

C++:

void I(P

1

,…,P

N

{

B

}

Pascal:

procedure I(P

1

,…,P

N

)

var

D

begin

B

end;

background image

Procedury funkcyjne

Procedury funkcyjne

Procedura funkcyjne (funkcje)

obejmują wyrażenia, których

wartość powinna zostać obliczona. Kiedy funkcja jest
wywoływana zwraca wyznaczoną wartość zawartego w niej
wyrażenia.

C++:

Pascal:

C++:

I(P

1

,…,P

N

{

B

}

Pascal:

function I(P

1

,…,P

N

) : T

var

D

begin

B

end;

background image

Parametry i argumenty funkcji

Parametry i argumenty funkcji

Argument

jest wartością lub jednostką przekazywaną do 

procedury.

Parametr aktualny

jest wyrażeniem, które zwraca nam 

Parametr aktualny

jest wyrażeniem, które zwraca nam 

argument.

Parametr formalny

jest identyfikatorem, za pomocą którego 

może mieć dostęp do argumentu.

background image

Parametry i argumenty funkcji

Parametry i argumenty funkcji

int suma ( int a, int b )
{

return a + b;

}

int main()

parametry formalne

{

int a = 3;
int b = 4;
cout<<suma( a, b );
return 0;

}

parametry aktualne

background image

Mechanizm przekazywania parametrów

Mechanizm przekazywania parametrów

Machanizm przekazywania parametrów 

- forma skojarzenia 

wartości atrybutu z odpowiednim parametrem formalnym.

mechanizm 

przekazywania atrybutów

przekazywania atrybutów

przekazywanie przez 

wartość

przekazywanie przez 

referencję

background image

Przekazywanie parametrów przez wartość

Przekazywanie parametrów przez wartość

Przekazywanie parametrów przez wartość 

- pozwala aby 

wartość była kopiowana do i/lub z procedury.

Przekazywanie parametrów 

przez wartość

przez wartość

Przekazywanie 

do funkcji

Przekazywanie 

z funkcji

Przekazywanie 

do i z funkcji

background image

Przekazywanie parametrów przez wartość do funkcji

Przekazywanie parametrów przez wartość do funkcji

Podczas wywoływania funkcji tworzona jest zmienna lokalna 

i inicjalizowana wartością odpowiadającego jej argumentu. 

Wszelkie modyfikacje tej zmiennej lokalnej 

nie są widoczne

poza funkcją.

ADA:

C++:

ADA:

procedure Dodaj(a, b: in Integer) 
is

suma : Integer := 0;

begin

a := a + 5;
suma := a + b;

end;

x := 5;
Dodaj(x, 5);

C++:

void Dodaj(int a, int b)
{

int suma = 0;
a += 5; 
suma = a + b;

}

x = 5;
Dodaj(x, 5);

background image

Przekazywanie parametrów przez wartość z funkcji

Przekazywanie parametrów przez wartość z funkcji

Podczas wywoływania funkcji tworzona jest zmienna lokalna 

ale 

nie inicjalizowana

Kiedy następuje powrót z procedury 

wartość tej zmiennej jest przypisana do argumentu

.

ADA:

ADA:

procedure Dodaj(a, b: in Integer, suma : out Integer) is
begin

a := a + 5;
suma := a + b;

end;

x: Integer;

Dodaj(3, 4, x);

background image

Przekazywanie parametrów przez wartość do i z funkcji

Przekazywanie parametrów przez wartość do i z funkcji

Jest to połączenie dwóch poprzednich metod.

Podczas wywoływania funkcji tworzona jest zmienna lokalna 

inicjalizowana

wartością odpowiadającego jej argumentu. 

Kiedy następuje powrót z procedury wartość tej zmiennej jest 

przypisana do argumentu

.

ADA:

procedure PodzielPrzez2(a: in out Float) is
begin

a := a / 2;

end;

x : Float := 5.0;

PodzielPrzez2(x);

background image

Przekazywanie parametrów przez wartość 

Przekazywanie parametrów przez wartość -- podsumowanie

podsumowanie

Rodzaj

Argument

Rozpoczęcie

procedury

Zakończenie 

procedury

Przekazywanie do

wartość

PF = WA

-

Przekazywanie z

zmienna

-

ZA = PF

Przekazywanie do i z

zmienna

PF = WA

ZA = PF

PF – parametr formalny

WA – wartość argumentu

ZA – zmienna argumentu

background image

Przekazywanie parametrów przez referencję

Przekazywanie parametrów przez referencję

Przekazywanie parametrów przez referencję 

- pozwala aby 

parametr formalny był przypisany bezpośrednio do argumentu

Przekazywanie parametrów 

przez referencje

przez referencje

Przekazywanie 

stałych

Przekazywanie

zmiennych

Przekazywanie

funkcji

background image

Aliasing

Aliasing

Alising

– występuje przy przekazywaniu parametrów przez 

referencję gdy, dwa lub więcej parametrów formalnych jest 

bezpośrednio przypisanych do tej samej zmiennej.

void funkcja(int &v1, int &v2, int &v3)
{

{

v1 -= v3;
v2 += v3;

}

funckja(x,y,z);
funkcja(x,y,x);

background image

Zmienna liczba parametrów funkcji

Zmienna liczba parametrów funkcji

#include<stdarg.h> //

C++

int funkcja(int zmiennaNazwana, …) {

va_list args;
va_start(args, zmiennaNazwana);

char ch = va_arg(args, char);

char dp = va_arg(args, char);


va_end(args);

}

void funkcja(params string[] vars) //

C#

{

for (int i = 0; i < vars.Length; i++)

Console.WriteLine(vars[i].ToString());

}