background image

Paradygmaty 

Paradygmaty 

programowania

programowania

Lab. 2

Lab. 2

background image

Napisa

Napisa

ć

ć

program wyznaczaj

program wyznaczaj

ą

ą

cy warto

cy warto

ść

ść

Symbolu Newtona, gdzie

Symbolu Newtona, gdzie

Symbol Newtona (czytamy: 

Symbol Newtona (czytamy: 

n nad k

n nad k

n po k

n po k

lub

lub

k z n

k z n

) jest funkcj

) jest funkcj

ą

ą

dw

dw

ó

ó

ch 

ch 

argument

argument

ó

ó

w ca

w ca

ł

ł

kowitych nieujemnych, zdefiniowan

kowitych nieujemnych, zdefiniowan

ą

ą

jako:

jako:

)!

(

!

!

k

n

k

n

k

n

=

⎟⎟

⎜⎜

dla danego dodatniego   n   oraz  0 <= k <= n

dla danego dodatniego   n   oraz  0 <= k <= n

background image

)!

(

!

!

k

n

k

n

k

n

=

⎟⎟

⎜⎜

background image

A teraz napiszmy program wyznaczaj

A teraz napiszmy program wyznaczaj

ą

ą

cy warto

cy warto

ść

ść

Symbolu Newtona 

Symbolu Newtona 

wyra

wyra

ż

ż

onego wzorem rekurencyjnym postaci:

onego wzorem rekurencyjnym postaci:

=

=

<

<

⎟⎟

⎜⎜

⎛ −

+

⎟⎟

⎜⎜

=

⎟⎟

⎜⎜

n

k

k

gdy

n

k

gdy

k

n

k

n

k

n

lub

0

1

0

1

1

1

dla danego dodatniego   

dla danego dodatniego   

n   

n   

oraz

oraz

0 <= k <= n

0 <= k <= n

⎟⎟

⎜⎜

6

49

Czy obydwoma programami mo

Czy obydwoma programami mo

ż

ż

na policzy

na policzy

ć

ć

liczb

liczb

ę

ę

kombinacji w totka czyli

kombinacji w totka czyli

background image

1

1

1

1

1

1

1

1

1

0

1

1

1

0

1

1

1

1

0

1

1

2

2

1

2

1

2

0

2

1

2

0

2

1

2

3

1

3

1

3

0

3

2

4

1

4

10

!

3

!*

2

!

5

)!

2

5

!*(

2

!

5

2

5

⎟⎟

⎜⎜

+

⎟⎟

⎜⎜

⎟⎟

⎜⎜

+

⎟⎟

⎜⎜

⎟⎟

⎜⎜

+

⎟⎟

⎜⎜

⎟⎟

⎜⎜

+

⎟⎟

⎜⎜

⎟⎟

⎜⎜

+

⎟⎟

⎜⎜

⎟⎟

⎜⎜

+

⎟⎟

⎜⎜

⎟⎟

⎜⎜

+

⎟⎟

⎜⎜

⎟⎟

⎜⎜

+

⎟⎟

⎜⎜

⎟⎟

⎜⎜

+

⎟⎟

⎜⎜

=

=

=

⎟⎟

⎜⎜

)!

