pyt_pascal1.doc

(133 KB) Pobierz
Procedury i funkcje, struktura programu w Pascalu

Procedury i funkcje, struktura programu w Pascalu


?01
Czy nastepujace stwierdzenia dotyczace funkcji i procedur w jezyku Pascal sa prawdziwe?
*
Funkcje i procedury roznia sie sposobem ich deklaracji.
*
Funkcje i procedury deklaruje sie identycznie.
*
Funkcje i procedury roznia sie sposobem ich uzycia w programie.
*
Sposob uzycia funkcji i procedur w programie jest identyczny.
*
Sposoby przekazania prametrow do funkcji i procedur sa takie same.
*
Funkcje i procedury roznia sie sposobem przekazywania prametrow.


?02
Czy nastepujace stwierdzenia dotyczace funkcji w jezyku Pascal sa prawdziwe?
*
Funkcja zawsze zwraca wartosc.
*
Funkcja moze, ale nie musi zwracac wartosc.
*
Funkcja moze byc bezparametrowa.
*
Funkcja musi posiadac parametry.
*
Funkcje uzywane sa w wyrazeniach.
*
Funkcja moze byc uzywana jako samodzielna instrukcja.
*
Parametry moga byc przekazywane do funkcji zarowno w postaci VAR, jak i w postaci zwyklej (bez VAR).
*
Parametry moga byc przekazywane do funkcji tylko w postaci VAR.


?03
Czy nastepujace stwierdzenia dotyczace procedur w jezyku Pascal sa prawdziwe?
*
Procedura nie zwraca wartosci.
*
Procedura zawsze zwraca wartosc.
*
Procedura moze byc bezparametrowa.
*
Procedura musi posiadac parametry.
*
Procedura moze byc uzywana jako samodzielna instrukcja.
*
Procedura moze wystapic jedynie jako czesc wyrazenia.
*
Parametry moga byc przekazywane do procedury zarowno w postaci VAR, jak i w postaci zwyklej (bez VAR).
*
Parametry moga byc przekazywane do procedury tylko w postaci VAR.


?04
Czy funkcja Rowne, zdeklarowana jak ponizej,

      FUNCTION Rowne( a,b :INTEGER): BOOLEAN;

      BEGIN

        Rowne := a = b;

      END;

    


*
jest poprawna ?
*
jest bledna?
*
sprawdza czy argumenty wywolania sa rowne ?
*
przypisuje zmiennej a wartosc zmiennej b ?
*
zawiera wyrazenie?
*
jest funkcja rekurencyjna?


?05
Czy ponizsze wyrazenie jest prawdziwe (ma wartosc TRUE), jesli funkcja s zostala zadeklarowana nastepujaco:

      FUNCTION s(n:INTEGER) : INTEGER;

      BEGIN

        IF n<=1

          THEN s:=1

          ELSE s:=n*s(n-1)

      END;

  


*
s(3) + s(4) = 30
*
s(-5) * s(5) = 5
*
s(8) DIV s(7) = 8
*
s(5) MOD s(4) = 1


?06
Dana jest procedura:

      PROCEDURE Zmien( a :INTEGER; VAR b :INTEGER);

      BEGIN  a := a + 2 * b;  b := a - b; END;

     

oraz ciag instrukcji:

  x := 1;  y := 2;  Zmien(x,y);

 

Przyjmujac, ze zmienne x i y sa typu INTEGER, czy jest prawda ze:


*
Wartosc zmiennej x nie ulegnie zmianie.
*
Wartosc zmiennej y na pewno nie ulegnie zmianie.
*
x = 1, y = 3
*
x = 5, y = 2


?07
Rozwaz nastepujaca funkcje: FUNCTION s(k: INTEGER): INTEGER; BEGIN s := ((k MOD 6) DIV 2 )+1 END;
*
Dla k z przedzialu 0..5 funkcja s przyjmie wartosci 1 1 2 2 3 3.
*
Dla k z przedzialu 1..6 funkcja s przyjmie wartosci 1 2 2 3 3 4.
*
Funkcja s jest okresowa.
*
Funkcja s dziala poprawnie tylko dla nieujemnych wartosci argumentu k.


