Programowanie Studia Licencjackie Lista 7.

Transkrypt

Programowanie Studia Licencjackie Lista 7.
Programowanie
Studia Licencjackie
Lista 7.
Zadanie 1. Napisz funkcj¦
a) el* reverse(el *L),
b) el2* reverse2K(el2 *L)
zracaj¡c¡ wska¹nik do nowo utworzonej listy zawieraj¡cej te same elementy, co lista b¦d¡ca argumentem,
ale w odwrotnym porz¡dku. Funkcja reverse powinna odwraca¢ list¦ jednokierunkow¡, reverse2K list¦
dwukierunkow¡.
Zadanie 2. Napisz program dla AMD∗ wczytuj¡cy n i obliczaj¡cy n!.
Zadanie 3. Napisz trzy wersje odwracania listy w Pythonie:
a) w wersji pierwszej argument na by¢ zmieniony, mo»na skorzysta¢ z funkcji licz¡cej dªugo±¢ listy i operacji
indesowania. Obracanie ma by¢ w miejscu (nie wolno tworzy¢ nowej listy)
b) w tej wersji argument pozostawiamy bez zmian, zwracany wynik (nowa lista) ma zosta¢ utworzona od
pocz¡tku, za pomoc¡ instrukcji r[0:0] = x.
c) W wersji trzeciej nale»y u»y¢ nieomawian¡ na wykªadzie konstrukcj¦ wycinania |L[a:b:c]|.Nie mo»na
z niej korzysta¢ w punktach poprzednich.
Postaraj si¦, by programy byªy mo»liwie jak najbardziej eleganckie.
Zadanie 4. Jak zmieni¢ denicj¦ Abstrakcyjnej Maszyny D∗ w taki sposób, aby korzystanie z niektórych
instrukcji staªo si¦ bardziej por¦czne, je»eli naszym celem jest kompilacja programów licznikowych? Zakªadamy przy tym, »e architektura maszyny oraz lista rozkazów jest ustalona (ale mo»e si¦ zmieni¢ ich
denicja).
Zadanie 5. Operacja edycyjna to usuni¦cie literki lub wstawienie w dowolnym miejscu napisu literki.
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¡.
Zadanie 6. (2p) Dodajmy do poprzedniej denicji odlegªo±ci edycyjnej operacj¦ zamiany znaku na inny
(w poprzedniej wersji potrzebowali±my na to 2 operacji) oraz oraz operacj¦ swap zamieniaj¡c¡ kolejno±¢
dwóch s¡siednich liter. Napisz program, który oblicza odlegªo±¢ edycyjn¡ dwóch sªów, oparty na nowej
denicji.
Zadanie 7. (2p) Sprawd¹ w dokumentacji Pythona, co robi funkcja split. Poka», jak wykorzysta¢ j¡ do
rozwi¡zania zadania analizy leksykalnej zdeniowanej w sposób nast¦puj¡cy:
• Nale»y podzieli¢ tekst na list¦ napisów, z których ka»dy oznacza 1 leksem.
• Separatorem mo»e by¢ ci¡g spacji.
• Oprócz tego dana jest lista napisów, które s¡ separatorami i leksemami jednocze±nie.
• ›aden z tych napisów-separatorów nie jest fragmentem innego.
Wynikiem wywoªania lex("(1+ 2) -3+123) ",['(', ')', '-', '+']) powinna by¢ lista ['(', '1',
'+', '2', ')', '-', '3', '+', '123', ')' ].
Zadanie 8. Napisz procedur¦ Podziel(A,i,j,m,n), która wybiera losowo indeks pomi¦dzy i a j, po
czym znajduje warto±ci m oraz n i przestawia elementy tablicy liczb caªkowitych A w taki sposób, »e na
pozycjach od i do m-1 mamy warto±ci mniejsze ni» x0 , mi¦dzy m a n s¡ liczby równe x0 , natomiast na
pozycjach od n+1 do j wi¦ksze od x0 , gdzie x0 to warto±¢ znajduj¡ca si¦ na pocz¡tku w tablicy A na
wylosowanej pozycji.
Zadanie 9. Przypomnij, jak dziaªa algorytm quicksort. Przedstaw jego denicj¦ w j¦zyku C lub w
Pascalu.
Zadanie 10. W zadaniu mo»na u»ywa¢ C, Pascala lub Pythona. Poka», jak mo»na wykorzysta¢ drzewo
do zapami¦tywania wyra»e« arytmetycznych zawieracj¡cych liczby, identykatory, nawiasy oraz cztery
podstawowe operacje arytmetyczne. Napisz program, który tworzy takie drzewo pobieraj¡c jako argument
list¦ napisów (liczb, zmiennyc, operatorów i nawiasów) przedstawiaj¡cych pewne wyra»enie w notacji
preksowej.
Zadanie 11. Dla wyra»enia zadanego jako drzewo (patrz poprzednie zadanie) napisz program, który
wypisuje je w notacji preksowej, odwrotnej notacji polskiej oraz zwykªej notacji inskowej. W tym
ostatnim przypadku liczba nawiasów nie musi by¢ minimalna.