(

!

!

k

n

k

n

k

n

=

⎟⎟

⎜⎜

=

=

<

<

⎟⎟

⎜⎜

⎛ −

+

⎟⎟

⎜⎜

=

⎟⎟

⎜⎜

n

k

k

gdy

n

k

gdy

k

n

k

n

k

n

lub

0

1

0

1

1

1

background image

=

=

<

<

⎟⎟

⎜⎜

⎛ −

+

⎟⎟

⎜⎜

=

⎟⎟

⎜⎜

n

k

k

gdy

n

k

gdy

k

n

k

n

k

n

lub

0

1

0

1

1

1

include

include

<

<

iostream

iostream

>

>

using

using

namespace

namespace

std

std

;

;

long

long

n_po_k

n_po_k

(int

(int

n, 

n, 

int

int

k)

k)

{  

{  

if

if

( (k>0) && (

( (k>0) && (

k<n

k<n

) ) 

) ) 

return

return

n_po_k(n

n_po_k(n

-

-

1, k

1, k

-

-

1) + n_po_k(n

1) + n_po_k(n

-

-

1, k);

1, k);

else

else

return

return

1

1

; }

; }

int

int

main

main

()

()

int

int

n, k, y;

n, k, y;

A:

A:

cout

cout

<< "

<< "

\

\

nWczytaj

nWczytaj

n= ";     

n= ";     

cin

cin

>> n;

>> n;

if

if

(n<1) {

(n<1) {

cout

cout

<< "

<< "

\

\

nBledne

nBledne

n";

n";

goto

goto

A

A

;}

;}

B:

B:

cout

cout

<< "

<< "

\

\

nWczytaj

nWczytaj

k= ";     

k= ";     

cin

cin

>> k;

>> k;

if

if

((k<1) || (

((k<1) || (

k>n

k>n

)) {

)) {

cout

cout

<< "

<< "

\

\

nBledne

nBledne

k";

k";

goto

goto

B

B

;}

;}

y = 

y = 

n_po_k(n

n_po_k(n

, k);

, k);

cout

cout

<< "

<< "

\

\

n

n

\

\

n

n

Met. rekurencyjna {n po k} = " << y << "

Met. rekurencyjna {n po k} = " << y << "

\

\

n

n

\

\

n

n

";

";

return 0;

return 0;

}

int,  long:   -2 147 483 648; 2 147 483 647

}

background image

=

=

<

<

⎟⎟

⎜⎜

⎛ −

+

⎟⎟

⎜⎜

=

⎟⎟

⎜⎜

n

k

k

gdy

n

k

gdy

k

n

k

n

k

n

lub

0

1

0

1

1

1

background image

A teraz zmodyfikujmy program, wykorzystuj

A teraz zmodyfikujmy program, wykorzystuj

ą

ą

c poprzednio 

c poprzednio 

zdefiniowane funkcje: dane, silnia, prezentacja

zdefiniowane funkcje: dane, silnia, prezentacja

tak aby unikn

tak aby unikn

ąć

ąć

instrukcji postaci:

instrukcji postaci:

goto

goto

Etykieta

Etykieta

background image

=

=

<

<

⎟⎟

⎜⎜

⎛ −

+

⎟⎟

⎜⎜

=

⎟⎟

⎜⎜

n

k

k

gdy

n

k

gdy

k

n

k

n

k

n

lub

0

1

0

1

1

1

background image

Napisa

Napisa

ć

ć

program wyznaczaj

program wyznaczaj

ą

ą

cy kolejne wyrazy 

cy kolejne wyrazy 

ci

ci

ą

ą

gu, kt

gu, kt

ó

ó

re tworzymy korzystaj

re tworzymy korzystaj

ą

ą

c z 

c z 

rekurencyjnego wzoru postaci jak ni

rekurencyjnego wzoru postaci jak ni

ż

ż

ej dla 

ej dla 

danych   a

danych   a

0

0

, a

, a

1

1

oraz n

oraz n

>

+

=

=

=

1

)

2

(

)

1

(

1

0

)

(

1

0

n

dla

n

F

n

F

n

dla

a

n

dla

a

n

F

background image

>

+

=

=

=

1

)

2

(

)

1

(

1

0

)