&08
Rekurencyjne implementacje funkcji roznia sie od iteracyjnych tym ze:
*
zwykle wymagaja mniej pamieci niz implementacje iteracyjne
*
zwykle wymagaja wiecej pamieci niz implementacje iteracyjne
*
sa z reguly wolniejsze niz implementacje iteracyjne
*
sa z reguly szybsze niz implementacje iteracyjne
*
zwykle wykonuja te same operacje wieksza liczbe razy
*
wykonuja zawsze te same operacje lecz w innej kolejnosci
*
zwykle sa bardziej czytelne i latwiejsze do weryfikacji
*
zwykle sa mniej czytelne i trudniejsze do weryfikacji


&09
Pojecie "alias" okresla sytuacje gdy:
*
parametry formalne i aktualne procedury maja takie same nazwy
*
dwie zmienne odwoluja sie do tego samego miejsca w pamieci
*
programista podpisal program cudzym nazwiskiem
*
dwoch (wielu) programistow napisalo taki sam program
*
zmienna lokalna ma taka sama nazwe jak zmienna globalna
*
istnieja dwie rozne zmienne o tej samej nazwie


&0A
Pojecie "asercja" wiaze sie z:
*
koniecznoscia zachowania optymistycznego spojrzenia na zycie
*
przestrzeganiem charakterystycznych dla Pascal'a "wciec" w programie
*
wykrywaniem przez program niepoprawnych wartosci zmiennych
*
umieszczaniem komentarzy w tresci programu
*
sprawdzaniem poprawnosci wywolania procedury lub funkcji
*
umieszczeniem warunkow PRE w opisie programu


?0B
O uzyciu parametrow VAR w Pascalu mozna powiedziec, ze:
*
zastepuja w uzyciu parametry CONST
*
pozwalaja deklarowac pomocnicze zmienne lokalne w procedurach i funkcjach
*
sa mniej bezpieczne w uzyciu niz zwykle parametry
*
sa bardziej bezpieczne w uzyciu niz zwykle parametry


?0C
O uzyciu parametrow VAR w Pascalu mozna powiedziec, ze:
*
mozna je zastapic przez uzycie zmiennych globalnych
*
mozna je zastapic przez uzycie zmiennych lokalnych
*
pozwalaja przesylac wartosci zmiennych z procedury do programy glownego
*
daja wieksze mozliwosci przez co sa bezpieczniejsze w uzyciu niz zwykle parametry


&0D
Dyrektywa FORWARD sluzy w Pascalu do:
*
deklarowania funkcji wywolywanej w programie przed jej pelna deklaracja
*
wskazania funkcji, ktora w programie nie bedzie zadeklarowana
*
przejscia programu do nastepnej partii danych
*
wykonania w programie skoku o okreslona liczbe linii


&0E
Rola dyrektywy FORWARD w Pascalu jest nastepujaca:
*
zastepuje blok w deklaracji procedury lub funkcji
*
zastepuje naglowek w deklaracji procedury lub funkcji
*
chroni przed przeslanianiem nazw globalnych przez nazwy lokalne
*
powoduje wysuniecie papieru przy wydruku programu na drukarce


?0F
Specyfikacja funkcji lub procedury w Pascalu ...
*
... to czesc jej deklaracji miedzy slowami BEGIN i END.
*
... jest okreslona przez jej naglowek.
*
... zawiera informacje o sposobie poprawnego jej wywolania.
*
... wymienia wszystkie "drivery", ktore jej uzywaja.


?10
Specyfikacja funkcji lub procedury w Pascalu ...
*
... to czesc jej deklaracji miedzy naglowkiem a blokiem.
*
... opisuje znaczenie wszystkich parametrow.
*
... musi wymieniac te procedury i/lub funkcje, ktore ja wywoluja.
*
... musi wymieniac procedury i/lub funkcje wywolywane przez nia.


?11
Celem pisania specyfikacji funkcji i procedur w programie jest, m.in.:
*
skrocenie czasu kompilacji programu
*
skrocenie czasu pracy programisty nad dana funkcja lub procedura
*
ulatwienie ponownego wykorzystania funkcji lub procedury, na przyklad w innym programie
*
ulatwienie kompilatorowi wykrywanie ewentulanych bledow zawartych w programie.
*
zmniejszenie szansy wystapienia w programie bledow
*
zwiekszenie efektywnosci dzialania funkcji i procedur


