16-20, Ogólna struktura programu w języku Pascal, Ogólna struktura programu w języku Pascal


Ogólna struktura programu w języku Pascal

program nazwa_programu; {Nagłówek programu - opcjonalny}

{ SEKCJA DEKLARACJI }

uses lista_nazw_modułów ;

const sekwencja_definicji_stałych ; {Definicje stałych}

type sekwencja_definicji_typów ; {Definicje typów}

label lista_etykiet ; {Deklaracja etykiet}

var sekwencja_deklaracji_zmiennych ; {Deklaracje zmiennych}

procedure nazwa_procedury_1 ; {Definicje procedur}

begin { Definicje składowych procedury_1 - kod procedury } end;

procedure nazwa_procedury_2 ( lista_parametrów ) ;

begin { Definicje składowych procedury_2 - kod procedury } end;

. . .

function nazwa_funkcji_1 : typ_wartosci ; {Definicje funkcji}

begin

{ Definicje składowych funkcji_1 - kod funkcji }

nazwa_funkcji_1:= wynik; { przekazanie wyniku funkcji na zewnątrz }

end;

function nazwa_funkcji_2( lista_parametrów ) : typ_wartości ;

begin

{ Definicje składowych funkcji_2 - kod funkcji }

nazwa_funkcji_2:= wynik; { przekazanie wyniku funkcji na zewnątrz }

end;

. . .

{ SEKCJA INSTRUKCJI }

begin

instrukcja_1 ;

instrukcja_2 ;

. . .

instrukcja_N ;

end .

Funkcje

Cel ćwiczenia:

Poznanie zastosowań funkcji. Struktura funkcji. Przekazywanie parametrów do funkcji i zwracanie wyników. Funkcje rekurencyjne. Obliczenia iteracyjne i rekurencyjne.

Zad 1. Opracować funkcję, która oblicza sumę dwóch liczb rzeczywistych przekazywanych przez wartości, za pomocą argumentów x i y, oraz zwraca wynik dodawania argumentów przez wartość funkcji. W programie głównym wywołać funkcję dla danych wejściowych wczytywanych z klawiatury. Przyjąć, że nagłówek funkcji ma następującą postać: function Suma(x, y: real): real.

program suma1;

var

x,y: real;

function Suma(x,y:real): real;

begin

Suma:=x + y;

end;

begin

write('Podaj x ='); readln(x);

write('Podaj y ='); readln(y);

writeln(Suma(x,y):0:2));

readln;

end.

Zad 2. Opracować funkcję, która zwraca przez wartość średnią arytmetyczną z dwóch liczb rzeczywistych, przekazywanych do funkcji przez wartości, oraz zwraca minimum i maksimum z tych liczb przez zmienne. Przyjąć, że nagłówek funkcji ma następującą postać: function SMM(x,y: real; Var min,max: real): real.

program minmax;

var

x,y,min,max: real;

function SMM(x,y: real; var min,max: real): real;

begin

SMM:=(x + y)/2;

{wyznaczenie min}

min:=x;

if y<=min then min:=y;

{wyznaczenie max}

max:=x;

if y>=max then max:=y;

end;

begin

write('Podaj x ='); readln(x);

write('Podaj y ='); readln(y);

writeln('Funkcja oblicza srednia z liczb x,y');

writeln('SMM = ',SMM(x,y,min,max):0:2);

writeln('Max = ',max:0:2);

writeln('Min = ',min:0:2);

readln;

end.

Procedury

Zad 1. Opracować program, który umożliwia przesuwanie po ekranie w trybie znakowym kursora reprezentowanego za pomocą dowolnego znaku, np. x. Przesuwanie zrealizować za pomocą klawiszy strzałek (wykorzystać funkcję ReadKey). W prawym górnym rogu ekranu wyświetlać aktualne współrzędne kursora.

program przesuwanie;

uses crt;

procedure PodajXY(s:string; px,py: integer);

begin

cursoroff;

gotoXY(1,1);

write(s, ' ','[',px,',',py, ']');clreol;

end;

var

i,j: integer;

x,x_ext: char; {x- znak normalny x_ext - znak rozszerzony}

Koniec: boolean;

px,py: integer;

s: string;

begin

cursoroff;

clrscr;

s:='Pozycja kursora: ';

px:=1; py:=1;

i:= 1;

j:=2;

Koniec := false;

repeat

PodajXY(s,px,py);

x_ext := char(0);

x:=readKey;

if x = char(27) then Koniec:=true; {kod ASCII Esc - 27}

if x = char(0) then x_ext := readkey;

if(x_ext = 'M') then

begin

gotoXY(i, j);

if keypressed=false then begin delline;clreol;end;

write('X');

inc(i);

end;

if(x_ext = 'K') then

begin

gotoXY(i, j);

if keypressed=false then delline;

Write('X');

dec(i);

end;

