Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Число ли?!

Автор: kleks 9.09.2005 22:15

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

Автор: klem4 9.09.2005 22:24

один из вариантов :

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 9.09.2005 22:24

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

А теперь еще кое-что:

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

klem4: Последнее китайское предупреждение: проверяй программы, перед тем как запостить. angry.gif

Автор: kleks 9.09.2005 22:34

Спасибо огромное!!!!! Теперь понятно!!!!!!!

Цитата(volvo @ 9.09.05 19:24)
А теперь еще кое-что:
1. Заголовок темы должен быть информативным. В противном случае тема удаляется

За это...извините!!!! Теперь буду знать...!!!

Автор: kleks 29.09.2005 0:31

А можно ли как-нибудь проверить входные данные (на принадлежность к числу), не используя стандартных процедур str() и val()??? huh.gif huh.gif

Автор: volvo 29.09.2005 0:41

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 29.09.2005 0:46

Все так то оно так, но почему вот это вылетает если ввести скажем '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 29.09.2005 0:52

klem4, ты ХОРОШО подумал, прежде чем это сделать?

writeln('IOReslt = ', IOResult);

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

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

Автор: klem4 29.09.2005 10:21

Я всего навсего на знал о том что

Цитата
Обращение к IOResult сбрасывает его в 0

sad.gif