?12
Zjawisko przeslaniania odnosi sie do sytuacji gdy ...
*
... nazwa globalna jest przeslaniana przez nazwe lokalna.
*
... nazwa lokalna jest przeslaniana przez nazwe globalna.
*
... w procedurze jest brak dostepu do zmiennej globalnej bo istnieje zmienna lokalna o tej samej nazwie.
*
... nazwa wbudowana Pascala jest przeslaniana przez nazwe zadeklarowana w programie.
*
... w procedurze jest wykorzystywana zmienna globalna.
*
... zmienna o tej samej nazwie wystepuje w procedurze i programie glownym.


?13
Jesli w procedurze zadeklarujemy zmienna lokalna o takiej samej nazwie jak istniejaca w programie zmienna globalna to ...
*
... nie wystapi konflikt tylko wtedy gdy zmienne te beda roznych typow.
*
... wystapi konflikt bez wzgledu na typy obu zmiennych.
*
... zmienna lokalna przyjmie wartosc globalnej.
*
... zmienna lokalna stanie sie aliasem zmiennej globalnej.
*
... za pomoca zmiennej lokalnej mozna przesylac wartosci globalne.
*
... za pomoca zmiennej globalnej mozna przesylac wartosci lokalne.


?14
Czy sluszne jest nastepujace stwierdzenie?
*
Uzycie modulow przy tworzeniu programow polega na czestym lecz umiejetnym stosowaniu konstrukcji MODULE w programach.
*
Mowimy, ze procedura jest eksportowana, jesli godzimy sie i zezwalamy na jej wykorzystanie w innych modulach.
*
Aby wykorzystac w tworzonym programie jakis gotowy modul, nie jest nam potrzebny dostep do zrodlowej postaci jego implementacji.
*
Aby wykorzystac w tworzonym programie jakis gotowy modul, jest nam potrzebny dostep do zrodlowej postaci jego implementacji.


?15
Czy sluszne jest nastepujace stwierdzenie?
*
Uzycie modulow przy tworzeniu programow polega na tworzeniu zbiorow konstrukcji programowych (na przyklad funkcji i procedur), ktore moga byc wykorzystane w roznych programach bez potrzeby ich kopiowania do tych programow.
*
Uzycie modulow przy tworzeniu programow polega na tworzeniu zbiorow konstrukcji programowych (na przyklad funkcji i procedur), ktore moga byc wykorzystane w roznych programach przez ich skopiowanie do tych programow.
*
Driver to jest procedura, ktora kieruje wykonaniem programu glownego.
*
Driver to jest program pomocniczy, ulatwiajacy przetestowanie procedur/funkcji z modulu.


?16
Czy sluszne jest nastepujace stwierdzenie?
*
Uzycie modulow przy tworzeniu programow polega na podziale programu na kilka czesci, ktore sa tworzone oddzielnie i nastepnie laczone przed kompilacja.
*
Driver to jest program zastepujacy program uzytkowy, stworzony dla testowania procedur z modulow.
*
Mowimy, ze jakas konstrukcja programowa (na przyklad procedura) jest importowana jesli jakis modul ja wykorzystuje bez okreslania jej implementacji.
*
Mowimy, ze jakas konstrukcja programowa (na przyklad procedura) jest importowana jesli nie potrafimy napisac jej sami, i potrzebujemy pomocy z zewnatrz.


?17
Czy sluszne jest nastepujace stwierdzenie?
*
Uzycie modulow przy tworzeniu programow polega na podziale programu na kilka czesci, ktore moga byc tworzone i kompilowane oddzielnie.
*
Mowimy, ze procedura jest eksportowana, jesli wywoluje ja inny program wykonywany w jakims innym kraju.
*
Aby wykorzystac w tworzonym programie jakis gotowy modul, potrzebujemy tylko jego skompilowanej postaci, znajomosc czesci zrodlowej jest nam niepotrzebna.
*
Aby wykorzystac w tworzonym programie jakis gotowy modul, potrzebujemy tylko jego skompilowanej postaci i informacji o zawartych w nim funkcjach/procedurach.


?18
Czy prawda jest ze:
*
wywolanie procedury moze wystapic jako samodzielna instrukcja?
*
wartoscia procedury jest wyliczona wartosc jednego z jej parametrow?
*
wywolanie funkcji stanowi wyrazenie?
*
wywolanie funkcji stanowi instrukcje?


