Podstawy Programowania Lab 6

FUNKCJE - przekazywanie parametrów do funkcji.

REKURENCJA.

ZADANIE 1.

Dany jest program, który wczytuje i dodaje dwie tablice jednowymiarowe.

  1. Dopisz w poniższym programie funkcję wyświetlającą tablice.

  2. Zmodyfikuj program tak, aby dodawał tablice dwuwymiarowe.

#include <iostream>

unisng namespace std;

const int rozmiar=10;

void wczytajTablice(int tablica[])

{

cout<<"Podaj wartosc elementow tablicy\n";

for (int i=0; i<rozmiar;i++)

{

cout<<"tab["<<i<<"]=";

cin>>tablica[i];

}

}

void dodajTablice(int wejscie1[],int wejscie2[],int wynik[])

{

for (int i=0;i<rozmiar;i++)

wynik[i]=wejscie1[i]+wejscie2[i];

}

int main ()

{

int A[rozmiar];

int B[rozmiar];

int C[rozmiar];

wczytajTablice(A);

wczytajTablice(B);

//wyswietlTablice(A);

//wyswietlTablice(B);

dodajTablice(A,B,C);

//wyswietlTablice(C);

}

ZADANIE 2.

Napisz funkcję, która wyświetla na ekranie ze znaku * następujący trójkąt:

a)

*

**

***

****

b)

*

***

*****

*******

ZADANIE 3.

Jedna z poniższych funkcji jest poprawna. Przeanalizuj je i uzasadnij która.

void posortuj_1 (double a, double b)

{

double buf;

if (a > b)

{

buf = a;

a = b;

b = buf;

}

}

void main( void )

{

double x=7, y=5;

posortuj_1( x, y );

cout<<x;

cout<<y;

}

void posortuj_2 (double & a, double & b)

{

double buf;

if (a > b)

{

buf = a;

a = b;

b = buf;

}

}

void main (void)

{

double x=7, y=5;

posortuj_2( x, y );

cout<<x;

cout<<y;

}

REKURENCJA

Rekurencja albo rekursja to zdolność funkcji, procedury bądź programu do odwoływania się do samej siebie. Rekurencja jest często wolniejsza od metody iteracyjnej jednakże do wielu problemów, takich jak np. obliczanie silni rekurencja jest niemalże idealna. Odwołania rekurencyjnie pozostawiają na stosie systemowym adres i parametry powrotu do danej funkcji lub procedury. Każda procedura lub funkcja rekurencyjna musi posiadać pewne warunki stopu, które determinują zakończenie jej wywoływania i umożliwią wyjście ze stosu takich wywołań. Algorytmy rekurencyjne upraszczają zapis algorytmów, jakkolwiek zazwyczaj posiadają większą złożoność obliczeniową niż algorytmy nierekurencyjne (iteracyjne). Zwykle algorytm rekurencyjny można zastąpić iteracyjnym.

ZADANIE 4.

Napisać program, który dla podanej liczby całkowitej wyznacza wartość n! (metodą rekurencyjną)
i wypisuje wynik na ekranie.


$$\mathbf{n! =}\left\{ \begin{matrix} \mathbf{1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dla\ n = 0} \\ \mathbf{n \bullet}\left( \mathbf{n - 1} \right)\mathbf{!\ \ \ dla\ n} \geq 1 \\ \end{matrix} \right.\ $$

4! = 4 * 3!

4! = 4 * (3 * 2!)

4! = 4 * (3 * (2 * 1!))

4! = 4 * (3 * (2 * (1 * 0!)))

4! = 4 * (3 * (2 * (1 * 1)))

4! = 4 * (3 * (2 * 1))

4! = 4 * (3 * 2)

4! = 4 * 6

4! = 24

ZADANIE 5.

Napisać program wyznaczający ciąg liczb Fibonacciego od F(1) do F(n) dla podanego n (metodą rekurencyjną) i wypisujący go na ekranie.


$$\mathbf{F}\left( \mathbf{n} \right)\mathbf{=}\left\{ \begin{matrix} \mathbf{0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dla\ n = 0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }F\left( 0 \right) = 0 \\ \mathbf{1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dla\ n = 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }F\left( 1 \right) = 1 \\ \mathbf{F}\left( \mathbf{n - 1} \right)\mathbf{+ F}\left( \mathbf{n - 2} \right)\mathbf{\text{\ \ \ \ dla\ n}} > 1\mathbf{\text{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }}F\left( 4 \right) = F\left( 3 \right) + F(2) \\ \end{matrix} \right.\ $$

Ciąg liczbowy nazywany ciągiem Fibonacciego tworzą liczby naturalne: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610…, z których każda (poza wartościami stałymi 0 i 1) jest sumą dwóch poprzednich, np.: 3+5=8, 5+8=13, 8+13=21, itd. Ciąg ten wziął swą nazwę od trzynastowiecznego matematyka, Leonarda z Pizy, zwanego Fibonaccim.

Do interesujących właściwości ciągu należy ta, że iloraz dowolnej liczby ciągu przez jej poprzednik, waha się w okolicach 1,618. W miarę zwiększania się liczb, ilorazy te w końcu zbiegają się do pewnej niewymiernej liczby, zwanej fi, wynoszącej w przybliżeniu 1,618034, np.: 8:5=1.6, 21:13 =1,615, 610:377=1,618. Oznacza to, że w ciągu Fibonacciego, każda wartość jest około 1,618 razy większa od poprzedniej. Liczba fi znana była jako złota liczba, ponieważ wyrażała ułamek, który starożytni Grecy nazywali boską proporcją.

Natomiast wynik dzielenia każdej z liczb w ciągu przez następną waha się wokół odwrotności 1,618, czyli 0,618, np.: 5:8=0.625, 34:55=0,618, 377:610=0,618.

n F(n) F(n)/F(n-1) F(n)/F(n+1)
0 0   0
1 1   1
2 1 1 0,5
3 2 2 0,666666667
4 3 1,5 0,6
5 5 1,666666667 0,625
6 8 1,6 0,615384615
7 13 1,625 0,619047619
8 21 1,615384615 0,617647059
9 34 1,619047619 0,618181818
10 55 1,617647059 0,617977528
11 89 1,618181818 0,618055556
12 144 1,617977528 0,618025751
13 233 1,618055556 0,618037135
14 377 1,618025751 0,618032787
15 610 1,618037135 0,618034448
16 987 1,618032787 0,618033813
17 1597 1,618034448 0,618034056
18 2584 1,618033813 0,618033963
19 4181 1,618034056 0,618033999
20 6765 1,618033963  

Wyszukiwarka

Podobne podstrony:
Podstawy Programowania Lab 1 dod
Podstawy Programowania Lab 7
Podstawy Programowania Lab 4
Podstawy Programowania Lab 3 dod
Podstawy Programowania Lab 5
Podstawy Programowania Lab 2 dod
Podstawy Programowania Lab 8
Podstawy Programowania Lab 1 dod
cwiczenie10d2013, WSTI Pawia 55, Semestr I, Podstawy programowania (wyk, lab - L.Grad, Laboratoria
lab 2, Edukacja, ZiIP, sem. I, Podstawy programowania, Laborki i inne, Podstawy Programowania
cwiczenie8d2013, WSTI Pawia 55, Semestr I, Podstawy programowania (wyk, lab - L.Grad, Laboratoria
cwiczenie13d2012, WSTI Pawia 55, Semestr I, Podstawy programowania (wyk, lab - L.Grad, Laboratoria
cwiczenie9d2013, WSTI Pawia 55, Semestr I, Podstawy programowania (wyk, lab - L.Grad, Laboratoria
cwiczenie11d2013, WSTI Pawia 55, Semestr I, Podstawy programowania (wyk, lab - L.Grad, Laboratoria
cwiczenie6d2013, WSTI Pawia 55, Semestr I, Podstawy programowania (wyk, lab - L.Grad, Laboratoria
LAB 4, Edukacja, ZiIP, sem. I, Podstawy programowania, Laborki i inne, Podstawy Programowania
koło 1 lab, TIN inż, Semestr 1, Podstawy programowania
Nowa podstawa programowa WF (1)

więcej podobnych podstron