Programowanie – materiały pomocnicze przygotowała Helena

Transkrypt

Programowanie – materiały pomocnicze przygotowała Helena
Programowanie – materiały pomocnicze
przygotowała Helena Krupicka
Struktury danych – listy
Lista w Logo jest uj tym w nawiasy kwadratowe ci giem słów lub list; ci g ten mo e by pusty.
Jest to definicja rekurencyjna. Lista pusta [ ] ma zero elementów. Lista niepusta ma co najmniej jeden element. Mo e nim by słowo lub
lista. Przykłady: [ ], [1 2], [to jest lista] [[i ] [to jest] [lista]].
Słowem w Logo jest dowolny ci g znaków zako czony separatorem. Separatorami w Logo s : znaki spacji, przej cia do nowej linii,
nawiasy kwadratowe i okr głe.
Przegl danie listy - funkcje pierwotne:
PIERW [a b c] = a, PIERW [[a] b c] = [a],
BP [a b c] = [b c], BP [a] = [ ],
OST [a b c] = c,
BO [a b c] = [a c]
pierwszy element listy (lub słowa)
lista (słowo) bez pierwszego elementu
ostatni element listy (słowa)
lista (słowo) bez ostatniego elementu
Rekurencyjny schemat przegl dania listy:
1. Je li lista jest pusta, to zako cz algorytm.
2. Wykonaj jakie czynno ci (bez rekurencji) dla pierwszego elementu listy.
3. Wykonaj ten sam algorytm (czyli rekurencja) dla listy bez pierwszego elementu (pierwszy mo na zast pi ostatnim).
Zadanie 1. Napisz procedur , która dla danej listy liczb L drukuje te liczby od ostatniej do pierwszej, ka d w nowym wierszu.
oto odKo ca :L
Procedura odKo ca jest w pliku procedury_z_listami
;drukuje elementy listy L od ko ca
je li :L=[ ] [stop]
PS OST :L
odKo ca BO :L
ju
Tworzenie listy
Za pomoc funkcji pierwotnych mo na utworzy now list lub zmieni elementy istniej cej.
Jedn z funkcji pierwotnych jest CL, której warto ci jest lista utworzona z elementów wpisywanych z klawiatury a do naci ni cia
klawisza ENTER .
Na przykład, je li w trakcie wykonywania instrukcji PRZYP ''L CL podamy ci g elementów 1 2 3 4 5 i naci niemy klawisz ENTER, to
warto ci zmiennej L b dzie lista [1 2 3 4 5].
Warto ci funkcji pierwotnej CZ jest jeden znak przeczytany z klawiatury.
Przykładem wykorzystania czytania listy jest nast puj ca procedura Poczekaj, która (czyta list i nic z ni nie robi) tylko czeka na
naci ni cie klawisza Enter. Mo na t procedur wykorzystywa w przykładach, np. rysowania piramidy, do zatrzymywania działania
programu a do naci ni cia klawisza Enter przez u ytkownika (zob. przykład w pliku piramidy_z_poczekaj).
oto poczekaj
; czeka na naci ni cie klawisza Enter
PS [ ]
WPISZ [Naci nij klawisz Enter]
je li CL = [ ][ ]
ju
oto piramida_B_z_poczekaj :a
;bez niezmiennika
je li :a < 5 [STOP]
prostok t :a 5 * :a
hop 0.1 * 5*:a :a
poczekaj
piramida_B_z_poczekaj 0.8 * :a
ju
oto piramida_N_z_poczekaj :a
;z niezmiennikiem
je li :a < 5 [STOP]
prostok t :a 5 * :a
hop 0.1 * 5 * :a :a
poczekaj
piramida_N_z_poczekaj 0.8 * :a
hop ( - 0.1 * 5 * :a) (-:a)
poczekaj
ju
Elementy listy s w Logo traktowane dosłownie, tzn. zapis [2 + 3] oznacza list zło on z 3 słów: 2, + i 3.
Je li w li cie chcemy umie ci warto wyra enia, np. 2 + 3, to trzeba u y funkcji pierwotnych.
Oto funkcje pierwotne, których warto ciami s listy utworzone z warto ci 2 argumentów:
LISTA a b = [a b], LISTA [a b] c = [[a b] c] warto ci funkcji lista dla 2 parametrów jest lista zło ona z tych parametrów
zd a* b* = [a** b**] ; je li a* (b*) jest atomem, czyli liczb lub słowem, to a** (b**) jest tym samym atomem; je li a* (b*) jest list , to
a** (b**) jest zawarto ci tej listy (odpowiednio a* lub b*) po zdj ciu jednej pary zewn trznych nawiasów,
NAP 2 [3 4] = [2 3 4] (pierwszy element dopisany na pocz tek listy b d cej drugim elementem)
NAK 2 [3 4] = [3 4 2] (pierwszy element dopisany na ko cu listy b d cej drugim elementem)
Programowanie – materiały pomocnicze
przygotowała Helena Krupicka
Przykłady definiowanych funkcji, których dane lub wyniki s listami (s w pliku procedury_z_listami, procedur główn jest
starter)
Warto ci funkcji długo
oto długo :L
je li :L = [ ] [wy 0]
wy 1 + długo BP :L
ju
:L jest liczba elementów listy L
Warto ci funkcji odwrotna :L jest lista L od ostatniego do pierwszego elementu
oto odwrotna :L
; warto ci funkcji jest lista L od ostatniego do pierwszego elementu
je li :L = [] [wy :L]
wy zd ost :L odwrotna bo :L
ju
Funkcja listaLosowa, której warto ci jest lista zło ona z n (n > 0) liczb wybieranych losowo spo ród trzech liczb 1, 2 lub 3.
oto listaLosowa :n
;n >= 1
je li :n = 1 [wy nap ( 1 + losowa 3 ) [ ] ]
wy nak ( 1 + losowa 3 ) listaLosowa :n - 1
ju
Funkcja max – maksymalna liczba z niepustej listy liczb.
(max([l1, l2,...,ln]) = l1, je li n = 1
= l1, je li l1 > a,
= a, w przec. razie,
gdzie a = max([l2, l3,...,ln]).
oto max_rk :l
wy max_rk_pom :l pierw :l
ju
oto max_rk_pom :l :wynik
je li ( DŁUGO :l ) = 0 [wy :wynik]
wy max_rk_pom bp :l
je eli ( :wynik < pierw :l ) [pierw :l][:wynik]
ju
Funkcja, której warto ci jest scalona lista z dwóch list zawieraj cych liczby uporz dkowane niemalej co.
oto scalanie :l1 :l2
je li :l1 = [ ][wy :l2]
je li :l2 = [ ][wy :l1]
je li ( pierw :l1 ) < pierw :l2 [wy zd pierw :l1 scalanie bp :l1 :l2]
wy zd pierw :l2 scalanie :l1 bp :l2
ju
Programowanie – materiały pomocnicze
przygotowała Helena Krupicka
Zadanie I*. Napisz program, który symuluje automat losuj cy 6 (ró nych) liczb totolotka. Wydrukuj te liczby w kolejno ci rosn cej.
Rozwi zanie zadania z losowaniem totolotka
losuje 6 ró nych liczb totolotka i drukuje je od najmniejszej do najwi kszej; procedur główn starter
Tak zaznacza si spacj , która ma by wydrukowana
oto starter
ct wpisz [Numery totolotka: \ ]
ps totolotek
ju
Wypisuje wylosowane numery totolotka
oto totolotek
przyp "pom [ ]
powtórz 6 [przyp "pom wstaw :pom losuj :pom]
wy :pom
ju
Warto ci funkcji totolotek jest lista 6 rosn co
uporz dkowanych liczb losowych z przedziału [1, 49]
oto wstaw :pom :nr
; wstawia nr do listy pom, aby pozostala rosn ca
je li :pom = [ ][wy zd :nr :pom]
je li :nr < ( pierw :pom ) [wy zd :nr :pom]
wy zd pierw :pom wstaw bp :pom :nr
ju
Dane: pom – rosn co uporz dkowana lista liczb,
nr – liczba
Warto ci funkcji jest rosn co uporzadkowana lista liczb
pom zawieraj ca liczb nr
oto losuj :pom
przyp "nr 1 + losowa 49
je li nie_ma :nr :pom [wy :nr]
wy losuj :pom
ju
Warto ci jest losowa liczba z przedziału [1, 49] ró na od
liczb z listy pom
oto nie_ma :nr :pom
; prawda, je li nr nie wystepuje na liscie pom,
; w przeciwnym razie fałsz
je li :pom = [ ][wy "prawda]
je li :nr = ( pierw :pom ) [wy "fałsz]
wy nie_ma :nr bp :pom
ju
Funkcja o warto ci logicznej (prawda lub fałsz)
Zadanie II: Dana jest lista dwuelementowych list KsTel= [[nr_telefonu abonent] ...] reprezentuj ca ksi k telefoniczn wewn trznych
numerów telefonicznych, np. po wykonaniu instrukcji PRZYP ”KsTel [[3 Adrian] [5 Basia] [3 Romek] [ 12 Ala] ] warto ci zmiennej
KsTel (reprezentuj c ksi k telefoniczn ) jest lista [[3 Adrian] [5 Basia] [3 Romek] [ 12 Ala] ] .
Napisz program, który wydrukuje z tej ksi ki telefonicznej abonentów o podanym numerze telefonu; Program jest w pliku
ksi kaTelefoniczna, procedur główn jest starter.
oto Abonenci :KsTel :nr
; KsTel to ksi ka telefoniczna w postaci listy list [[nr-tel abonent] ...] utworzona wcze niej
; nr jest numerem, czyli liczb całkowit dodatni
oto starter
;procedura drukuje nazwy abonentów o numerze :nr
ct ps [Ksi ka telefoniczna]
JE LI :KsTel = [ ] [STOP]
JE LI :nr= PIERW PIERW :KsTel [PS OST PIERW :KsTel] ; -----------------------------------------------;wypełnienie ksi ki telefonicznej reprezentowanej przez zmienn
Abonenci BP :KsTel :nr
ksTel
ju
przyp "ksTel [[3 Bartek] [7 Ala] [3 Tomek] [12 Basia] [17 Kuba]]
;------------------------------------------------ps [Oto przykładowa ksi ka telefoniczna]
Wpisz [ksTel=] poka :ksTel
PS [Abonenci w ksi ce telefonicznej KsTel o podanym numerze
telefonu.]
PS [Podaj numer telefonu]
PRZYP "nr PIERW CL
Abonenci :KsTel :nr
ps [--------------------Koniec]
ju

Podobne dokumenty