?19
Czy prawda jest ze:
*
wywolanie procedury moze wystapic jako samodzielna instrukcja?
*
wywolanie funkcji moze wystapic jako samodzielna instrukcja?
*
w wyniku wywolania funkcji zostaje wyliczona jej wartosc ?
*
w wyniku wywolania procedury zostaje wyliczona jej wartosc ?
*
wywolanie funkcji stanowi wyrazenie?
*
wywolanie procedury stanowi wyrazenie?


?1A
Czy prawda jest ze
*
parametry formalne wymienione w naglowku procedury i nie poprzedzone zadnym slowem kluczowym pozwalaja na wprowadzanie danych do procedury?
*
parametry formalne wymienione w naglowku funkcji i nie poprzedzone zadnym slowem kluczowym pozwalaja na wprowadzanie danych do funkcji?
*
parametry formalne wymienione w naglowku procedury i poprzedzone slowem kluczowym VAR pozwalaja na wyprowadzanie danych z procedury?
*
parametry formalne wymienione w naglowku procedury i nie poprzedzone zadnym slowem kluczowym pozwalaja na wyprowadzanie danych z procedury?
*
parametry formalne wymienione w naglowku procedury i poprzedzone slowem kluczowym VAR pozwalaja na wprowadzanie danych do procedury?
*
parametry formalne wymienione w naglowku funkcji i poprzedzone slowem kluczowym VAR zwracaja wartosc funkcji?


?1B
W programie zadeklarowano:

      VAR x,y,v,z : INTEGER;

      PROCEDURE Proc(VAR a,b : INTEGER; c,d : INTEGER);

      BEGIN

        b:=2*b; c:=2*c; a:=b+c; d:=b;

        WRITELN('a=',a, 'b=',b, 'c=',c, 'd=',d)

      END;

     

Zmienne x,y,v,z zostaly zainicjowane wartosciami niezerowymi, po czym wykonano instrukcje:

      Proc(x,y,v,z);

      WRITELN('x=',x,  'y=',y,  'v=',v,  'z=',z).

  

Czy pomiedzy danymi wyprowadzonymi przez WRITELN wystapi relacja:
*
a = x
*
c = v
*
d = y
*
b = 2 * y


?1C
W programie zadeklarowano:

    

      VAR a,b,c : INTEGER; 

      PROCEDURE Proc(VAR a : INTEGER; b,c : INTEGER);

      BEGIN   b := b+c;  a := b   END;

     

Czy po wykonaniu instrukcji

    

    a := 5; b := 3; c := 10; Proc(a,b,c);

     

zmienne a, b i c przyjma nastepujace wartosci?
*
b = 3
*
a = 5
*
c = 10
*
b = 13


?1D
W programie zadeklarowano:

          

      VAR a,b,c : INTEGER; 

      PROCEDURE Proc(VAR a,b : INTEGER; c : INTEGER);

      BEGIN

        IF c > 10 THEN BEGIN a:=c; c:=b; b:=2*c END

      END;

     

Czy po wykonaniu instrukcji

    

    a := 5; b := 15; c := 12; Proc(b,c,a);

     

zmienne a, b i c przyjma nastepujace wartosci:
*
c = 12
*
c = 5
*
a = 5
*
a = 15
*
b = 15
*
b = 12


?1E
W programie zadeklarowano:

      FUNCTION nsum(a,b,n : INTEGER): INTEGER;

      VAR i : INTEGER;

      BEGIN  FOR i := 1 TO n DO a := a+b; nsum := a  END;

     

      FUNCTION ndif(a,b,n : INTEGER): INTEGER;

      VAR i : INTEGER;

      BEGIN  FOR i := 1 TO n DO a := a-b; ndif := a END;

     

Czy jest prawda, ze
*
nsum(5,3,2) + ndif(10,2,3) = 15
*
nsum(5,3,2) + ndif(10,2,3) = 25
*
nsum(4,1,nsum(2,2,2)) = 10
*
nsum(4,1,nsum(2,2,2)) = 8
*
ndif(nsum(10,5,5),6,6) = -1
*
ndif(nsum(10,5,5),6,6) = 10


?1F
W programie zadeklarowano:

     

      FUNCTION nsum(a,b,n : INTEGER): INTEGER;

      VAR i : INTEGER;

      BEGIN  FOR i := 1 TO n DO a := a+b; nsum := a  END;

     

      FUNCTION ndif(a,b,n : INTEGER): INTEGER;

      VAR i : INTEGER;

      BEGIN  FOR i := 1 TO n DO a := a-b; ndif := a END;

     

...

Zgłoś jeśli naruszono regulamin