Помощь - Поиск - Пользователи - Календарь
Полная версия: Является ли заданная строка правильной записью целого числа?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
bama_girl
Определить, является ли заданная строка "правильной записью целого числа" (возможно со знаком).

Вот как ее решила я:

Код
program laba;
uses crt;
var
s:string;
w, code:integer;  
procedure start;  
begin
writeln('введите строку');  
readln(s);  
end;
procedure process;
begin
Val(s,w,code);  
end;
procedure finish;  
begin
If code=0 then  
writeln('Строка ', s,' является записью целого числа ')  
else
writeln('Строка ', s,'  не является записью целого числа ');  
readln;
end;
begin
writeln ('Эта программа определяет, является ли введенная вами строка правильной записью целого числа.');
readln;
start;  
process;  
finish;  
end.


Однако, здесь идет конвертирование и проверка всей строки сразу.... Это очень ограничило количество вводимых символов.... Мне поставили новую задачу: сделать так, чтобы шли конвертирование и проверка каждого символа... Сложность еще в том, что целые числа могут быть и отрицательными, и если делать посимвольную проверку, то нужно учитывать знак "-" в начале строки... unsure.gif
Подскажите пожалуйста, как сделать!
Michael_Rybak
очень просто. смотри. читаешь строку (как строку, string). если первый символ не минус и не цифра - сразу ответ "нет". иначе, если среди остальных символов только цифры - ответ "да", иначе - "нет". проверяешь циклом for.

и тему переименуй, пожалуйста.

М
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...

bama_girl
Спасибо большое за помощь, суть ясна =)

Только сразу возник вопрос:

Если я, например, для начала поставлю условие на первые два символа, а дальше с помощью цикла буду осушествлять проверку остальных символов (например дана строка -12345... сначала проверяю -1 (является целым числом), а дальше посимвольно: 2, 3, 4, 5...), такой вариант возможен?...
andriano
Цитата(Michael_Rybak @ 9.04.2008 12:24) *
если первый символ не минус и не цифра - сразу ответ "нет". иначе...
"$FF" - является правильной записью целого числа?
Michael_Rybak
Цитата
Если я, например, для начала поставлю условие на первые два символа, а дальше с помощью цикла буду осушествлять проверку остальных символов (например дана строка -12345... сначала проверяю -1 (является целым числом), а дальше посимвольно: 2, 3, 4, 5...), такой вариант возможен?...


Да, только учти, что во введенной строке может и не быть двух символов. А может и одного не быть.
andriano
Michael_Rybak, неправда Ваша.
Если нечто нужно проверить на валидность, то следует сначала сформулировать, что же следует считать валидным. Без этого задача не полна. А, пытаясь решать задачу с явно неполным условием, можно запросто сесть в лужу.

Впрочем, каждый волен решать, как лично ему поступать в том или ином случае. Только не следует рекомендовать другим явно неправильные действия.
Michael_Rybak
может нам еще римские цифры учитывать, а так же вербальное представление слов? и иероглифы?

по тексту автора темы совершенно очевидно, что имеется ввиду десятичная запись. более того, при желании можно и вывод такой сделать: функция val c целым аргументом обработает только десятичную запись, а ксюша говорит, что всё ок, только нужно добавить, чтоб работало с длинными числами.

давайте не будем придираться к запятым в тексте, это ну совсем-совсем бессмысленно. я не говорю, вообще не придираться. просто есть какая-то мера подразумеваемости, и в данном случае очень явная, по-моему.
andriano
Цитата(Michael_Rybak @ 10.04.2008 12:26) *

может нам еще римские цифры учитывать, а так же вербальное представление слов? и иероглифы?
Не видя условия, ответить на этот вопрос невозможно.
Цитата

по тексту автора темы совершенно очевидно, что имеется ввиду десятичная запись.
Извини, я телепатическими способностями не обладаю, а в тексте этого в упор не вижу.
Цитата
более того, при желании можно и вывод такой сделать: функция val c целым аргументом обработает только десятичную запись, а ксюша говорит, что всё ок, только нужно добавить, чтоб работало с длинными числами.
Неправда Ваша.
  val('$ff',i,j);
writeln(i,' ',j);

Цитата
давайте не будем придираться к запятым в тексте, это ну совсем-совсем бессмысленно. я не говорю, вообще не придираться. просто есть какая-то мера подразумеваемости, и в данном случае очень явная, по-моему.
Я не придираюсь. Я обращаю внимание на неоднозначность в формулировке задачи.
Увы, на практике очень часто оказывается, что каждый из двух беседующих подразумевает что-то свое, тогда как каждый из них уверен, что они подразумевают одно и то же.
Бывают и более сложные ситуации, например, в системе "преподаватель, студент, помощник" запросто может оказаться, что преподаватель и помощник подразумевают разное, а студент, не владея материалом в достаточной мере, просто даже не подозревает о возможности такой разницы. В таком случае если помощник своевременно сможет доказать студенту необходимость уточнить условие у преподавателя, это в дальнейшем поможет избежать студенту массы неприятностей.
Скажешь не жизненная ситуация?
Michael_Rybak
вообще - согласен. в данном конкретном случае, на мой взгляд, всё предельно ясно. автор жеж божий одуванчик, такой милый и невинный. ты веришь, что от нее могут требовать шестнадцатиричную запись?

p.s. про val каюсь, но дела это не меняет.
andriano
Цитата(Michael_Rybak @ 10.04.2008 23:54) *
ты веришь, что от нее могут требовать шестнадцатиричную запись?
Вопрос касается не особенностей моего вероисповедания, а исключительно условия задачи, которое звучит так:
Цитата
Определить, является ли заданная строка "правильной записью целого числа" (возможно со знаком).

Скажи честно и откровенно, шестнадцатиричное представление является правильной записью целого числа или нет?
hardcase
ППц вы тут демагогию развели...
Michael_Rybak
Цитата
Скажи честно и откровенно, шестнадцатиричное представление является правильной записью целого числа или нет?


я уже писал про римские и иероглифы.

а спрашивать об очевидном - незачем smile.gif
bama_girl
Ребят, возникла еще одна проблема: в эту задачу как-то надо рекурсию впихнуть...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.