DANE --> Statyczne L-> Dynamiczne --> Stos L-> Sterta --> Alokacja jawna L-> Alokacja niejawna Zad.01 Omów i scharakteryzuj każdą z cech danej. Dana jest charakteryzowana przez: 1. adres 2. nazwę (identyfikator) 3. wartość 4. typ 5. okres życia (często = czas działania programu) 6. zakres widoczności (skąd można do zmiennej się odwołać) Zad.02 Jak Fortran77 obsługuje typy i zmienne? cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c WERSJA 1 program zmienna_zew integer a,b,c real x x=0.0 write(*,*) "Podaj liczby a,b,c" read(*,*) a,b,c do 5 i=1,20 x=x+0.5 write(*,*) x,f(x,a,b,c) 5 continue end program function f(x,a,b,c) real x,f integer a,b,c f=a*x*x + b*x + c end function cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c WERSJA 2 - blok common - z błędem program zmienna_zew integer a,b,c real x common /blok1/ a,b,c x=0.0 write(*,*) "Podaj liczby a,b,c" read(*,*) a,b,c do 5 i=1,20 x=x+0.5 write(*,*) x,f(x) 5 continue end program function f(x) real x,f common /blok1/ a,b,c f=a*x*x + b*x + c end function cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c WERSJA 2 - blok common - poprawnie program zmienna_zew integer a,b,c real x common /blok1/ a,b,c x=0.0 write(*,*) "Podaj liczby a,b,c" read(*,*) a,b,c do 5 i=1,20 x=x+0.5 write(*,*) x,f(x) 5 continue end program function f(x) real x,f integer a,b,c common /blok1/ a,b,c f=a*x*x + b*x + c end function cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc a) Zmień nazwy zmiennych a,b,c w funkcji f(x) na inne, np. dd,ee,ff. b) Załóżmy, że funkcja f ma za zadanie modyfikować zmienną a. Zmodyfikuj program i sprawdź, czy tak się dzieje naprawdę. c) Wróć do wersji bez bloku common. Załóżmy, że f ma modyfikować zmienną a. Jak sobie poradzić w takiej sytuacji? Czy f może pozostać funkcją, czy trzeba ją zamienić w procedurę? d) Zauważ, że w programie brak deklaracji typu zmiennej i. W Fortranie zmienne zaczynające się na i-n są domyślnie typu integer, zaś pozostałe typu real. Usuń deklarację "integer a,b,c" i sprawdź, co się stanie. e) Zmień typ funkcji f(x) na integer i zobacz, co się stanie. Zad.03 Zmienne lokalne i globalne (export) w powłoce bash. Zad.04 Wykorzystanie tych samych nazw zmiennych w podprocedurach jest dozwolone. Napisz własny analogiczny przykład. cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc program takie_samo_id real a,b,c,d a=1. b=2. c=5. d=7. write(*,*) a,b,c,d write(*,*) "Na zewnątrz funkcji a=",a write(*,*) suma(suma(a, b),suma(c,d)) end program function suma(a,b) real a,b write(*,*) "Wewnątrz funkcji a=",a suma=a+b end function cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc Zad.05 Typowanie i zamiana typów a) bash ("+" <==> concatenate) a=5 ; b=7 ; echo $a+$b b) awk ("+" oznacza tylko dodawanie liczb, ale nie zgłasza błędu!) awk 'BEGIN{a=5; b=7 ; print a+b}' awk 'BEGIN{a=5v ; b=7c ; print a+b}' awk 'BEGIN{a=v5v ; b=7c ; print a+b}' awk 'BEGIN{a=5v ; b=v7c ; print a+b}' c) jak to wygląda w Pascalu, Fortranie, C? Zad.06 Jaki wynik da program dla języka ze statycznymi zakresami widoczności zmiennych, a jaki dla zakresów dynamicznych? F(){ integer x=5 procedura1(){ integer x=6 proc2() } proc2(){ write x } procedura1() } Zad.07 Co wydrukuje instrukcja Put jeśli zakresy są ustalane statycznie/dynamicznie? procedure Main is X: Integer ; procedure A is begin Put(X) end; procedure B is X:Integer ; begin X:=1 ; A end; begin X:=2 ; B end ; Zad.08 Jaki będzie wynik działania programu dla statycznego/dynamicznego ustalania zakresów widoczności zmiennych? 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(); }