IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> паскаль, помогите найти ошибку в программе, Работа со строками, проверить является ли заданная строка записью веще
сообщение
Сообщение #1


Гость






помогите пожалуйста в решении задачи:
Задание: Определить, является ли заданная строка правильной записью вещественного числа (возможно, со знаком, а также с пробелами спереди и/или сзади). Указание: вещественное число должно быть представлено либо в виде числа с фиксированной десятичной точкой (–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.


М
Теги !



Сообщение отредактировано: klem4 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


http://forum.sources.ru/index.php?showtopic=165229
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.10.2020 20:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name