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