(

1

0

n

dla

n

F

n

F

n

dla

a

n

dla

a

n

F

#

#

include <

include <

iostream.h

iostream.h

>

>

using

using

namespace

namespace

std

std

;

;

void

void

fibonacci

fibonacci

(

(

int

int

&, 

&, 

int

int

& );

& );

main(

main(

)

)

int

int

n,

n,

k, w1, w2;

k, w1, w2;

cout

cout

<< "Program na obliczanie kolejnego"

<< "Program na obliczanie kolejnego"

<< " wyrazu 

<< " wyrazu 

ciagu

ciagu

Fibonacci'ego

Fibonacci'ego

\

\

n

n

\

\

n

n

";

";

cout << "

cout << "

Pierwszy wyraz 

Pierwszy wyraz 

ciagu

ciagu

";

";

cin

cin

>> w1;

>> w1;

cout << "

cout << "

Drugi wyraz 

Drugi wyraz 

ciagu

ciagu

";

";

cin

cin

>> w2;

>> w2;

cout

cout

<< 

<< 

Liczba 

Liczba 

wyrazow

wyrazow

ciagu

ciagu

= ";  

= ";  

cin >> n;

cin >> n;

cout

cout

<< "

<< "

\

\

n";

n";

for ( k=3; 

for ( k=3; 

k<=n

k<=n

; k++ )

; k++ )

{ fibonacci(w1, w2);

{ fibonacci(w1, w2);

cout

cout

<< "  " << k << "

<< "  " << k << "

\

\

t" << "wyraz 

t" << "wyraz 

ciagu

ciagu

= " 

= " 

<< "

<< "

\

\

t" << w2 << 

t" << w2 << 

endl

endl

; }; 

; }; 

return 0;   

return 0;   

}

}

void

void

f

f

i

i

bonacci

bonacci

(

(

int

int

&a, 

&a, 

int

int

&b

&b

)

)

{  

{  

int

int

pom

pom

;

;

pom

pom

= a + b; a = b; b = 

= a + b; a = b; b = 

pom

pom

;

;

}

}

background image
background image

zad. 4.1

zad. 4.1

Mamy zadan

Mamy zadan

ą

ą

tablic

tablic

ę

ę

A o rozmiarach 3 x 4 zawieraj

A o rozmiarach 3 x 4 zawieraj

ą

ą

c

c

ą

ą

liczby typu 

liczby typu 

ca

ca

ł

ł

kowitego (wprowadzone (4a) lub wygenerowane przy u

kowitego (wprowadzone (4a) lub wygenerowane przy u

ż

ż

yciu generatora 

yciu generatora 

liczb losowych (4b)). 

liczb losowych (4b)). 

Program ma wyszuka

Program ma wyszuka

ć

ć

elementy 

elementy 

o

o

warto

warto

ś

ś

ci

ci

najmniejszej oraz najwi

najmniejszej oraz najwi

ę

ę

kszej, 

kszej, 

poda

poda

ć

ć

te warto

te warto

ś

ś

ci oraz ich wsp

ci oraz ich wsp

ó

ó

ł

ł

rz

rz

ę

ę

dne, a nast

dne, a nast

ę

ę

pnie zamieni

pnie zamieni

ć

ć

je miejscami. 

je miejscami. 

Je

Je

ż

ż

eli warto

eli warto

ść

ść

minimalna lub maksymalna powtarza si

minimalna lub maksymalna powtarza si

ę

ę

w tabeli kilka razy 

w tabeli kilka razy 

zapami

zapami

ę

ę

tujemy ich ostatnie wyst

tujemy ich ostatnie wyst

ą

ą

pienie w tabeli. Zaprezentowa

pienie w tabeli. Zaprezentowa

ć

ć

warto

warto

ś

ś

ci 

ci 

pocz

pocz

ą

ą

tkowe tablicy A, oraz warto

tkowe tablicy A, oraz warto

ś

ś

ci ko

ci ko

ń

ń

cowe tablicy. Program ma mie

cowe tablicy. Program ma mie

ć

ć

posta

posta

ć

ć

strukturaln

strukturaln

ą

ą

.

.

background image

Deklaracja i inicjalizacja tablic:

Deklaracja i inicjalizacja tablic:

jednowymiarowe:      

