Programowanie Studia Licencjackie Lista 1.

Transkrypt

Programowanie Studia Licencjackie Lista 1.
Programowanie
Studia Licencjackie
Lista 1.
W poniższych programach licznikowych dane bed
, a, znajdować sie, w zmiennych X oraz Y , po zakończeniu działania
wynik powinien znajdować sie, w zmiennej W .
Zadanie 1. Napisz program licznikowy, który oblicza iloczyn X · Y .
Zadanie 2. Napisz program licznikowy, który oblicza X −̇Y , gdzie
(
X − Y, jeśli X ≥ Y,
X −̇Y =
0 w przeciwnym przypadku.
Zadanie 3. Napisz program licznikowy, który oblicza max(X, Y ), czyli wartość wiekszego
ze swoich dwóch argumentów.
,
Zadanie 4. Zdefiniuj gramatyke, bezkontekstowa, generujac
wszystkich palindromów nad alfabetem {a, b}. Słowo
, a, jezyk
,
jest palindromem, jeżeli przeczytane wspak jest sobie równe.
Zadanie 5. Zdefiniuj gramatyke, bezkontekstowa, generujac
tych słów nad alfabetem {0, 1}, które zawieraja,
, a, jezyk
,
parzysta, liczbe, znaków 0, a nieparzysta, znaków 1. (Jak zobaczymy, że do wygenerowania tego jezyka
wystarcza dużo
,
prostszy od gramatyk bezkontekstowych mechanizm.)
Zadanie 6. Słowo x nad alfabetem {<, >} jest ciagiem
poprawnie rozstawionych nawiasów katowych,
jeżeli bilans(x) =
,
,
0, oraz dla każdego prefiksu1 y słowa x mamy bilans(y) ≥ 0. Funkcja bilans(·) zdefiniowana jest w nastepuj
acy
sposób:
,
,
bilans(ε) = 0
bilans(<w) = bilans(w) + 1
bilans(>w) = bilans(w) − 1
Zdefinuj gramatyke, generujac
poprawnie rozstawionych nawiasów katowych.
, a, wszystkie ciagi
,
,
Zadanie 7. Podaj wszystkie drzewa rozbioru słowa 1 − 0 − 0 − 1 dla gramatyki zawierającej produkcje E → 1, E →
0, E → E − E.
Zadanie 8. Niech G bedzie
gramatyka, nad alfabetem terminalnym {a, b}, ze zbiorem symboli nieterminalnych {A, B, S},
,
sybolem poczatkowym
S
oraz
zbiorem produkcji
,
P = {S → ε, S → aB, S → bA, A → aS, A → bAA, B → bS, B → aBB}
Znajdź (jakieś) wyprowadzenie słowa abbaababba w tej gramatyce.
Zadanie 9. Poniższa gramatyka w notacji EBNF opisuje fragment języka Modula-2:
S
= Id := E |
if E then SI [{ elsif E then SI}] [ else SI ] end |
loop SI end |
while E do SI end
SI = S[{;S}]
Symbol nieterminalny Id reprezentuje identyfikator, E zaś — wyrażenie. oznacza pusty napis. Przepisz powyższą
gramatykę do „czystego” BNF. Narysuj diagram syntaktyczny opisujący ten język.
Zadanie 10. Nastepuj
ace
wyrażenie przedstaw w notacji przyrostkowej i przedrostkowej. Wykorzystując to, że doda,
,
wanie i mnożenie jest łączne, przedstaw te wyrażenia w możliwie najzwięźlejszy sposób używając przedrostkowej notacji
z języka LISP.
a) (23 + 45) ∗ (53 + 17)
b) 1 + 2 + 3 ∗ 4 ∗ 5
c) 12 − 7 ∗ (13 + 5) ∗ 4
d) 45 + (60 − 34) − 12
Zadanie
a) 1 2 +
b) 3 4 2
c) 3 5 +
d) 1 2 3
1 Słowo
11. Oblicz wartości poniższych wyrażeń. Wyrażenia zapisz w postaci infiksowej.
4 3 - 5 ^ *
+ * 4 ^ 2 * 12 3 5 - * 2 2 2 ^ ^ * 4 7
- - 3 2 1 0 - - - -
prefiks oznacza cześć
poczatkow
a, słowa, x jest prefiksem słowa xy.
,
,