VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA

Transkript

VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA
VYŠŠÍ ODBORNÁ ŠKOLA
a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA
Mariánská 1100, 407 47 Varnsdorf
PROGRAMOVÁNÍ
FUNKCE, REKURZE, CYKLY
Jméno a příjmení:
Školní rok:
Petr VOPALECKÝ
Číslo úlohy:
2007/2008
Třída:
Počet listů:
VI2
1
6
Název úlohy a zadání:
Funkce, rekurze, cykly
ZADÁNÍ:
Naprogramujte funkce pro výpočet Fibonacciho posloupnosti. Použijte jak sekvenční, tak i rekurzivní
metodu výpočtu. Porovnejte operační složitost těchto metod.
Požadavky: Úlohu zpracujte komplexně. Nejprve proveďte studii problému Fibonacciho posloupnosti a zhodnoťte
možnosti úlohy v PHP. Dále provedete vytvoření algoritmů. Nakonec úlohu zhodnoťte. Odevzdat v digitální podobě
(DOC, DOCX, PDF, ODT). Program bude vystaven na veřejné adrese, která bude součástí protokolu.
Použitá literatura:
Datum odevzdání:
Odevzdáno dne:
Hodnocení:
PEVNÝ DISK
1
Podpis vyučujícího:
Obsah
Zadání......................................................................................................................
.............................2
Analýza............................................................................................................................
.....................2
Popis algoritmu........................................................................................................................
.............2
Program v PHP..............................................................................................................
.......................3
Tabulka...........................................................................................................................................
.......5
Graf...............................................................................................................................
........................6
Závěr...............................................................................................................................
......................6
Zadání
Naprogramujte funkce pro výpočet Fibonacciho posloupnosti. Použijte jak sekvenční, tak i
rekurzivní metodu výpočtu. Porovnejte operační složitost těchto metod.
Požadavky: Úlohu zpracujte komplexně. Nejprve proveďte studii problému Fibonacciho posloupnosti
a zhodnoťte možnosti úlohy v PHP. Dále provedete vytvoření algoritmů. Nakonec úlohu zhodnoťte.
Odevzdat v digitální podobě (DOC, DOCX, PDF, ODT). Program bude vystaven na veřejné adrese,
která bude součástí protokolu.
Analýza
Fibonacciho posloupnost je v matematice označována jako nekonečná posloupnost
přirozených čísel začínajících 0, 1, 1, 2, 3, 5, 8, 13, 21, …, kde každé číslo je součtem předchozích
dvou čísel.
V našem případě je vstupem n-tý prvek již zmíněné Fibonnaciho posloupnosti. Výstupem jsou
čísla n-tého prvku posloupnosti a počet kroků sekvenčně a rekurzivně. Rekurzivní znamená volající
sama sebe. Algoritmus tedy musí na začátku přijmout číslo, které bude udávat n-tý prvek Fibonnaciho
posloupnosti. Výpočet proběhne nejprve sekvenční formou,která nám umožní spočítat i počet kroků.
Po té algoritmus bude počítat rekurzivní formou. Pro názorné porovnání obou případů přiložíme
tabulku 1.0 a graf 1.0, kde výsledné výpočty mezi sebou porovnáme.
Popis algoritmu
Vstupní formulář odešle číslo do proměnné řada. Budeme počítat sekvenční i rekurzivní
počet a následné i počet kroků jak sekvenčních tak i rekurzivních. Budeme sčítat předchozí a před
předchozí číslo, které bylo zadané do vstupního formuláře. Pokud uživatel zadá číslo 0 tak se na
výstupu nic neobjeví. Pokud do pole vložíme například číslo 5, tak se provede maximálně 5 kroků,
přičemž první krok v řadě odpovídá číslu 0, jelikož Fibonnaciho posloupnost začíná právě na číslo 0.
Sekvenční a rekurzivní počet se nesmí od sebe lišit a proto v se druhý a třetí sloupec tabulky 1.0 sobě
rovná. Čtvrtý a pátý sloupec se zabývá vyjádřením kroků. Jak je vidět sekvenční krokování je
postupné (v grafu je naznačeno červenou barvou), naproti tomu rekurzivní (volající samo sebe) má
tendenci spíše exponenciální (v grafu je naznačeno modrou barvou). Je tedy zcela zřejmé, že pro
volbu kroků Fibonnaciho posloupnosti je lepší užití sekvenčního krokování.
Funkční program nalezneme na adrese:
http://petr-vopalecky.xf.cz/skola/programovani/prvni_prace.php
2
Program v PHP
<form method="post" action="prvni_prace.php">
<input type="text" name="pole" size="5" maxlength="5" />
<br />
<input type="submit" value="Odeslat" />
</form> <br />
<?php
function sekvence ($n)
{
global $kroksekvence;
$kroksekvence=0; $predchozi=1;
$predpredchozi=0;
if ($n==0) return 0;
if ($n==1) return 1; for($i=0;$i<$n­1;$i++)
{
$vysledek=$predchozi+$predpredchozi;
$predpredchozi=$predchozi;
$predchozi=$vysledek;
$kroksekvence++;
}
return $vysledek;
}
function rekurze ($n)
{
global $krokrekurzivne;
$krokrekurzivne++;
if ($n<=1)
{
return $n;
}
else
{
return rekurze($n­1)+sekvence($n­2);
}
}
$krokrekurzivne=0;
echo "| &nbsp;&nbsp;&nbsp;řada&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;sekvenčně&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;rekurzivně&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;krok sekvenčně&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;krok rekurzivně&nbsp;&nbsp;&nbsp; |
<br /><br />";
for($rada=0;$rada<$pole;$rada++)
{
$sekvencne=sekvence($rada);
$rekurzivne=rekurze($rada);
3
echo "| &nbsp;&nbsp;&nbsp;$rada&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;$sekvencne&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;$rekurzivne&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;$kroksekvence&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;$krokrekurzivne&nbsp;&nbsp;&nbsp; |
<br />";
?>
4
Tabulka
řada
sekvenčně
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
rekurzivně
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
tabulka 1.0
5
krok sekvenčně
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
krok rekurzivně
1
2
5
10
19
34
59
100
167
276
453
740
1205
1958
3177
5150
8343
13510
21871
35400
57291
92712
150025
242760
392809
635594
1028429
1664050
2692507
4356586
Graf
Sekvenční a rekurzivní kroky
5000
4500
4000
3500
3000
Řada
2500
2000
1500
1000
500
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Kroky
graf 1.0
Sekvenční krokování je naznačeno červenou barvou.
Rekurzivní krokování je naznačeno modrou barvou.
Závěr
Úloha byla poněkud složitější díky tomu, že jsem zpočátku nevěděl co je rekurze. Největší
problém jsem prozatím nalezl ve vymyšlení projektu, především užití vzorce tak, aby výsledek byl
správný. Program jsem upravil tak, aby byl co nejvhodnější pro web a zdrojový kód jsme zkopíroval
do této práce.
6
28
29

Podobné dokumenty

Programové, informační a výpočetní systémy (14) 1. VÝPOČETNÍ

Programové, informační a výpočetní systémy (14) 1. VÝPOČETNÍ bloku). Deklarace provedená uvnitř bloku ztrácí mimo blok platnost. Blok má 2 části: deklarační a příkazovou. Bloky mohou být do sebe vnořovány, přičemž věc deklarovaná v bloku je viditelná ve vnoř...

