Помощь - Поиск - Пользователи - Календарь
Полная версия: Число ли?!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
kleks
Вообщем такая задачка: предположим мне необходимо ввести размерность матрицы MxN, 0..5 of integer, но при этом я должен проверить...1.является ли то, что я ввожу числом(в противном случае вывести сообщение ), 2.является ли оно целым и 3.входит ли оно в граници от 1..5. Последние два пункта задачки то понятны, а вот как быть с первым!? Подскажите какие-нибудь идеи...Заранее благодарен
klem4
один из вариантов :

uses crt;
var
s : string;

n,error : integer;

Begin

clrscr;

write('n='); readln(s);

val(s,n,error);

if error <> 0 then
writeln('ErrorPos = ',error);

readln;

End.

число будет храниться в n, если это число smile.gif




для чисел с плавающей точкой, n ссответственно не integer, а скажем single.
volvo
Насчет первого тоже понятно:
вводишь "нечто" в виде строки и пытаешься перевести в число через Val (с выключенной проверкой границ {$R-})... Если не произошло ошибки, то это число (таким образом, кстати, можно вообще избавиться от второго пункта).

А теперь еще кое-что:
Цитата(Правила раздела)
1. Заголовок темы должен быть информативным. В противном случае тема удаляется
Делай выводы.

klem4: Последнее китайское предупреждение: проверяй программы, перед тем как запостить. angry.gif
kleks
Спасибо огромное!!!!! Теперь понятно!!!!!!!
Цитата(volvo @ 9.09.05 19:24)
А теперь еще кое-что:
1. Заголовок темы должен быть информативным. В противном случае тема удаляется

За это...извините!!!! Теперь буду знать...!!!
kleks
А можно ли как-нибудь проверить входные данные (на принадлежность к числу), не используя стандартных процедур str() и val()??? huh.gif huh.gif
volvo
var
N: integer;
begin
{$i-}
repeat
write('Vvedite naturalnoe chislo N = ');
readln(N);
until (IOResult = 0) and (n in [1 .. 5]);
{$i+}
writeln(n)
end.

Вот и попробуй ввести НЕ число или число, но НЕ принадлежащее интервалу 1 .. 5
:no:
klem4
Все так то оно так, но почему вот это вылетает если ввести скажем 'asd' ?

uses crt;
var
N:integer;
begin

clrscr;
{$I-}
repeat
write('Vvedite naturalnoe chislo N = ');
readln(N);
writeln('IOReslt = ', IOResult);
until IOResult = 0;
{$I+}
end.


volvo
klem4, ты ХОРОШО подумал, прежде чем это сделать?
writeln('IOReslt = ', IOResult);

Обращение к IOResult сбрасывает его в 0, и ошибка "проходит"... Это первое.

Ну, а во вторых, я в тысячный раз повторяю - здесь - НЕ раздел для 32-бит. компиляторов, и проверять программы в FPC не пойдет... Как ты думаешь, я бы выложил программу, если бы она на ТАКОМ спотыкалась?
klem4
Я всего навсего на знал о том что
Цитата
Обращение к IOResult сбрасывает его в 0

sad.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.