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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Pitab (dyskusja | edycje)
Pitab (dyskusja | edycje)
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 x = 2;
      int y = 1;


      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 f() {
       void main() {
 
        g();
        x = x + 1;
        f();
 
      }
        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?

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