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.