Programowanie Studia Licencjackie Lista 6.

Transkrypt

Programowanie Studia Licencjackie Lista 6.
Programowanie
Studia Licencjackie
Lista 6.
i
Zadanie 1. (3p) W zadaniu tym wrócimy do problemu, w którym znajdywaliśmy część wspólną zbiorów f (A), dla
pewnego zbioru A i dla i ∈ {0, 1, . . . }. Wyobraźmy sobie rozwiązanie, w którym mamy zmienną typu zbiorowego,
i
którą w i-tym przebiegu pętli zamieniamy na część wspólną jej samej i f (A0 ). Pętla kończy się, jeżeli zmienna typu
zbiorowego nie zmieniła swojej wartości w wyniku tej operacji.
Udowodnij poprawność tego rozumowania lub wskaż kontrprzykład.
Zadanie 2. Dodajmy do języka C przekazywanie przez nazwe oraz przez wartość i wynik. Napisz fragment programu
w tej wzbogaconej wersji C++, w którym znajdować sie, bedzie
jedno wywołanie pewnej funkcji jednoargumentowej,
,
którego wynik (to co wypisze na ekranie) bedzie
inny
dla
każdego
z wymienionych poniżej sposobów przekazywania
,
parametrów: a) przez referencje,
b)
przez
wartość
i
wynik,
c)
przez
wartość
d) przez nazwę.
,
Powiedz, czym różni się przekazywanie parametrów przez nazwę od przekazywania używanego w makrodefinicjach.
Zadanie 3. Jak wykorzystać (być może po modyfikacji) program liczący najdłuższy wspólny podciąg dwóch napisów do
znajdywania nadłuższego niemalejącego podciągu, dla zadanego ciągu liczb.
Zadanie 4. Operacja edycyjna to usunięcie literki, wstawienie w dowolnym miejscu napisu literki, oraz zamiana dwóch
kolejnych liter. Odległość edycyjna między słowami a oraz b to liczba operacji edycyjnych jakie należy wykonać podczas
przekształcania pierwszego słowa w drugie.
Napisz w wybranym języku program, który dla dwóch słów liczby odległóść edycyjną.
Na tej liście korzystamy z nastepuj
acych
definicji (T jest pewnym typem):
,
,
struct el {
T val;
next *el;
}
struct el2 {
T val;
next *el;
prev *el;
}
Zadanie 5. Mamy dane dwie tablice int A[N] i int B[N]. Pokaż, jak sortowanie może ułatwić wypisanie na ekranie
elementów, które znajdują się w jednej i drugiej tablicy.
Zadanie 6. Napisz program, który dla tablicy long A[N] wypisuje ten element, który w tablicy występuje najwięcej
razy. Program ma prawo zmieniać zawartość tablicy A, nie można natomiast używać żadnych dodatkowych struktur
danych (jedynie zmiennych całkowitych).
Jeżeli takich elementów jest więcej należy wypisać dowolny z nich.
Zadanie 7. Napisz w Pascalu lub w C nierekurencyjną wersję programu kopiującego listy.
Zadanie 8. Kolejke, typu FIFO1 można realizować jako liste, dwukierunkowa,
jej poczatek
i
, dla której pamietamy
,
,
koniec. Odpowiadać temu może nastepuj
aca
struktura:
,
,
struct kolejka {
el2 *start;
el2 *end;
}
Napisz funkcję kolejka enqueue(kolejka k, T el) oraz kolejka dequeue(kolejka k, T &el) realizujac
, a, odpowiednio umieszczenie element na końcu kolejki i pobranie elementu z poczatku
kolejki.
,
Zadanie 9. Zakładamy, że listy w tym zadaniu nie zawierają powtarzających się elementów. Napisz rekurencyjne
funkcje obliczajace
,
a) sume, dwóch list, czyli listę (bez powtarzających się elementów), która zawiera elementy występujące na jednej lub
na drugiej liście,
b) przeciecie
dwóch list (zawierajace
elementy, które wystepuj
a, w obu listach),
,
,
,
c) funkcje, sprawdzajac
a,
czy
element
jest
na
liście.
, ,
Zadanie 10. Napisz procedurę usuwającą wszystkie elementy o zadanej etykiecie z drzewa binarnego.
Zadanie 11. (?) Napisz procedurę usuwającą element o zadanej etykiecie z drzewa BST w ten sposób, aby powstałe
drzewo dalej było drzewem poszukiwań BST.
Zadanie 12. Napisz nierekurencyjną funkcję: zwracajac
, a, dla drzewa poszukiwań binarnych t i klucza k wartość klucza
k 0 , t.że k 0 > k i jest to najmniejszy klucz o tej własnośc. Gdy takiego klucza nie ma funkcja powinna zgłaszać wyjatek.
,
1 First
In — First Out, ten co pierwszy wszedł, pierwszy wwyjdzie.