N6_ProsteProgramy.doc

(71 KB) Pobierz
Przykłady prostych programów w Pascalu

 

 

W tej  notatce przedstawiamy przykłady prostych programów w Pascalu. W każdym przykładzie punktem wyjściowym będzie schemat blokowy (znany nam z wcześniejszych zajęć). Przekonamy się, że napisanie programu w języku Pascal na podstawie schematu jest czynnością niemal automatyczną.

Przy okazji będziemy stopniowo wprowadzać nowe elementy języka.

 

Przykład 1

Pierwsze trzy przykłady dotyczą algorytmu znajdowania największego wspólnego dzielnika dwóch liczb. Rozpoczynamy od algorytmu najefektywniejszego, ponieważ paradoksalnie zapisanie go w Pascalu jest najprostsze.

Program szybkiEuklides;

var n,m,k : integer;

begin

              read(m,n);

              if n<m then

                            begin k:=m; m:=n; n:=k end;

              repeat

                            k:= n mod m;

                            n:=m;

                            m:=k

              until n=0;

              write(m)

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

Uwagi:

·         Jedną instrukcją read można wczytać wartości wielu zmiennych.

·         W Pascalu nie ma niestety instrukcji pozwalającej wymienić wartości dwóch zmiennych. Dlatego musieliśmy posłużyć się pomocniczą zmienną k.

 

 

 

 

 

 

 

 

 

 

 

Przykład 2

program Euklides;

var               n,m: integer;

begin

              readln(n,m);

              while m<>n do

              if n>m then n:=n-m

                                 else m:=m-n;

              writeln(n)

end.

 

 

 

 

 

 

 

Uwagi:

·          Zamiast instrukcji read i write zastosowaliśmy odpowiednio instrukcje readln i writeln.

o         Instrukcja writeln(n) po wypisaniu wartości zmiennej n wypisuje znak końca wiersza. Oznacza to, że kolejna instrukcja write (lub writeln) wypisywałaby wartości w nowym wierszu.

o         Liczby wprowadzane z klawiatury na „żądanie” instrukcji czytania są zapamiętywane w buforze. Kolejne instrukcje read i readln pobierają z bufora kolejne „niewykorzystane” jeszcze liczby i dopiero, gdy w buforze brakuje liczb, program  zatrzymuje się oczekując na ich wprowadzenie z klawiatury. Instrukcja readln po pobraniu liczb dodatkowo czyści bufor.

 

 

 

 

 

 

 

 

 

 

 

 

 

Przykład 3

Program naiwnygcd;

var n,m,k:integer;

begin

              readln(n,m);

              k:=m;

              while (n mod k<>0) or  (m mod k<>0) do k:=k-1;

              writeln(k)

end.

             

 

 

 

 

 

 

 

 

Uwagi:

·         Zastosowanie pętli while może nie dla wszystkich być od razu oczywiste. Trzeba zauważyć, że w schemacie instrukcja k ¬ k - 1 wykonywana jest tak długo, jak długo k nie dzieli choćby jedną z liczb n lub m.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Przykład 4

 

 

Program naiwnepotegowanie;

var m, k: integer;

                potega: longint;             

begin

              readln(m,k);

              potega:=1;

              while k>0 do

begin

dec(k);

potega:=potega*m

              end;

              writeln(potega)

end.

             

 

 

 

 

Uwagi:

·         Odpowiednikiem komórki K6 jest zmienna potega typu longint. Wybraliśmy ten typ, ponieważ zmienna ta może przyjmować duże wartości nawet dla niezbyt dużych wartości k i m (patrz poniżej: Uwaga o typach całkowitych).

·         dec(k) jest procedurą standardową zmniejszającą wartość k o jeden; istnieje też procedura standardowa zwiększająca wartość zmiennej o jeden – procedura inc.

 

 

 

 

 

 

Uwaga o typach całkowitych

Aby umożliwić programiście efektywniejsze wykorzystanie pamięci przez program, niektóre wersje Pascala (w tym Turbo Pascal) wprowadziły wiele typów liczb całkowitych, różniących się liczbą bajtów przeznaczanych na nie przez kompilator, a więc w konsekwencji także wielkością liczb, jakie zmienne danego typu mogą pamiętać. Wśród tych typów są zwykle: shortint, integer i longint, pamiętane na 1,2 lub 4 bajtach (odpowiednio). Do typów całkowitych należą też byte i word, na które kompilator przeznacza odpowiednio 1 i 2 bajty. Różnią się one od typów shortint i integer tym, że zmienne tego typu mogą pamiętać jedynie wartości nieujemne (dzięki temu wartości te mogą być nieco większe niż w typach shortint i integer). Informację o zakresie poszczególnych typów możesz uzyskać z systemu pomocy systemu Pascal.

Przykład 5

Program sprytnepotegowanie;

var k: integer;

                m, potega: longint;             

begin

              readln(m,k);

              potega:=1;

              while k>0 do

begin

if odd(k) then potega:=potega*m;

m:=m*m;

k:=k div 2

              end;

              writeln(potega)

end.

             

      

 

 







Uwagi:

·         Zmieniliśmy typ zmiennej m z integer na longint, ponieważ teraz m będzie przyjmować wartości tego rzędu wielkości co zmienna potega.

·         odd(k) jest funkcją standardową, która przyjmuje wartość prawda wtedy i tylko wtedy, gdy k jest liczbą nieparzystą. Oczywiście moglibyśmy sprawdzać nieparzystość k innymi sposobami (np. k mod 2).

 

...
Zgłoś jeśli naruszono regulamin