1 Востаннє редагувалося Replace (19.12.2012 12:11:02)

Тема: Проста програма на Delphi для визначення прощі чоторикутника

Підкажіть, де тут помилка?

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    Edit2: TEdit;
    Label4: TLabel;
    Edit3: TEdit;
    Label5: TLabel;
    Edit4: TEdit;
    Button1: TButton;
    Label6: TLabel;
    Edit5: TEdit;
    Label7: TLabel;
    Edit6: TEdit;
    Label8: TLabel;
    Edit7: TEdit;
    Label9: TLabel;
    Edit8: TEdit;
    Label10: TLabel;
    Edit9: TEdit;
    Button2: TButton;
    Label11: TLabel;
    Edit10: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure Edit5KeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;  a,b,c,d,s,s1,s2,p1,p2,a1,a2,b1,b2,c1,c2,d2,d1,dg,dg1:Real;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
if ((Edit1.text='') or (Edit2.Text='')or (Edit3.Text='') or (Edit4.Text='')
or(Edit5.text='') or (Edit6.text='') or (Edit7.text='') or (Edit8.text='')
or (Edit9.Text='')) then begin
  showMessage('Ââåä³òü äàí³');
 Edit1.SetFocus;
 exit;
 end;
a1:=StrToFloat(Edit1.Text);
a2:=StrToFloat(Edit2.Text);
b1:=StrToFloat(Edit3.Text);
b2:=StrToFloat(Edit4.Text);
c1:=StrToFloat(Edit5.Text);
c2:=StrToFloat(Edit6.Text);
d1:=StrToFloat(Edit7.Text);
d2:=StrToFloat(Edit8.Text);
dg:=StrToFloat(Edit9.Text);
a:=Sqrt(sqr(b1-a1)+sqr(b2-a2));
b:=Sqrt(sqr(c1-b1)+sqr(c2-b2));
c:=Sqrt(sqr(d1-c1)+sqr(d2-c2));
d:=Sqrt(sqr(a1-d1)+sqr(a2-d2));
p1:=(a+b+dg)/2;
s1:=Sqrt(p1*(p1-a)*(p1-b)*(p1-dg));
p2:=(c+d+dg)/2;
s2:=Sqrt(p2*(p2-c)*(p2-d)*(p2-dg));
s:=s1+s2;
ShowMessage('Ïëîùà ÷îòèðèêóòíèêà= '+FloatToStr(s));
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  #8,'0'..'9' :  ; // öèôðû è <Back Space>

       '.',',':
                begin
                  if Key <> DecimalSeparator then
                  Key := DecimalSeparator;
                  if Pos(DecimalSeparator,Edit1.Text) <> 0
                  then  begin  Key := Chr(0);
                  ShowMessage('Âæå ââåäåííî êîìó');
                  end;
                end;
           '-':
                if Length(Edit1.Text) <> 0
                      then Key := Chr(0);

        else
               key := Chr(0);
    end;

end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  #8,'0'..'9' :  ; // öèôðû è <Back Space>

       '.',',':
                begin
                  if Key <> DecimalSeparator then
                  Key := DecimalSeparator;
                  if Pos(DecimalSeparator,Edit3.Text) <> 0
                  then  begin  Key := Chr(0);
                  ShowMessage('Âæå ââåäåííî êîìó');
                  end;
                end;
           '-':
                if Length(Edit3.Text) <> 0
                      then Key := Chr(0);

        else
               key := Chr(0);
    end;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  #8,'0'..'9' :  ; // öèôðû è <Back Space>

       '.',',':
                begin
                  if Key <> DecimalSeparator then
                  Key := DecimalSeparator;
                  if Pos(DecimalSeparator,Edit2.Text) <> 0
                  then  begin  Key := Chr(0);
                  ShowMessage('Âæå ââåäåííî êîìó');
                  end;
                end;
           '-':
                if Length(Edit2.Text) <> 0
                      then Key := Chr(0);

        else
               key := Chr(0);
    end;
end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  #8,'0'..'9' :  ; // öèôðû è <Back Space>

       '.',',':
                begin
                  if Key <> DecimalSeparator then
                  Key := DecimalSeparator;
                  if Pos(DecimalSeparator,Edit4.Text) <> 0
                  then  begin  Key := Chr(0);
                  ShowMessage('Âæå ââåäåííî êîìó');
                  end;
                end;
           '-':
                if Length(Edit4.Text) <> 0
                      then Key := Chr(0);

        else
               key := Chr(0);
    end;
