Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.04.2018, 21:27
DayBreak DayBreak вне форума
Прохожий
 
Регистрация: 20.03.2018
Сообщения: 10
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию ПРоверка

У меня есть программа,определяющая корректность строки с числом,но мне надо ее переделать так,что если корректно число,то программа выведет тип(целое,целое со знаком,вещественное с фикс.точкой,вещественное с плавающей точкой).Пытался добавить флаг и 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.
Ответить с цитированием
  #2  
Старый 25.04.2018, 08:21
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Посмотрите в сторону Val() или TryStrTo...()
Ответить с цитированием
Этот пользователь сказал Спасибо nixon232 за это полезное сообщение:
DayBreak (02.05.2018)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter