Paradygmaty programowania/Ćwiczenia 2: Semantyka zmiennych: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Linia 60: Linia 60:
         f();
         f();
       }
       }
==Test==
<quiz type="exclusive">
</quiz>
<quiz type="exclusive">
Program może zawierać dwie różne zmienne o tej samej nazwie, gdy są to zmienne:
<wrongoption reply="Źle">alokowane dynamicznie</wrongoption>
<wrongoption reply="Źle">globalne</wrongoption>
<rightoption reply="Dobrze">lokalne w dwóch różnych blokach</rightoption>
<wrongoption reply="Źle">lokalne w tym samym bloku</wrongoption>
</quiz>
<quiz type="exclusive">
L-wartością nazywamy:
<rightoption reply="Dobrze">bieżący adres zmiennej</rightoption>
<wrongoption reply="Źle">wynik wyrażenia arytmetycznego</wrongoption>
<wrongoption reply="Źle">indeks tablicy</wrongoption>
<wrongoption reply="Źle">wartość zmiennej po dokonaniu podstawienia</wrongoption>
</quiz>
<quiz type="exclusive">
Wiązanie statyczne:
<wrongoption reply="Źle">może zmienić się w trakcie wykonania programu</wrongoption>
<wrongoption reply="Źle">następuje w trakcie wykonania programu</wrongoption>
<rightoption reply="Dobrze">następuje przed wykonaniem programu</rightoption>
<wrongoption reply="Źle">odnosi się tylko do zmiennych globalnych</wrongoption>
</quiz>
<quiz type="exclusive">
Wnioskowanie o typie zmiennej jest najczęstsze w językach:
<rightoption reply="Dobrze">funkcyjnych</rightoption>
<wrongoption reply="Źle">logicznych</wrongoption>
<wrongoption reply="Źle">obiektowych</wrongoption>
<wrongoption reply="Źle">nie występuje w żadnym przyzwoitym języku</wrongoption>
</quiz>
<quiz type="exclusive">
Okres życia zmiennej to:
<rightoption reply="Dobrze">czas pomiędzy alokacją zmiennej a jej dealokacją</rightoption>
<wrongoption reply="Źle">czas od uruchomienia programu do chwili wykonania na tej zmiennej delete, free itp.</wrongoption>
<wrongoption reply="Źle">obszar kodu pomiędzy deklaracją zmiennej a końcem zawierającego ją bloku</wrongoption>
<wrongoption reply="Źle">czas od pierwszego podstawienia pod tę zmienną do ostatniego jej użycia w programie</wrongoption>
</quiz>
<quiz type="exclusive">
Obiekty w Javie są alokowane:
<rightoption reply="Dobrze">dynamicznie, na stercie</rightoption>
<wrongoption reply="Źle">dynamicznie, na stosie</wrongoption>
<wrongoption reply="Źle">dynamicznie, na stosie lub na stercie (decyzję podejmuje kompilator)</wrongoption>
<wrongoption reply="Źle">statycznie</wrongoption>
</quiz>
<quiz type="exclusive">
Spośród wymienionych tu języków najbliższy silnemu typowaniu jest:
<wrongoption reply="Źle">C</wrongoption>
<wrongoption reply="Źle">C++</wrongoption>
<rightoption reply="Dobrze">C\#</rightoption>
<wrongoption reply="Źle">PHP</wrongoption>
</quiz>
<quiz type="exclusive">
Silne typowanie bywa ,,osłabiane'' przez:
<wrongoption reply="Źle">jawne konwersje typów</wrongoption>
<rightoption reply="Dobrze">niejawne konwersje typów</rightoption>
<wrongoption reply="Źle">dynamiczne sprawdzanie zgodności typów</wrongoption>
<wrongoption reply="Źle">statyczne sprawdzanie zgodności typów</wrongoption>
</quiz>
<quiz type="exclusive">
Podtyp to:
<rightoption reply="Dobrze">typ powstały przez ograniczenie zakresu istniejącego typu, zgodny z owym typem</rightoption>
<wrongoption reply="Źle">nowy typ oparty na już istniejącym, niezgodny z dotychczasowym</wrongoption>
<wrongoption reply="Źle">typ tablicowy, w którym ograniczono zakres indeksów</wrongoption>
<wrongoption reply="Źle">jedno z pól unii</wrongoption>
</quiz>
<quiz type="exclusive">
W języku C++ dostęp do przesłoniętej zmiennej nielokalnej można
uzyskać za pomocą operatora:
<rightoption reply="Dobrze">\:\: (dwa dwukropki)</rightoption>
<wrongoption reply="Źle">. (kropka)</wrongoption>
<wrongoption reply="Źle">* (gwiazdka)</wrongoption>
<wrongoption reply="Źle">-> (strzałka)</wrongoption>
</quiz>

Wersja z 08:36, 13 wrz 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?

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