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

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

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

> Строки.Плавающая точка., Выделить подстроку, соответствующую вещественному числу с плавающей
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Александр

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


Задана строка символов, состоящая из букв, цифр, запятых, точек,
знаков “+” и “-“, открывающей и закрывающей скобок. Выделить подстроку,
соответствующую вещественному числу с плавающей точкой (т.е. в виде –0.00E-
00).

Подскажите,как это сделать?

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Ну, без Continue получается гораздо больший "кошмарик":
program podstroka;
var
s,pods:string;
i:integer;
done:boolean;

function next(var i: integer): integer;
begin
next := i;
inc(i);
end;

procedure ciferki(const s: string; var pods: string; var i: integer);
begin
while (s[i] in ['0'..'9']) and (i<=length(s)) do
begin
pods:=pods+s[i];
inc(i);
end;
end;

begin
(*
writeln('input string?');
readln(s);
*)
s := '(12.2E-12 + A)';

i:=1;

done:=false;
while not(done) and (i<=length(s)) do begin
pods:='';
while (not(s[i] in ['-','0'..'9'])) and (i<=length(s)) do inc(i);
if s[i]='-' then begin
pods:=pods+s[i];
inc(i);
end;
if not((i<=length(s)) and (not(s[i] in ['0'..'9']))) then begin
ciferki(s,pods,i);
if s[i] = '.' then begin
pods:=pods+s[next(i)];
if (s[i] in ['0'..'9']) then begin
ciferki(s,pods,i);
if s[i] = 'E' then begin
pods:=pods+s[next(i)];
if not ((s[i]<>'+') and (s[i]<>'-')) then begin
pods:=pods+s[next(i)];
if (s[i] in ['0'..'9']) then begin
ciferki(s,pods,i);
done:=true;
end
end;
end;
end;
end;
end;
end;
if done then
writeln(pods);
readln;
end.
(я немного разгрузил программу, добавив функцию next, но это - капля в море...)

Кстати, если ориентироваться на работу парсера TP, то он воспринимает 12.E-12 как правильное число, поэтому вопрос к автору: должно ли ЛЮБОЕ число, воспринимаемое компилятором TP как правильное быть распечатано, или только то, что подходит под заданную в первом сообщении маску?
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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