![]() |
|
|
#1
|
|||
|
|||
|
Задача звучит следующим образом:
Вычислить дробную часть среднего геометрического трех заданных положительных чисел. подскажите как сделать, чтобы программа только с положительными числами работала Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Math, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
edt1: TEdit;
edt2: TEdit;
edt3: TEdit;
edt4: TEdit;
lbl1: TLabel;
lbl2: TLabel;
lbl3: TLabel;
lbl4: TLabel;
Label1: TLabel;
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a, b, c, d, e, f : Real;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
a := StrToFloat(edt1.Text);
b := StrToFloat(edt2.Text);
c := StrToFloat(edt3.Text);
d := a*b*c;
f := Power(d, 1.0/3.0)
e := frac (f) ;
edt4.text := FloatToStr (e) ;
end;
end.заранее благодарен Последний раз редактировалось kami, 01.10.2010 в 22:02. |
|
#2
|
||||
|
||||
|
Если правильно понял, то НЕ надо дать возможность ввести в едит отрицательные числа (точнее вывести ошибку).
Код:
procedure TForm1.btn1Click(Sender: TObject);
begin
if(StrToInt(Edit1.Text) < 0) then begin
ShowMessage('Error. Можно вводить только положительные числа');
Exit;
end;
/// так же сделать и для других двух едитов
...ЗЫ если же человек введет в едит не цифры, то полетит ошибка перевода, ее можно отловить например тем же Try...Except... end; Последний раз редактировалось v1s2222, 01.10.2010 в 22:22. |
|
#3
|
|||
|
|||
|
Если просто "отбросить" минус, то как-то так:
Код:
a := Abs(StrToFloat(edt1.Text)); b := Abs(StrToFloat(edt2.Text)); c := Abs(StrToFloat(edt3.Text)); Если заставить пользователя вводить только положительные числа, то можно сделать двумя способами: 1. В принципе сделать так, что бы он не мог ввести отрицательное число. Для всех TEdit сделать такого рода обработчик на OnKeyPress Код:
procedure TForm1.EditKeyPress(Sender : TObject; var Key : Char); begin If Not (Key In [0..9,#8]) Then Key := #0; end; Код:
a := StrToFloat(edt1.Text);
if a < 0 Then
Begin
ShowMessage('a < 0');
Exit;
End;
b := StrToFloat(edt2.Text);
if b < 0 Then
Begin
ShowMessage('b < 0');
Exit;
End;
c := StrToFloat(edt3.Text);
if c < 0 Then
Begin
ShowMessage('c < 0');
Exit;
End; |
|
#4
|
|||
|
|||
|
спасибо, разобрался )
|