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
Wkm (dyskusja | edycje)
 
(Nie pokazano 2 wersji utworzonych przez 2 użytkowników)
Linia 30: Linia 30:
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?
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
       procedure Main is
         X: Integer;
         X: Integer;
         procedure PrA is begin Put(X) end;
         procedure PrA is begin Put(X) end;
         procedure PrB is X: Integer; begin X := 1; PrA end;
         procedure PrB is X: Integer; begin X := 1; PrA end;
         begin X := 2; PrB end;''
         begin X := 2; PrB end;


===Zadanie 10===
===Zadanie 10===
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 x = 2;
       int y = 1;
       int y = 1;
 
     
       void f() {
       void f() {
         x = x + 1;
         x = x + 1;
Linia 47: Linia 47:
         print(x, y);
         print(x, y);
       }
       }
 
     
       void g() {
       void g() {
         int x = 1;
         int x = 1;
Linia 55: Linia 55:
         f();       
         f();       
       }
       }
 
     
       void main() {
       void main() {
         g();
         g();
         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>

Aktualna wersja na dzień 21:22, 21 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();
     }