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

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

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

 
 Ответить  Открыть новую тему 
> паскаль, помогите найти ошибку в программе, Работа со строками, проверить является ли заданная строка записью веще
LVS
сообщение 27.12.2006 7:43
Сообщение #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 - 27.12.2006 15:07
 К началу страницы 
+ Ответить 
Ozzя
сообщение 27.12.2006 8:14
Сообщение #2


Гуру
*****

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

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


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

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

 



- Текстовая версия 19.06.2025 13:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"