background image

 

1

Instrukcja 5 

Cel ćwiczenia : Napisanie aplikacji rysującej wykres funkcji kwadratowej. 

 

 

 

Rys. 1 Widok formularza z umieszczonymi komponentami 

 

1.  Uruchomić Delphi. 
 
2.  Przejść do widoku kodu źródłowego przyciskiem F12. 

 

3.  W części Interface (pod uses) umieścić następujący kod: 
 

const Nmax = 10000; 
      ppX=25; 
      ppY=25; 
type 
  wym = 1..Nmax; 
  TablWsp = Array[wym] of Real; 

 
4.  W części private klasy TForm1 umieścić deklaracje zmiennych i nagłówki funkcji 

Normalizacja i Osie: 

 

N,X0,Y0,ZX,ZY: Integer; 
dx,xmin,xmax: Real; 
xx,yy,X,Y: TablWsp; 
a,b,c:double; 

background image

 

2

 

kolW,kolO,kolWyp : TColor; 
 
procedure Normalizacja(N,A,B: Integer; xx,yy: TablWsp; 
                       var X,Y: TablWsp); 
procedure Osie(X0,Y0,A,B: Integer; x,y: String;T: TCanvas); 

 

5.  W części implementation napisać definicje funkcji: 
 

procedure TForm1.Normalizacja; 
var 
  i: Integer; 
  dX,dY,G,Kx,Ky,xmin,xmax,ymin,ymax,Sx,Sy: Real; 
begin 
  A:=A-2*ppx;    B:=B-2*ppY; 
  xmin:=xx[1];   xmax:=xx[1]; 
  ymin:=yy[1];   ymax:=yy[1]; 
  for i:=2 to N do begin 
     if xx[i] < xmin then xmin:=xx[i]; 
     if xx[i] > xmax then xmax:=xx[i]; 
     if yy[i] < ymin then ymin:=yy[i]; 
     if yy[i] > ymax then ymax:=yy[i]; 
  end; 
  Sx:=xmax-xmin; 
  Sy:=ymax-ymin; 
  for i:=1 to N do begin 
     X[i]:=xx[i]-xmin; 
     Y[i]:=Abs(yy[i]-ymin-Sy); 
  end; 
  G:=1; 
  dX:=A-Sx; 
  dY:=B-Sy; 
  if dX/A <= dY/B then begin 
     Kx:=A/Sx; 
     Ky:=G*Kx; 
  end 
  else begin 
     Ky:=B/Sy; 
     Kx:=Ky/G 
  end; 
  for i:=1 to N do begin 
     X[i]:=Kx*X[i]+ppX; 
     Y[i]:=Ky*Y[i]+ppY; 
  end; 
end; 
 
procedure TForm1.Osie; 
begin 
  with T do begin 
    MoveTo(0,Y0); 

background image

 

3

    LineTo(A,Y0); 
    LineTo(A-8,Y0-3); 
    LineTo(A,Y0); 
    LineTo(A-8,Y0+3); 
    TexTout(A-15,Y0+6,x); 
    MoveTo(X0,B); 
    LineTo(X0,0); 
    LineTo(X0-3,8); 
    MoveTo(X0,0); 
    LineTo(X0+3,8); 
    TextOut(X0-11,9,y); 
  end; 
end; 

 
6.  Umieścić na formularzu komponent Image i ustawić następujące parametry: 
 

•  Width : 400 
•  Height : 400 

 

7.  Umieścić na formatce komponent Button i ustawić własność Caption na Rysuj. 
 
8.  Umieścić na formatce 6 komponentów Edit i ustawić parametry według następujących 

wskazówek: 

 

Domyslna nazwa: 

Zmienić własność name na: 

Zmienić własność tekst na: 

Edit1 

EN 

50 

Edit2 

Exmin 

-1,5 

Edit3 

Exmax 

1,5 

Edit4 

Ea 

Edit5 

Eb 

Edit6 

Ec 

 
9.  Obok komponentów Edit można umieścić komponenty Label w celu opisania, który 

komponent odpowiada za poszczególne zmienne. 

 

10. Wygenerować zdarzenie OnClick dla komponentu Buton i wpisać następujący kod: 

 

procedure TForm1.Button1Click(Sender: TObject); 
var 
   i:integer; 
begin 
 
   N:=StrToInt(EN.Text); 
   xmin:=StrToFloat(Exmin.Text); 
   xmax:=StrToFloat(Exmax.Text); 
 
   a:=StrToFloat(Ea.Text); 
   b:=StrToFloat(Eb.Text); 
   c:=StrToFloat(Ec.Text); 
 

background image

 

4

   with Image1.Canvas do begin 

 

      //czyszczenie okna 
 
      Brush.Color:=kolWyp; 
      Brush.Style:=bsSolid; 
      FillRect(Rect(0,0,Image1.Width,Image1.Height)); 
 
      //wykres 
 
      xx[1]:=0;  yy[1]:=0; 
      dx:=(xmax-xmin)/N; 
      for i:=0 to N do begin 
         xx[i+2]:=xmin+i*dx; 
         yy[i+2]:=a*xx[i+2]*xx[i+2]+b*xx[i+2]+c; 
      end; 
 
      ZX:=Image1.Width;          ZY:=Image1.Height; 
      Normalizacja(N+2,Image1.Width,Image1.Height,xx,yy,X,Y); 
      X0:=Round(X[1]);   Y0:=Round(Y[1]); 
      Pen.Color:=kolO; 
      Osie(X0,Y0,ZX,ZY,'x','y',Image1.Canvas); 
      Pen.Color:=kolW; 
      MoveTo(Round(X[2]),Round(Y[2])); 
      for i:=3 to N+2 do 
         LineTo(Round(X[i]),Round(Y[i])); 
   end; 
end; 
 

11. Wygenerować zdarzenie OnCreate dla komponentu Form1 i wpisać następujący kod: 
 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
   kolW:=clBlack; 
   kolO:=clBlue; 
   kolWyp:=clWhite; 
end; 

 
12. Umieścić komponenty: RadioGroup, Button, ColorDialog. 
13. Wybrać własność Items dla RadioGroup i wpisać następujące pozycje: 
 

kolor wykresu 
kolor osi 
kolor wypełnienia 

 

Własność ItemIndex dla RadioGroup1 ustawić na 0, natomiast własność Caption 
ustawić na pustą. 

 
14. Własność Caption dla przycisku Button ustawić na: Wybór koloru. 

 

background image

 

5

15. Wygenerować zdarzenie OnClick dla przycisku i wpisać następujący kod 

odpowiedzialny za wybór koloru. 

 

procedure TForm1.Button2Click(Sender: TObject); 
begin 
   case RadioGroup1.ItemIndex of 
      0 : begin 
             if Colordialog1.Execute then 
                kolW:=ColorDialog1.Color; 
          end; 
      1 : begin 
             if Colordialog1.Execute then 
                kolO:=ColorDialog1.Color; 
          end; 
      2 : begin 
             if Colordialog1.Execute then 
                kolWyp:=ColorDialog1.Color; 
          end; 
   end; 
end; 

 
14. Skompilować i uruchomić program przyciskiem F9 na klawiaturze komputera. 

 

 

 

Rys. 2 Uruchomiony program