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

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

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

> строки и списки
crazysun
сообщение 19.12.2004 18:57
Сообщение #1





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

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


Вводится строка символов, в которой могут встречаться пробелы, цифры, буквы 'Е' и 'е', знаки '+' и '-'. Известно, что первый символ отличен от пробела. Из данной строки выделить подстроку символов, предшествующих первому пробелу. Требуется определить, является ли эта подстрока числом (в смысле Паскаля). Если да, то выяснить: целое или вещественное это число, положительное или отрицательное.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
volvo
сообщение 19.12.2004 19:11
Сообщение #2


Гость






crazysun
Все очень просто - есть такая функция Pos(subst, st: string):byte, и если ее применить в виде:
Код
...
p := pos(' ', s);
if p > 0 then
 st := copy(s, 1, p-1)
else st := s;
...

то в st как раз будет кусок исходной строки до первого пробела (если пробела нет, то скопируется вся строка). Дальше - дело техники (можно использовать Val, например)
 К началу страницы 
+ Ответить 
crazysun
сообщение 19.12.2004 19:44
Сообщение #3





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

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


thx
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.12.2004 14:09
Сообщение #4


Гость






crazysun
Вот программа полностью...
{$N+}
const
  s: string = '+1.256723E-23 and so on...';

{ В переменной IsNegative возвращается признак того, является ли число
в строке отрицательным, IsLongInt - признак того, является ли число целым...
Внимание: Обе эти переменные содержат правильные результаты ТОЛЬКО
тогда, когда сама функция возвращает True!!! }
function isNumber(s: string;
         var isNegative, isLongInt: boolean): boolean;
  var
    TnLong: LongInt; TnDouble: Double;
    err: Integer;
  begin
    IsLongInt := True;
    Val(s, TnLong, err);
    if err <> 0 then
      begin
        IsLongInt := False;
        Val(s, TnDouble, err);
        isNumber := False;
        if err <> 0 then Exit
      end;
    IsNegative := (s[1] = '-');
    isNumber := True
  end;

var
  b, bNeg, bLong: boolean;
begin
  b := isNumber(copy(s, 1, pred(pos(' ', s)) + 255*byte(pos(' ', s) = 0)),
                bNeg, bLong);
  writeln('is number: ', b);
  if b then
    begin
      writeln('is negative: ', bNeg);
      writeln('is integer: ', bLong);
    end;
end.
 К началу страницы 
+ Ответить 

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

 

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