ПРоверка
У меня есть программа,определяющая корректность строки с числом,но мне надо ее переделать так,что если корректно число,то программа выведет тип(целое,целое со знаком,вещественное с фикс.точкой,вещественное с плавающей точкой).Пытался добавить флаг и case of ,но не вышло
Вот код
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
LabeledEdit1: TLabeledEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
// function IsSimpleInt(Str:String):Boolean;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
flag:Integer;
//function IsSimpleInt(Str:String):Boolean;
implementation
{$R *.dfm}
function IsIntWithoutSign(Str:String):Boolean;
var
i:Integer;
//LabeledEdit1: TLabeledEdit;
//Str:String;
begin
Result:=false;
//Str:= Form1.LabeledEdit1.Text;
if Str='' then exit;
for i:=1 to Length(Str) do
if not (Str[i] in ['0'..'9']) then exit;
flag:=1;
Result:=true;
end;
function IsIntWithSign(Str:String):Boolean;
{var
i:Integer; }
begin
//if Str[2]='.' then Result:=False;
if (Length(Str)>0) and (Str[1] in ['+', '-']) {and (Str[2] in ['0'..'9'])} then
Result:=IsIntWithoutSign(Copy(Str,2,Length(Str)-1))
else
begin
flag:=2;
Result:=IsIntWithoutSign(Str);
end;
end;
function IsFloatFixed(Str:String):Boolean;
var
i:Integer;
begin
if ((Length(Str)>1) and (Str[1]='.') and (Str[2] in ['+', '-'])) or ((Length(Str)>1) and( (Str[1]='.'))) or ((Length(Str)>1) and (Str[1] in ['+', '-']) and (Str[2]='.')) or (Str[Length(Str)]='.') then
begin
Result:=False;
Exit;
end;
i:=Pos('.',Str);
if i<>0 then
Delete(Str,I,1);
flag:=3;
Result:=IsIntWithSign(Str);
end;
function IsFloatUFixed(Str:String):Boolean;
var
i:Integer;
begin
Str:=UpperCase(Str);
i:=Pos('E',Str);
if i=1 then
begin
Result:=False;
exit;
end;
if i=0 then
Result:=IsFloatFixed(Str)
else
begin
flag:=4;
Result:=IsFloatFixed(Copy(Str,1,I-1)) and IsIntWithSign(Copy(Str,I+1,Length(Str)-I));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsFloatUFixed(LabeledEdit1.Text) then
begin
case flag of
1: ShowMessage('целое');
2: ShowMessage('целое со знаком');
3: ShowMessage('вещественное с фиксированной точкой');
4: ShowMessage('вещественное с плавающей точкой');
//ShowMessage('Корректно')
end
end
else ShowMessage('Некорректно');
end;
end.
Это старый код до добавления case of
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
LabeledEdit1: TLabeledEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
// function IsSimpleInt(Str:String):Boolean;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
flag:Integer;
//function IsSimpleInt(Str:String):Boolean;
implementation
{$R *.dfm}
function IsIntWithoutSign(Str:String):Boolean;
var
i:Integer;
//LabeledEdit1: TLabeledEdit;
//Str:String;
begin
Result:=false;
//Str:= Form1.LabeledEdit1.Text;
if Str='' then exit;
for i:=1 to Length(Str) do
if not (Str[i] in ['0'..'9']) then exit;
flag:=1;
Result:=true;
end;
function IsIntWithSign(Str:String):Boolean;
{var
i:Integer; }
begin
//if Str[2]='.' then Result:=False;
if (Length(Str)>0) and (Str[1] in ['+', '-']) {and (Str[2] in ['0'..'9'])} then
Result:=IsIntWithoutSign(Copy(Str,2,Length(Str)-1))
else
begin
flag:=2;
Result:=IsIntWithoutSign(Str);
end;
end;
function IsFloatFixed(Str:String):Boolean;
var
i:Integer;
begin
if ((Length(Str)>1) and (Str[1]='.') and (Str[2] in ['+', '-'])) or ((Length(Str)>1) and( (Str[1]='.'))) or ((Length(Str)>1) and (Str[1] in ['+', '-']) and (Str[2]='.')) or (Str[Length(Str)]='.') then
begin
Result:=False;
Exit;
end;
i:=Pos('.',Str);
if i<>0 then
Delete(Str,I,1);
flag:=3;
Result:=IsIntWithSign(Str);
end;
function IsFloatUFixed(Str:String):Boolean;
var
i:Integer;
begin
Str:=UpperCase(Str);
i:=Pos('E',Str);
if i=1 then
begin
Result:=False;
exit;
end;
if i=0 then
Result:=IsFloatFixed(Str)
else
begin
flag:=4;
Result:=IsFloatFixed(Copy(Str,1,I-1)) and IsIntWithSign(Copy(Str,I+1,Length(Str)-I));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsFloatUFixed(LabeledEdit1.Text) then ShowMessage('Корректно')
else ShowMessage('Некорректно');
end;
end.
|