Paradygmaty programowania/Ćwiczenia 2: Semantyka zmiennych

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

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?

Wskazówka:

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();
     }


Test


Program może zawierać dwie różne zmienne o tej samej nazwie, gdy są to zmienne:

alokowane dynamicznie

globalne

lokalne w dwóch różnych blokach

lokalne w tym samym bloku

L-wartością nazywamy:

bieżący adres zmiennej

wynik wyrażenia arytmetycznego

indeks tablicy

wartość zmiennej po dokonaniu podstawienia

Wiązanie statyczne:

może zmienić się w trakcie wykonania programu

następuje w trakcie wykonania programu

następuje przed wykonaniem programu

odnosi się tylko do zmiennych globalnych

Wnioskowanie o typie zmiennej jest najczęstsze w językach:

funkcyjnych

logicznych

obiektowych

nie występuje w żadnym przyzwoitym języku

Okres życia zmiennej to:

czas pomiędzy alokacją zmiennej a jej dealokacją

czas od uruchomienia programu do chwili wykonania na tej zmiennej delete, free itp.

obszar kodu pomiędzy deklaracją zmiennej a końcem zawierającego ją bloku

czas od pierwszego podstawienia pod tę zmienną do ostatniego jej użycia w programie

Obiekty w Javie są alokowane:

dynamicznie, na stercie

dynamicznie, na stosie

dynamicznie, na stosie lub na stercie (decyzję podejmuje kompilator)

statycznie

Spośród wymienionych tu języków najbliższy silnemu typowaniu jest:

C

C++

C\#

PHP

Silne typowanie bywa ,,osłabiane przez:

jawne konwersje typów

niejawne konwersje typów

dynamiczne sprawdzanie zgodności typów

statyczne sprawdzanie zgodności typów

Podtyp to:

typ powstały przez ograniczenie zakresu istniejącego typu, zgodny z owym typem

nowy typ oparty na już istniejącym, niezgodny z dotychczasowym

typ tablicowy, w którym ograniczono zakres indeksów

jedno z pól unii

W języku C++ dostęp do przesłoniętej zmiennej nielokalnej można uzyskać za pomocą operatora:

\:\: (dwa dwukropki)

. (kropka)

* (gwiazdka)

-> (strzałka)