if(x_ext = 'H') then {gora}

begin

gotoXY(i, j);

if keypressed=false then delline;

Write('X');

dec(j);

end;

if(x_ext = 'P') then {dol}

begin

gotoXY(i, j);

if keypressed=false then delline;

Write('X');

if keypressed=false then insline;

inc(j);

end;

px:=whereX;

py:=whereY;

until Koniec;

clrscr;

end.

wróć

Cel ćwiczenia:

Poznanie zastosowań procedur. Struktura procedury. Przekazywanie parametrów do procedur. Obliczanie sum szeregów z wykorzystaniem procedur.

Zad 2. Opracować procedurę, która oblicza sumę dwóch liczb rzeczywistych przekazywanych przez wartości za pomocą argumentów x i y oraz zwraca wynik dodawania argumentów za pośrednictwem zmiennej wyn, będącej argumentem procedury. W programie głównym wywołać funkcję dla danych wejściowych wczytywanych z klawiatury. Przyjąć następujący nagłówek procedury: procedure Suma1(x, y: real; Var wyn: real).

program suma;

var

x,y,wyn: real;

procedure Suma1(x,y: real; var wyn: real);

begin

wyn:=x+y;

end;

begin

write('Podaj x: '); readln(x);

write('Podaj y: '); readln(y);

Suma1(x,y,wyn);

write(wyn:0:2);

readln;

end.

Zad 3. Opracować procedurę, która zwraca przez zmienne minimum, maksimum oraz średnią arytmetyczną z dwóch liczb rzeczywistych przekazywanych do procedury przez wartości. Nagłówek procedury: procedure MS(x, y: real; Var min, max, sr: real).

program minimum;

var

x,y,min,max,sr: real;

procedure MS(x,y: real; var min,max,sr:real);

begin

{ wyznaczenie min }

min:=x;

if y<=min then min:=y;

{ wyznaczenie max }

max:=x;

if y>=max then max:=y;

{ wyznaczenie sredniej arytmetycznej }

sr:=(x+y)/2;

end;

begin

write('Podaj x: '); readln(x);

write('Podaj y: '); readln(y);

MS(x,y,min,max,sr);

writeln('min = ', min:0:2);

writeln('max = ', max:0:2);

writeln('sr = ', sr:0:2);

readln;

end.

Zad 4. Opracować procedurę, która dla n będącego jej parametrem oblicza sumę:

S(n) = 1 - 1/2 + 1/4 - 1/6 + ... +1/k ,

gdzie k <=n tj. obliczenia należy zakończyć, gdy pojawi się k > n. Na przykład, n = 1; S(1) = 1;

n = 2; S(2) = 1 - 1/2;

n = 3; S(3) = 1 - 1/2;

n = 4; S(4) = 1 - 1/2 + 1/4;

n = 5; S(5) = 1 - 1/2 + 1/4.

Nagłówek procedury: procedure S1(n: integer; Var wyn: real).

program suma2;

var

n: integer;

wyn: real;

procedure S1(n: integer; var wyn: real);

var

k,i: integer;

begin

i:=1;

k:=2;

wyn:=1;

while (k<=n) do

begin

if i mod 2 = 0 then wyn:=wyn+1/real(k) else wyn:=wyn-1/real(k);

k:=k+2;

inc(i);

end;

end;

{Program glowny}

begin

write('Podaj n: '); readln(n);

S1(n,wyn);

writeln('Suma S1=',wyn:0:2);

readln;

end.

Zad 4. Niech x będzie liczbą rzeczywistą wczytywaną z klawiatury. Opracować procedurę, która dodaje kolejne wyrazy szeregu

S(x, k) = 1 + x1 / 1! + x2 / 2! + ... + xk / k! ...

tak długo, aż pojawi się wyraz o numerze k taki, że moduł | xk / k! | < eps, gdzie eps=1E-7 jest stałą w programie (obliczanie ex z dokładnością eps=10-7). Przyjąć, że x oraz eps są argumentami procedury. Zastosować następujący nagłówek procedury: procedure S2(x, eps: real; Var wyn: real);

Zad 5.Opracować procedurę, która wyznacza sumę cyfr liczby naturalnej x. W programie głównym wywołać procedurę dla x wczytywanego z klawiatury. Nagłówek procedury: procedure SumC(x: word; Var suma: word).

program suma3;

var

x, suma: word;

procedure SumC(x: word; var suma: word);

var

l: string;

c,i: integer;

begin

str(x,l); {kowersja do typu napisowego}

for i:=length(l) downto 1 do

begin

c:=ord(l[i]) - ord('0'); {kody ASCII}

suma:=suma+c;

end;

end;

{Program glowny}

begin

write('Podaj liczbe (0..65535) x='); readln(x);

SumC(x,suma);

writeln('suma cyfr liczby ',x,' wynosi ',suma);

readln;

end.

3



Wyszukiwarka