|
|
(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>
| |
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: Zastanów się nad rozmiarem pamięci potrzebnej do przechowywania obiektu z pewnej klasy i obiektu z klasy rozszerzającej tę pierwszą.
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();
}