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

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

Форум «Всё о Паскале» _ Задачи _ Цифры

Автор: sklip 13.06.2004 11:11

Как сделать так, чтобы с клавиатуры вводились только цифры. А при попытки ввести буквы, программа не реагировала .

И ещё, как вычислить вот это?


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: virt 13.06.2004 11:42

используй readkey.
и если введена цифра коды : 30h-39h если не ошибаюсь.

Код
sqrt(a/(3.4-d))

Автор: AlaRic 13.06.2004 11:44

Не реагировала - это как? Ждала цифр или вылетала? Турбо паскаль в этом случае просто вылетает, если я конечно не ошибаюсь!

Автор: virt 13.06.2004 11:53

AlaRic
sklip наверное имела ввиду если цифра то что-то с ней делать ,если не цифра то ничего не делать.

Автор: Romtek 13.06.2004 14:22

Читаешь код клавиши. Если цифра - заносишь в стек и считаешь их кол-во.
По нажатии ввода останавливаешься и извлекаешь из стека числа, и формируешь число.
ABC = C*10^0 + B*10^1 + A*10^2

Автор: Romtek 13.06.2004 14:26

Обработка правильного вывода, чтобы прога не вылетала при введении буквы, делается так:

Код
repeat
 {$I-}
 readln(num);
 {$I+}
until IOresult=0;


PS Пример можно поместить а FAQ

Автор: sklip 14.06.2004 12:57

Цитата
AlaRic
sklip наверное имела ввиду если цифра то что-то с ней делать ,если не цифра то ничего не делать.


Во первых, ни имела, а имел.
Во вторых, введёные цифры надо посчитать по формуле, т.е. цифр должно быть 2 введины с клавиатуры.
Как сделать, чтобы число D было не равно 3.4 т.е. это число не вводилось?

Автор: APAL 14.06.2004 15:10

Вопрос был поставлен не правильно....

Ведь это же обычная "защита от дурака".
Надо считать не сразу все выражение целиком, а только 3.4-D и если итог равен 0 попросить ввести значение еще раз или выдать сообщение, что решений нет.
Это как корни квадратного уравнения - сначала считать дискриминант, а потом все остальное... smile.gif

Автор: APAL 14.06.2004 15:12

Кстати, надо ввести еще проверку на положительность выражения под корнем перед вычисления самого корня. ;)

Автор: Romtek 14.06.2004 15:15

Простая проверка
if D=3.4 then {заново ввести D}

В чём проблема с формулой? Кв. корень?

Автор: sklip 17.06.2004 15:08

А как ограничить количество вводимых символов до запятой и после
Максимальное число. 99.99

Автор: Altair 17.06.2004 17:40

Ну как как, просто вводим данные в строку посимвольно, и все время следим за размером строки. Так и защита от "дарака" реализуется, вводим данные в строку, а потом преобразуем в цифры, если ошибка будет, то просим заново ввести.

Автор: Stream 24.06.2004 10:05

Лучше всего для ограничения количества вводимых символов использовать функцию ReadBuf, а для перевода в число - Val..