Sciąga z Pascalu + test z rozwiązaniami.
Gotowa do druku książeczka w formacie A5. Zawiera teorię, zadania i test z rozwiązaniami.
Oto przykład testu:
1.Która z poniższych konstrukcji jest niepoprawna, przy założeniu, że zmienna jest_zero jest typu boolean?
a) if jest_zero then...
b) if jest_zero=true then...
c) if jest_zero=1 then...
- - bo zmiennej logicznej nie można porównać z liczbą; natomiast obie wersje a) i b) są poprawne i znaczą to samo.
2. Gdzie należy wpisać dane do programu:
a) W oknie, które się otworzy, gdy program zacznie się wykonywać.
b) Na końcu programu, za słowem end z kropką.
c) Po słowie const znajdującym się na początku programu.
- – dane wpisujemy przecież dopiero, gdy program się uruchomi, nigdy zaś w tekście programu!!! Stałe wpisywane w programie nie są danymi. Dane to coś, co wczytujemy instrukcją read lub readln.
3. Jak sprawdzić, czy x jest zawarte w przedziale :
a) if a<=x<=b then...
b) if (x>=a) and (x<=b) then...
c) if x>=a and x<=b then...
b) – nawiasy są konieczne, gdyż inaczej najpierw zadziałałby operator „and” na argumentach sąsiednich, i wynikłby z tego błąd kompilacji.
4. Która z podanych pętli jest równoważna (jeśli chodzi o drukowane wyniki) podanej konstrukcji:
x:=0; repeat x:=x+1; writeln(x); until x > 10;
a) for x:=1 to 10 do writeln(x);
b) for x:=0 to 10 do writeln(x);
c) for x:=1 to 11 do writeln(x);
- – bo z pętli repeat wyjdziemy dopiero, gdy x będzie większe od 10, więc ostatnią drukowaną wartością jest 11.
5. Która konstrukcja nie jest równoważna następującej: writeln(a,b,c,d)
a) write(a,b); write©; writeln(d);
b) write(a,b,c,d); writeln;
c) writeln(a,b); writeln(c,d);
- – bo po wydrukowaniu wartości a i b nastąpi przejście do nowej linii; natomiast w przypadkach a) i b) przejście do nowej linii następuje dopiero po wydrukowaniu wszystkich czterech wartości a,b,c,d.
6. Co wydrukuje następująca pętla: for i:=1 to n do writeln(a[i,i+1]) w przypadku tablicy a[1..n,1..n]
a) główną przekątną tablicy a.
b) linię ukośną tuż nad główną przekątną tablicy a.
c) linię ukośną tuż nad główną przekątną tablicy a, ale potem nastąpi błąd wykonania.
- – dla i=n nie da się wyznaczyć a[i,i+1], bo nie ma takiego elementu, więc tu się program „wyłoży”.
7. Chcemy wypełnić tablicę A[1..n] liczbami >10 wczytywanymi z klawiatury, pomijając pozostałe. Która konstrukcja jest niepoprawna?
a) for I:=1 to n do begin readln(x); if x>10 then A[I]:=x end;
b) for I:=1 to n do repeat readln(A[I]) until A[I]>10;
c) I:=1; repeat readln(x); if x>10 then begin A[I]:=x; I:=I+1 end; until I>n;
- – w takim przypadku niektóre miejsca w tablicy pozostałyby niewypełnione!!!; trzeba zastosować tu konstrukcję b) lub c).
8. Co można wczytać z pliku tekstowego:
a) tylko teksty (napisy), czyli kolejne wiersze pliku
b) liczby, znaki lub teksty – to zależy od instrukcji wczytywania.
c) tylko znaki.
b) – oczywiście można wczytać różne dane, typ zmiennej wczytywanej określa, co wczytujemy.
9. Który nagłówek funkcji jest prawidłowy?:
a) function wynik(A,B:Tab; nazwa:string);
b) function wynik(A,B:Tab; nazwa:string): integer;
c) function wynik(A,B:Tab, nazwa:string): integer;
b) – w nagłówku a) brak typu wyniku funkcji, zaś w nagłówku c) jest przecinek zamiast średnika.
10. Co możemy powiedzieć o instrukcji readln(pwe, a, b, c);
a) wczytuje cztery zmienne pwe,a,b,c z klawiatury.
b) wczytuje zmienne a,b,c z pliku określonego przez zmienną plikową pwe.
c) nic takiego nie możemy powiedzieć, jeśli nie wiemy, jakiego typu jest zmienna pwe.
- – jeśli pwe jest zmienną plikową, to znaczy, że czytamy z pliku pwe, a jeśli pwe nie jest zmienną plikową, to znaczy, że z klawiatury wczytujemy cztery zmienne(nazwy nie są istotne).
11. Co oznacza poniższe odwołanie: (zmienna glowa jest początkiem listy, pole a elementu listy jest wektorem [1..10]):
glowa^.a[3]
a) Adres trzeciego elementu listy.
b) Trzeci element wektora a znajdującego się w pierwszym elemencie listy.
c) Odwołanie to jest nieprawidłowe.
b) – pod adresem glowa (czyli w pierwszym elemencie listy) jest rekord, którego polem jest wektor a, zaś a[3] oznacza trzeci element tego wektora (o ile oczywiście jest on indeksowany od 1).
12. Które odwołanie się do pola rekordu znajdującego się w tablicy A (o deklaracji jak niżej) jest prawidłowe:
type Tosoba = record imie: string; end;
var A: array[1..20] of Tosoba;
a) A[5].imie := Halina;
b) A[5].imie := ‘Halina’;
c) A.imie[5] := ‘Halina’;
b) – indeks musi stać przy nazwie tablicy (czyli przy A), zaś łańcuch musi być napisany w apostrofach.
13. Co się stanie, jeśli w treści funkcji nie będzie podstawienia wyniku pod nazwę funkcji:
d) Program z tak zadeklarowaną funkcją się nie skompiluje.
e) Program się skompiluje, ale nie da się wykonać.
f) Program da się wykonać, ale funkcja nie będzie zwracała wyniku przez swoją nazwę.
- – aby funkcja przekazywała (zwracała) wynik poprzez nazwę, w treści funkcji musi być podstawienie wyniku pod nazwę funkcji; brak takiego podstawienia jest wyłącznie błędem logicznym.
14. Która deklaracja podprogramu nie pozwoli zwrócić (przekazać wyniku) sumy elementów wektora A typu Twekt?
a) procedure (A: Twekt; suma: real);
b) procedure (A: Twekt; var suma: real);
c) function suma (A: Twekt): real;
- – parametr suma nie jest tu przekazywany przez zmienną, więc nie dostaniemy wyniku za pomocą tego parametru. Natomiast rozwiązania b) i c) są poprawne, można zastosować jedno z nich.
15. Czy da się uruchomić taki program, w którym procedura Proszę wywołuje funkcję F, a funkcja F wywołuje procedurę Proszę:
a) Taki program się nie skompiluje.
b) Taki program da się uruchomić, ale jeśli nie będzie warunku końca, będzie chodził w kółko aż do przepełnienia.
c) Taki program się skompiluje, ale nie da się uruchomić.
b) – to jest przykład rekurencji pośredniej; program będzie działał, ale procedura powinna mieć warunek końca.