• Nie Znaleziono Wyników

Laboratorium informatyki II. Język Pascal. Semestr letni. Ćwiczenie 2.

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium informatyki II. Język Pascal. Semestr letni. Ćwiczenie 2."

Copied!
1
0
0

Pełen tekst

(1)

Laboratorium informatyki II. Język Pascal. Semestr letni.

Ćwiczenie 2.

Rekurencja

Cel ćwiczenia: projektowanie algorytmów rekurencyjnych; rekurencja bezpośrednia i pośrednia; przekazywanie parametrów do procedur i funkcji; zarządzanie stosem programu.

1. Opracować funkcję, która dla n Î N wyznacza wartość n! ( n silnia). Nagłówek funkcji:

function Silnia(n: word): typ_funkcji. Wykorzystać zależność rekurencyjną Silnia(n):=

nSilnia(n-1). Przyjmując, że funkcja Silnia jest typu Extended określić maksymalną wartość n, dla której można wyznaczyć n!.

2. Opracować funkcję, która wyznacza n-ty wyraz ciągu Fibonacciego, gdzie:

F(1) = F(2) = 1; F(n) = F(n-1) + F(n-2).

3. Opracować funkcję, która oblicza NWP(a,b) ze wzoru NWP = a, jeżeli b=0, oraz NWP = NWP(b, a mod b), jeżeli b>0.

4. Opracować rekurencyjną procedurę wyznaczania zapisu liczby N w układzie pozycyjnym o podstawie 1 < b < 17. Sposób działania algorytmu: należy odkładać na stosie kolejne wyniki dzielenia liczby N przez b, aż do momentu, gdy pojawi się liczba c = N div b równa zero; wówczas, pierwsza cyfra liczby wynosi N mod b; obliczając w procedurze rekurencyjnej Licz(N,b) resztę N mod b oraz wywołując ponownie procedurę Licz(N,b), dla

N = N div b, otrzymuje się wszystkie cyfry liczby. Wynik przekazać za pomocą łańcucha.

Cyfry większe od 9 kodować za pomocą liter A, B, C, D, E, F. Nagłówek procedury:

procedure Licz(N: word; b: byte).

5. Opracować program, który oblicza wartości dwóch funkcji wzajemnie rekurencyjnych f(x) i g(x) dla x = 3i, gdzie i = 1,2,3,...,20.

 g(3x) div 3 dla x <= 30 f(x) =  6 f(x div 6) dla 30 < x <= 60  6(x div 3) dla x > 60  g(2x) div 4 dla x <= 20 g(x) =  4 f(x div 2) dla 20 < x <= 40  x dla x > 40

Na początku funkcji f(x) umieścić instrukcję write('f'), natomiast na początku g(x) instrukcję write('g'). Funkcję f(x) zdefiniować w oparciu o dyrektywę FORWARD.

6. Opracować funkcję obliczającą rekurencyjnie współczynniki dwumianu (x+y)n z trójkąta Pascala. Współczynniki An[k] (dla k=0, 1, 2, ..., n) należy obliczać ze wzorów:

An[0] = An[n] = 1, An[k] = An-1[k-1] + An-1[k], dla k=1,2, ..., n-1. W szczególności, A0[0] = 1; A1[0] = 0, A1[1] = A0[0] + A0[1] = 1 + 0 = 1, itd.

1 n=0; k=0;

11 n=1; k=0, k=1;

121 n=2; k=0, k=1, k=2;

1331 n=3; k=0, k=1, k=2, k=3;

(2)

Cytaty

Powiązane dokumenty

Opracować procedurę, która realizuje następujące operacje: otwiera plik; odczytuje dane z pliku; jeśli odczytana liczba jest nieparzysta, to dopisuje na końcu pliku

Cel ćwiczenia: projektowanie algorytmów wykorzystujących pętle; przekazywanie parametrów do procedur i funkcji; obliczanie sum szeregów; praca w trybie znakowym ekranu.. Sprawdzić

Opracować procedurę, która tworzy losowy łańcuch typu string[20] złożony z małych liter (znaki łańcucha należą do przedziału [’a’,...,’z’].. Opracować procedurę,

b) odczytywania elementu z kolejki; c) wyprowadzania zawartości kolejki na ekran d) wyprowadzania długości kolejki oraz zawartości zmiennych pocz (początek kolejki) i kon

Cel ćwiczenia: projektowanie algorytmów wykorzystujących pliki tekstowe (text) oraz pliki zdefiniowane (file of ...); łączenie posortowanych plików; wstawianie danej

wyprowadzanie na ekran zawartości dowolnego pliku; kopiowanie fragmentu pliku, modyfikowanie zawartości pliku, znajdowanie zadanej sekwencji bajtów w pliku;

Cel ćwiczenia: definiowanie zmiennych wskaźnikowych; dostęp do zmiennych za pomocą wskaźników; inicjowanie wskaźników adresami zmiennych statycznych; wskaźniki typu

Opracować procedury umożliwiające obsługę kolejki typu FIFO zrealizowanej za pomocą listy jednokierunkowej o następującej strukturze type L = ^lst; lst