end;

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  #8,'0'..'9' :  ; // öèôðû è <Back Space>

       '.',',':
                begin
                  if Key <> DecimalSeparator then
                  Key := DecimalSeparator;
                  if Pos(DecimalSeparator,Edit5.Text) <> 0
                  then  begin  Key := Chr(0);
                  ShowMessage('Âæå ââåäåííî êîìó');
                  end;
                end;
           '-':
                if Length(Edit5.Text) <> 0
                      then Key := Chr(0);

        else
               key := Chr(0);
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if ((Edit1.text='') or (Edit2.Text='')or (Edit3.Text='') or (Edit4.Text='')
or(Edit5.text='') or (Edit6.text='') or (Edit7.text='') or (Edit8.text='')) then begin
  showMessage('Ââåä³òü äàí³');
 Edit1.SetFocus;
 exit;
 end;
a1:=StrToFloat(Edit1.Text);
a2:=StrToFloat(Edit2.Text);
b1:=StrToFloat(Edit3.Text);
b2:=StrToFloat(Edit4.Text);
c1:=StrToFloat(Edit5.Text);
c2:=StrToFloat(Edit6.Text);
d1:=StrToFloat(Edit7.Text);
d2:=StrToFloat(Edit8.Text);
dg:=StrToFloat(Edit9.Text);
a:=Sqrt(sqr(b1-a1)+sqr(b2-a2));
b:=Sqrt(sqr(c1-b1)+sqr(c2-b2));
c:=Sqrt(sqr(d1-c1)+sqr(d2-c2));
d:=Sqrt(sqr(a1-d1)+sqr(a2-d2));
dg1:=Sqrt(sqr(c1-a1)+sqr(c2-a2));
p1:=(a+b+dg1)/2;
s1:=Sqrt(p1*(p1-a)*(p1-b)*(p1-dg1));
p2:=(c+d+dg1)/2;
s2:=Sqrt(p2*(p2-c)*(p2-d)*(p2-dg1));
s:=s1+s2;
Edit10.Text:='Ïëîùà ÷îòèðèêóòíèêà= '+FloatToStr(s);
end;

end.

2 Востаннє редагувалося DOP (19.12.2012 01:46:40)

Re: Проста програма на Delphi для визначення прощі чоторикутника

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  #8,'0'..'9' :  ; // öèôðû è <Back Space>

       '.',',':
                begin
                  if Key <> DecimalSeparator then
                  Key := DecimalSeparator;
                  if Pos(DecimalSeparator,Edit1.Text) <> 0
                  then  begin  Key := Chr(0);
                  ShowMessage('Âæå ââåäåííî êîìó');
                  end;
                end;
           '-':
                if Length(Edit1.Text) <> 0
                      then Key := Chr(0);

        else
               key := Chr(0);
    end;

end;

Код можна суттєво скоротити, достатньо створити одну процедуру, яка обмежує введення символів і присвоїти її в IDE іншим Edit'ам.

______________
Подивіться в коді, там є коментар, де помилка. Код теж скоротив, як описав вище.

Post's attachments

cam.rar 348.6 kb, 406 downloads since 2012-12-18 

Подякували: miroslav.chandler, Chemist-i2

3

Re: Проста програма на Delphi для визначення прощі чоторикутника

Шановна пані, ви правила взагалі читали?
Будь ласка уважно прочитайте розділ Перед створенням теми, особливо 2, 3 та 4-й пункти.

P.S. Якщо з першого разу не вийшло правильно створити тему є кнопка відредагувати.

Подякували: Torbins1

Re: Проста програма на Delphi для визначення прощі чоторикутника

ShowMessage('Ïëîùà ÷îòèðèêóòíèêà= '+FloatToStr(s));

В когось явно проблеми з кодуванням.

5

Re: Проста програма на Delphi для визначення прощі чоторикутника

Hanter написав:
ShowMessage('Ïëîùà ÷îòèðèêóòíèêà= '+FloatToStr(s));

В когось явно проблеми з кодуванням.

Точно сказати не можу, але здається це через те, що розкладка клавіатури при копіюванні тексту з редактору була на латиниці(або ж навпаки).

Подякували: Torbins1

6

Re: Проста програма на Delphi для визначення прощі чоторикутника

DOP (архів cam.rar) написав:
  //...
  d:=Sqrt(sqr(a1-d1)+sqr(a2-d2));
  p1:=(a+b+dg)/2;
  s1:=Sqrt(p1*(p1-a)*(p1-b)*(p1-dg));  // ТУТ ВИХОДИТЬ МІНУСОВЕ ЧИСЛО!!! Через що і помилка.
  p2:=(c+d+dg)/2;
  //...

Може ви просто ввели неправильні вхідні дані? Мені здається, тут навіть порядок введення координат точок має значення, а жодне поле вводу не підписане. Дуже легко переплутати.

7

Re: Проста програма на Delphi для визначення прощі чоторикутника

Torbins, та я від балди вводив, якщо чесно :)