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.