jednowymiarowe:      

int

int

A[3] = {1, 5, 3};

A[3] = {1, 5, 3};

wielowymiarowe:

wielowymiarowe:

int

int

B[2, 3] = { {2, 5, 8}, {4, 1, 0}};

B[2, 3] = { {2, 5, 8}, {4, 1, 0}};

lub

lub

int

int

B[2, 3] = { 2, 5, 8, 4, 1, 0};

B[2, 3] = { 2, 5, 8, 4, 1, 0};

a inicjalizacja postaci: 

a inicjalizacja postaci: 

int

int

C[2, 3] = { 2, 5, 8, 4};

C[2, 3] = { 2, 5, 8, 4};

jest r

jest r

ó

ó

wnowa

wnowa

ż

ż

na     

na     

int

int

C[2, 3] = { 2, 5, 8, 4, 0, 0};

C[2, 3] = { 2, 5, 8, 4, 0, 0};

zerowanie tablicy: 

zerowanie tablicy: 

int

int

C[2, 3] = {0}, B[5]={0};

C[2, 3] = {0}, B[5]={0};

Inicjalizacja bez podania wymiaru:

Inicjalizacja bez podania wymiaru:

int

int

C[ ] = {4, 5, 7, 9];   jest traktowane jako    

C[ ] = {4, 5, 7, 9];   jest traktowane jako    

int

int

C[ 4] = {4, 5, 7, 9];

C[ 4] = {4, 5, 7, 9];

background image
background image

Inny uk

Inny uk

ł

ł

ad danych

ad danych

background image

Generowanie liczb losowych ca

Generowanie liczb losowych ca

ł

ł

kowitych z zadanego przedzia

kowitych z zadanego przedzia

ł

ł

u:

u:

Aby wygenerowa

Aby wygenerowa

ć

ć

ca

ca

ł

ł

kowit

kowit

ą

ą

liczb

liczb

ę

ę

losow

losow

ą

ą

trzeba doda

trzeba doda

ć

ć

biblioteki:

biblioteki:

#

#

include

include

<

<

stdlib.h

stdlib.h

>

>

#

#

include

include

<

<

time.h

time.h

>

>

Przed rozpocz

Przed rozpocz

ę

ę

ciem procesu generowania liczb, 

ciem procesu generowania liczb, 

np

np

. na pocz

. na pocz

ą

ą

tku bloku 

tku bloku 

main

main

()  

()  

wywo

wywo

ł

ł

ujemy funkcj

ujemy funkcj

ę

ę

srand

srand

():

():

srand((unsigned)time(NULL

srand((unsigned)time(NULL

)); 

)); 

a generowanie ca

a generowanie ca

ł

ł

kowitych liczb losowych realizujemy wywo

kowitych liczb losowych realizujemy wywo

ł

ł

uj

uj

ą

ą

c funkcj

c funkcj

ę

ę

rand():

rand():

np

np

.  dla zakresu:  (   1;     10)    

.  dla zakresu:  (   1;     10)    

n=rand()%10 + 1

n=rand()%10 + 1

(   1;   200)    

(   1;   200)    

n=rand()%200 + 1

n=rand()%200 + 1

(101; 1000)    

(101; 1000)    

n=100 + rand()%900 + 1

n=100 + rand()%900 + 1

generalnie przy okre

generalnie przy okre

ś

ś

laniu zakresu losowanych liczb okre

laniu zakresu losowanych liczb okre

ś

ś

lamy:

lamy:

n = 

n = 

zakres_dolny+rand()%(zakres_gorny

zakres_dolny+rand()%(zakres_gorny

zakres_dolny

zakres_dolny

+1) + 1; 

+1) + 1; 

background image

zakres liczb:  [1,  200]

zakres liczb:  [1,  200]

background image

Ponowne uruchomienie

Ponowne uruchomienie

background image

koniec lab.2

koniec lab.2