Вопрос № 20273: Добрый день.
Мне нужно написать процедуру ввода с клавиатуры вещественного числа и ограничить ввод числами (ввод знаков кроме цифр и точки не должны приниматься)
Сказать честно у меня мало что получается.... проблема в преобразовании текста ...
Вопрос № 20273
Добрый день.
Мне нужно написать процедуру ввода с клавиатуры вещественного числа и ограничить ввод числами (ввод знаков кроме цифр и точки не должны приниматься)
Сказать честно у меня мало что получается.... проблема в преобразовании текста в чилсо и ограничение ввода. Может кто - нибудь сможет мне помоч чем- либо . Буду рад любой помощи и совету. Зарание благодарен.
Отправлен: 26.04.2005, 18:24
Вопрос задал: kandim (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: Ayl
Здравствуйте, kandim!
Неплохо бы указывать, для какой ОС задача должна решаться. Пишу алгоритмы, они от ОС не зависят, а вот реализация...
Вариант 1.
-------------
Получаешь строку.
Проверяешь на допустимость - это просто. Перебираешь все введенные символы и проверяешь, что среди них только цифры и не более одной точки.
Если проверка не прошла - выдаешь сообщение об ошибке и снова запрашиваешь строку.
Вариант 2
------------
Считываешь вводимые символы по одному и проверяешь на допустимость. В случае цифры запоминаешь ее в строке. В случае точки проверяешь, что ее еще не было. Если это так, то сохраняешь точку и устанавливаешь флаг получения точки. Если же точка уже была - игнорируешь. Если получено что-то другое - тоже игнорируешь. Если получен код клавиши Enter - завершаешь ввод и переходишь к преобразованию.
Преобразование... Ну тут вариантов много. Например, можно использовать такой. Переводишь по отдельности целую и дробную части, а потом складываешь. Это под ДОС. Для винды, если не ошибаюсь, есть стандартные функции перевода строки в число.
Все операции лучше проводить через FPU. Целую часть считать понятно как: в итерациях по всем цифрам числа выполняешь n = n*10 + c(i), причем в начале итераций n = 0. Дробную часть получаешь как d = (d + c(i)) / 10, причем перебирать цифры нужно справа налево.
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 27.04.2005, 11:11 Оценка за ответ: 5
Отвечает: Евгений Иванов
Здравствуйте, kandim!
посмотри исходники библиотек HLA.
http://superforest.narod.ru/add/hlalibsrc.rar
там всё есть!
удачи!
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 14 суток с момента отправки ответа.
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 28.04.2005, 05:50