Помощь - Поиск - Пользователи - Календарь
Полная версия: паскаль, помогите найти ошибку в программе
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
LVS
помогите пожалуйста в решении задачи:
Задание: Определить, является ли заданная строка правильной записью вещественного числа (возможно, со знаком, а также с пробелами спереди и/или сзади). Указание: вещественное число должно быть представлено либо в виде числа с фиксированной десятичной точкой (–214.78) либо в виде числа с плавающей точкой (-2.1478Е+02 или -2.1478е+02).

Получилась следующая прога, только работает она неверно. Найти ошибку самостоятельно не получается(прошу строго не судить:учусь дистанционно, знаний не хватает, спросить не у кого). И сразу вопрос, есть ли более простой способ решения этой задачи, например при помощи Val. Очень надеюсь на помощь.

program analiz;
type
  str=string[100];
var
  s:str;
  result:boolean;
  p,i:integer;

function IsProb(Ch:Char):boolean;
begin
  result:=Ch in [' '];
end;

function IsDigit (Ch:Char):boolean;
begin
   result:=Ch in ['0'..'9'];
end;


function IsSign (Ch:Char):boolean;
begin
   result:=(Ch='+') or (Ch='-');
end;


function IsSeparator (Ch:Char):boolean;
begin
   result:=Ch='.';
end;

function IsExponent (Ch:Char):boolean;
begin
   result:=(Ch='E') or (Ch='e');
end;

function IsNumber (const S:string):boolean;
var i,code:integer;
begin
   result:=false;
     if IsProb(S[i]) then
        Inc(i);
     if IsSign(S[i]) then
        Inc(i);
     if (i>Length(S)) or not IsDigit(S[i]) then exit;
     repeat
       Inc(i);
     until (i>Length(S)) or not IsDigit(S[i]);
     if i>Length(S) then begin
                           result:=true;
                           exit;
                         end;
     if IsSeparator(S[i]) then
        begin
          Inc(i);
          if (i>Length(S)) or not IsDigit(S[i]) then
            exit;
          repeat
            Inc(i)
          until (i>Length(S)) or not IsDigit(S[i]);
          if i>Length(S) then
             begin
               result:=true;
               exit;
             end;
        end;
     if IsExponent(S[i]) then
        begin
          Inc(i);
          if i>Length(S) then
             exit;
          if IsSign(S[i]) then
             Inc(P);
          if (i>Length(S)) or not IsDigit(S[i]) then exit;
          repeat
            Inc(i)
          until (i>Length(S)) or not IsDigit(S[i]);
          if i>Length(S) then begin
                                result:=true;
                                exit
                              end;
        end;
     if IsProb(S[i]) then begin
                            Inc(i);
                            if i>Length(S) then begin
                                                  result:=true;
                                                  exit;
                                                end
                                           else exit;
                          end;
                     
end;

begin
   writeln ('Введите строку'); readln(s);
   isnumber(s);
   writeln(result);
end.


М
Теги !

where to buy cialis online safel
Costo Priligy Generico
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.