Dany jest program, który wczytuje i dodaje dwie tablice jednowymiarowe.
Dopisz w poniższym programie funkcję wyświetlającą tablice.
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);
}
Napisz funkcję, która wyświetla na ekranie ze znaku * następujący trójkąt:
a)
*
**
***
****
b)
*
***
*****
*******
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 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.
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
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 |