Metody Programowania - Lista 7
Zadanie 1
Przerobić procedury wstawiania i usuwania z drzew AVL, tak by zamiast
rekursji używać iteracji i stosu (tzn. użyć stos Poplogu).
Zadanie 2
Podlistą listy L nazywamy listę otrzymaną z L przez usunięcie niektórych
elementów (być może wszystkich). Napisać procedurę która wygeneruje wszystkie
podlisty danej listy (w dowolnej kolejności, ale bez powtórzeń). Podobnie,
procedurę która wygeneruje podlisty ustalonej długości. Następnie, wzorując
się na programie genperm2.p przerobić je
na generatory.
Zadanie 3
Zakładamy że wyrażenia logiczne są reprezentowane tak jak w zadaniu 3 z
Listy 6. Napisać procedurę która mając dane wyrażenie, wartość logiczną
(true lub false) i zmienną wyprodukuje nowe wyrażenie w którym ta
zmienna jest zastąpiona przez podaną wartość.
Zadanie 4
Zakładamy że wyrażenie "algebraiczne" jest reprezentowane przez drzewo
gdzie każdy węzeł jest stałą, zmienną lub zawiera operator i argumenty
(jeden lub dwa). Np.
[+ x [* 2 [* y [exp x]]]]
Dostępne operatory to +, -, *, / (dzielenie), exp i log (funkcja wykładnicza
i logarytm). Zmienne są reprezentowane przez słowa Poplogu.
Napisać procedurę która mając dane drzewo reprezentujące wyrażenie i zmienną
obliczy wyrażenie reprezentujące pochodną.
Zadanie 5
Kolejka priorytetowa różni się tym od zwykłej kolejki że dane wstawia się
w dowolnej kolejności zaś pobierana jest zawsze największa wartość (z pomiędzy
dostępnych). Napisać dwie realizacje kolejki priorytetowej, jedną bazującą
na drzewach, drugą będącą modyfikacją programu
heapsort.p . Chodzi przy tym o to by wstawianie elementu do kolejki
priorytetowej i pobieranie elementu wymagało przeciętnie liczby operacji
proporcjonalnej do logarytmu rozmiaru kolejki.
Wskazówka: program heapsort.p w zasadzie już zawiera potrzebne operacje
wstawiania i pobierania, trzeba je tylko oddzielić od reszty i dodać
powiększanie tablicy (tzn. przydzielanie większej i kopiowanie z miniejszej
do większej).