Více

Manuál 6712 - technoaqua.cz

Manuál 6712 - technoaqua.cz Tento návod k obsluze je zpracován tak, aby Vám pomohl pochopit provoz zařízení. Teledyne Isco doporučuje, abyste si manuál pozorně přečetli dříve než uvedete přístroj do provozu. Přesto, že jsou v...

Více

7. Moduly

7. Moduly V proměnné je pod jejím názvem uložena hodnota, která se může měnit. Typ proměnné může být v modulu specifikován dvěma způsoby: − deklarací proměnné V případě, že použijeme nedeklarovanou proměnnou...

Více

32_04_1_04-Datove_typy,_operace

32_04_1_04-Datove_typy,_operace nepravda, výsledek je také FALSE První tvrzení

Více

Neurolingvistické programování (NLP)

Neurolingvistické programování (NLP) úroveň Intermediate - rozvíjejte své dovednosti Termín

Více

Aastra Dialog 4225 Vision

Aastra Dialog 4225 Vision Když na váš telefon přijde příchozí volání, začne blikat číslo volající pobočky (případně se zobrazí jméno, existuje-li). V případě externího volání se místo interní linky zobrazí číslo externího ú...

Více

slajdy - Jan Outrata

slajdy - Jan Outrata Proč m0 a ne m? Protože při tomto počtu nejdelších kódových slov bude u všech kratších kódových slov a prefixů využito všech m symbolů kódové abecedy a kód má být optimální prefixový. Huffmanův str...

Více