Algorytmy - zti.polsl.pl

Transkrypt

Algorytmy - zti.polsl.pl
WPROWADZENIE
Algorytm – uporzadkowany zbiór operacji takich, że po ich wykonaniu w zdefiniowanym porządku otrzymuje się
rozwiązanie zadania z określonej klasy zadań.
Cechy algorytmu – ogólność, skończoność, określoność i efektywność.
Sposoby zapisu algorytmu – język naturalny, schemat blokowy, język formalny.
Elementy schematów blokowych
Blok graniczny
Podprogram, fragment algorytmu
opisany oddzielnie
Blok wejścia/wyjścia
komentarz
Blok obliczeniowy
Łącznik wewnatrzstronicowy, między
stronicowy
Blok decyzyjny
Schodzenie się obliczeń
Konwencja notacyjna „pseudo-Pascal”
1. Deklaracje stałych, typów i zmiennych
const nazwa_zmiennej = wartość;
var nazwa_zmiennej : typ_danych;
Boolean (false, true)
char
integer
real
array[specyfikacja typu indeksu] of typ_danych, np. array[1..n] of char
2. Instrukcje
a) instrukcja przypisania
nazwa_zmiennej := wyrażenie
b) instrukcje warunkowe
if warunek then instrukcje end_if
if warunek then instrukcje else instrukcje
end_if
c) instrukcje iteracji
While warunek do
instrukcje
end_while
Repeat
instrukcje
until warunek
For i=wyr to n do
instrukcje
end_for
3.
procedure nazwa (parametry);
deklaracje lokalne
instrukcje
end_procedure
function nazwa (parametry): typ_wyniku;
deklaracje lokalne
instrukcje
end_function
1
Zadanie 1.
Dany jest ciąg a1,...,an liczb całkowitych, dla n>=2. Należy znaleźć indeks największej i najmniejszej spośród nich.
Ciąg jest reprezentowany przez tablicę a[1..n].
Rozwiązanie powinno obejmować schemat blokowy i zapis algorytmu w pseudokodzie w wersji z petlą „while”,
„repeat” oraz „for”. Określić efektywność czasową algorytmu.
Zadanie 2.
Napisać funkcję dla wyszukiwania pierwszego położenia wzorca w tekście.
Przykład:
wzorzec = A B C
m=3
tekst
=BABDEFABCD
n = 10
wynik szuk_brut = 7
Mamy deklaracje:
var tekst : array[1..n] of char;
wzorzec : array[1..m] of char;
(schemat blokowy + pseudokod)
Zadanie 3.
Napisać funkcję zliczającą (zwracającą) ilość wierszy macierzy A[1..m, 1..n] of integer zgodnych ze wzorcem
B[1..n] of integer.
A
i
11
23
21
6
3
8
7
0
21
4
32
4
65
1
12
5
13
4
12
1
32
4
65
1
12
B
32
4
65
1
12
j
Jeżeli procedura P zawiera bezpośrednie odwołanie do samej siebie:
P = f[S,P]
to P nazywa się procedurą bezpośrednio rekurencyjną; jeżeli procedura P zawiera odwołanie do innej procedury
Q, która zawiera bezpośrednie lub pośrednie odwołanie do P:
P = f[S,Q],
Q = g[T,P]
to P nazywa się procedurą pośrednio rekurencyjną;
Zadanie 4.
Algorytm obliczania silni w wersji rekurencyjnej i nierekurencyjnej.
n! := n * (n – 1)!
1! := 0! := 1
Zadanie 5.
Ciąg Fibonacciego jest określony następującym wzorem rekurencyjnym:
F0 = 0,
F1 = 1,
Fn = Fn – 2 + Fn – 1
dla n > 1
Zapisz funkcję w wersji rekurencyjnej i nierekurencyjnej, której wartością jest n-ty wyraz ciągu Fibonacciego.
Przyjąć założenie, że n >= 0. Narysować drzewo wywołań dla n=4.
Zadanie 6.
Podać wersję rekurencyjną zad.1, określić liczbę wywołań.
2
Zadanie 7.
Algorytm rysowania drzewa dychotomicznego
Na ekranie kreśli obrazy ruchomy kursor. Dane są procedury sterujące ruchem kursora:
obrót()
- obróć kursor o kąt  w lewo
rysuj(s)
- narysuj odcinek długości s idąc w kierunku ruchu
Krzew(0.8)
Zadanie 8.
Co jest wynikiem działania poniższego algorytmu:
procedure p(x: real);
var i: integer;
begin
if x > min then
for i:= 1 to 3 do
p(x/2);
rysuj(x);
obrót(120);
end_for;
end_if;
end.
Krzew(1)
Zadanie 9.
Narysować figurę:
x -> x/3
Zadanie 10.
Dla podanego algorytmu narysować drzewo wywołań i podać co zostanie wyświetlone na ekranie.
p(4)
p(5)
procedure p(n: integer);
procedure p(n: integer);
begin
begin
if n > 0 then
if n > 0 then
p(n-2);
p(n-2);
writeln(n);
p(n-1);
p(n-1);
writeln(n);
end_if;
end_if;
end
end
Zadanie 11.
Napisać algorytm obliczający, na ile sposobów można wyrazić liczbę naturalną N w postaci sumy składników
naturalnych. Podać drzewo wywołań dla N=4.
Przykład:
N = 5; Zbiór sum = {5, 4 + 1, 3 + 2, 3 + 1 + 1, 2 + 2 + 1, 2 + 1 + 1 + 1, 1 + 1 + 1 + 1 + 1}
Uwaga! Sumy różniące się tylko porządkiem składników liczymy tylko raz (np.: 4 + 1 oraz 1 + 4).
Zadanie 12
Podać algorytm znajdujący taką sekwencję ruchów skoczka szachowego, aby odwiedził on każde pole na
szachownicy (zmienna globalna, tablica kwadratowa o wymiarze n) dokładnie raz.
3