PROCEDURY I PARAMETRY PROCEDUR


Z punktu widzenia użytkownika praca z programami odbywa się według schematu:
DANE
                             - informacje dostarczane przez użytkownika
PROGRAM
                   - przetwarzanie informacji
WYNIKI
                         - rezultaty działania programu

Programisty zadaniem jest: opracować komunikację pomiędzy użytkownikiem a programem, w jaki sposób ma dostarczać dane i w jakiej formie będzie otrzymywał wyniki, sformułować metodę, zgodnie z którą program będzie działał (schematycznie podany sposób rozwiązania problemu nosi nazwę algorytm), opisać algorytm w konkretnym języku programowania oraz sprawdzić poprawność działania programu

Procedury

Zlecając komuś wykonanie jakiejś pracy, pewne fragmenty naszej instrukcji możemy wydzielić, po to, żeby nasze polecenie miało czytelniejszą strukturę i żeby wydzielić z niego mniejsze jednostki, które wykonywane są np. wiele razy. Na przykład trzeba narysować na ekranie 100 kwadratów. Takie powtarzające się fragmenty opisujemy w procedurach. Procedury deklarujemy (definiujemy) przed częścią główną programu. W Pascalu najpierw musi być coś zdefiniowane, a dopiero potem można się tym posługiwać.

 

Za pośrednictwem parametrów przekazujemy do procedury informacje (liczby, teksty i inne), na których będziemy wykonywać działania. Za pomocą parametrów można modyfikować działanie procedury, wykonując ją z innym zestawem danych . Procedura może być bez parametrów, ale wtedy wykonuje działania tylko na określonych wcześniej wartościach.

procedura bez parametrów - kwadrat o boku 100 o leżący w konkretnym miejscu na ekranie
procedure kwadrat;
begin
   line(100,100,200,100);
   line(200,100,200,200);
   line(200,200,100,200);
   line(100,200,100,100); 
end; 

procedura z parametrami - kwadrat o dowolnych wymiarach i położeniu
procedure kwadrat(x,y,bok:integer);
begin
  line(x,y,x+bok,y);
  line(x+bok,y,x+bok,y+w);
  line(x+bok,y+bok,x,y+bok);
  line(x,y+bok,x,y);
end;

W pierwszym przypadku można narysować tylko jeden kwadrat w określonym miejscu ekranu. Jeśli zdefiniujemy parametry można rysować dowolne kwadraty w każdym miejscu ekranu.

 Aby tak zdefiniowany kwadrat został narysowany należy wywołać nazwę procedury w części głównej programu na przykład:
BEGIN
...
    kwadrat(100,100,50);
...
END.

Można wcześniej zadeklarować zmienne, w których będziemy przechowywać określone parametry i z ich pomocą rysować kwadraty:

BEGIN
...
    x:=100;
    y:=100;
    bok:=50;
    kwadrat(x,y,bok);
...
END.


GRAF05.PAS - LITERKI

program grafika05;
uses graph;
var
  d,m:integer;
  x,y,w,s,k:integer;

procedure inicjaly;
begin
  SetColor(k);
  MoveTo(x,y);
  LineRel(0,w);
  LineRel(s,0);
  MoveRel(s div 2,-w);
  LineRel(0,w);
  LineRel(s,0);
  LineRel(0,-w);
  MoveRel(-s div 2,w div 2);
  LineRel(0,w div 2);
end;

begin
  d:=detect;
    initgraph(d,m,''); 
{inicjujemy zmienne}
  x:=50;        
  y:=100;
  w:=100;
  s:=40;
  k:=10;
  Inicjaly;wpe16.gif (2270 bytes)
  Readln;
  x:=200; 
  w:=200;
  k:=11;
  Inicjaly;wpe18.gif (3211 bytes)
  Readln;
  x:=350;
  w:=100;
  s:=80;
  k:=12;
  Inicjaly;wpe1A.gif (3821 bytes)
  Readln;
  CloseGraph;
end.

 

GRAF06.PAS - LITERKI

program grafika06;
uses graph,turtle;
var  d,m:integer;

procedure inicjaly(x,y,w,s,k:integer);
begin
  SetColor(k);
  MoveTo(x,y);
  LineRel(0,w);
  LineRel(s,0);
  MoveRel(s div 2,-w);
  LineRel(0,w);
  LineRel(s,0);
  LineRel(0,-w);
  MoveRel(-s div 2,w div 2);
  LineRel(0,w div 2);
end;

begin
  d:=detect;
  initgraph(d,m,'');
  Inicjaly(50,100,100,40,10);wpe1C.gif (2270 bytes)
  Readln;
  Inicjaly(200,100,200,40,11);wpe1E.gif (3211 bytes)
  Readln;
  Inicjaly(350,100,100,80,12);wpe20.gif (3821 bytes)
  Readln;
  CloseGraph;
end.

 

GRAF07.PAS - LITERKI

program grafika07;
uses graph,turtle;
var  d,m:integer;

procedure LiteraL(x,y,w,s,k:integer);
begin
  SetColor(k);
  MoveTo(x,y);
  LineRel(0,w);
  LineRel(s,0);
end;

procedure LiteraW(x,y,w,s,k:integer);
begin
  SetColor(k);
  MoveTo(x,y);
  LineRel(0,w);
  LineRel(s,0);
  LineRel(0,-w);
  MoveRel(-s div 2,w div 2);
  LineRel(0,w div 2);
end;

var
  x,y,w,s,o,k:integer;
begin
  d:=detect;
  initgraph(d,m,'');
{inicjujemy zmienne}
  x:=50;        
  y:=100;
  w:=100;
  s:=40;
  0:=20;
  k:=10;
  LiteraL(x,y,w,s,k);wpe22.gif (2270 bytes)
  LiteraW(x+s+o,y,w,s,k);
  Readln;
  x:=200;
  w:=200;
  s:=20;
  k:=k+1;
  LiteraL(x,y,w,s,k;
  x:=x+s+o
  LiteraW(x,y,w,s,k);wpe24.gif (3092 bytes)
  Readln;
  x:=350;
  w:=100;
  s:=80;
  o:=40;
  k:=k+1;
  LiteraL(x,y,w,s,k);
  x:=x+s+o;
  LiteraW(x,y,w,s,k);
  Readln;wpe26.gif (3636 bytes)
  CloseGraph;
end.

Ćwiczenie

Zdefiniuj procedury, parametrami: x,y,wys,szer,kolor, które będą rysowały następujące litery:
    a)    używając instrukcji bezwzględnych MOVETO i LINETO
    b)    używając instrukcji względnych MOVEREL i LINEREL
    c)    używając instrukcji LINE
Użyj te procedury w programie głównym tak, aby została narysowana całość