Paradygmaty programowania/Ćwiczenia 2: Semantyka zmiennych: Różnice pomiędzy wersjami
Linia 39: | Linia 39: | ||
Rozważmy poniższy program. Co zostanie wypisane, jeśli zakresy są ustalane statycznie? Co przy dynamicznym ustalaniu zakresów? | Rozważmy poniższy program. Co zostanie wypisane, jeśli zakresy są ustalane statycznie? Co przy dynamicznym ustalaniu zakresów? | ||
''int x = 2; | |||
int y = 1; | |||
void f() { | |||
x = x + 1; | |||
y = y + 2; | |||
print(x, y); | |||
} | |||
void g() { | |||
int x = 1; | |||
x = x + 2; | |||
y = y + 1; | |||
print(x, y); | |||
f(); | |||
} | |||
void main() { | |||
g(); | |||
f(); | |||
} | |||
Wersja z 22:00, 25 lip 2006
Zadanie 1
Wymienić momenty, w których mogą następować wiązania różnych rodzajów.
Zadanie 2
Jakie zmienne w C++ są zawsze aliasowane?
Zadanie 3
Napisz funkcję, w której przydatna będzie „zmienna z historią”, czyli zmienna, której wartość nie znika pomiędzy wywołaniami funkcji. Jak powołać do życia taką zmienną w języku C (lub podobnym)?
Zadanie 4
Zapisz przykładową instrukcję podstawienia w paru znanych Ci językach. Określ, jakie wiązania wchodzą tu w grę. Kiedy następują? Czy są różnice pomiędzy językami? Zrób to samo dla przykładowego wywołania funkcji.
Zadanie 5
Podaj przykłady języków, które mają niejawną dealokację pamięci ze sterty.
Zadanie 6*
Obiekty w języku C++ mogą być dynamiczne na stosie lub na stercie. Czy w Javie jest tak samo? Jaki to ma związek z metodami polimorficznymi?
Zadanie 7
Jaki jest związek dynamicznego wiązania typu z niejawną alokacją zmiennych na stercie?
Zadanie 8
Na czym polega różnica między podtypem a typem pochodnym w Adzie?
Zadanie 9
Rozważmy program napisany w składni języka Ada. Jaka wartość zostanie wydrukowana przez Put, jeśli zakresy są ustalane statycznie? Jaka przy dynamicznym ustalaniu zakresów?
procedure Main is X: Integer; procedure PrA is begin Put(X) end; procedure PrB is X: Integer; begin X := 1; PrA end; begin X := 2; PrB end;
Zadanie 10
Rozważmy poniższy program. Co zostanie wypisane, jeśli zakresy są ustalane statycznie? Co przy dynamicznym ustalaniu zakresów?
int x = 2; int y = 1;
void f() { x = x + 1; y = y + 2; print(x, y); }
void g() { int x = 1; x = x + 2; y = y + 1; print(x, y); f(); }
void main() { g(); f(); }