Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Турбо Паскаль 7.0. Ограничение цифр при вводе числа  (Прочитано 31031 раз)
0 Пользователей и 6 Гостей смотрят эту тему.
Almost456
Гость
« : 14-12-2009 13:56 » 

Вот как это сделать?
Допустим, ограничить до 8 цифр.
« Последнее редактирование: 14-12-2009 15:25 от Sel » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 14-12-2009 14:34 » 

Написать свой "обработчик", используя функции keypressed и readkey.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 14-12-2009 14:42 » 

А ещё лучше перехватить прерывания от клавиатуры.
« Последнее редактирование: 14-12-2009 15:25 от Sel » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Almost456
Гость
« Ответ #3 : 14-12-2009 14:48 » 

Типа, вот так?
Код:
repeat
ClrScr;
gotoxy(5,5);
write('n=');
readln(n);
until keypressed до 8 раз
« Последнее редактирование: 14-12-2009 17:21 от Sel » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 14-12-2009 15:01 » 

Almost456, вот как раз убрать readln

И почитать хелп про readkey. Кстати, в хелпе и пример использования есть.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Almost456
Гость
« Ответ #5 : 14-12-2009 15:29 » 

Слушай, ну подскажи...по идее так должно работать, но не получается.
Код:
begin
ClrScr;
gotoxy(5,5);
write('n=')
while keypressed do begin
ch:=readkey;
inc(k);
end;
if k=8 then exit;
readln;
end.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 14-12-2009 15:53 » 

Бред...

1. зачем gotoxy ? (ладно не мешает)
2. какой тип возвращает функция readkey?
3. Зачем в конце readln

4. Приблизительный шаблон
Код:
var InpNum : string;
    ch:char;
    i:integer;
begin
  while i<8 do begin
   ch:=Readkey;
  /*накапливаем символы в InpNum */
   inc(i);
  end;
 /*преобразовываем строку в число*/
end.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Almost456
Гость
« Ответ #7 : 14-12-2009 15:56 » 

Ты пойми,нужно ограничить число не в виде строки, а как ввод данных, короче  не string'ом.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 14-12-2009 16:05 » 

Almost456, Это ты пойми, что преобразование типов строковых в численные происходит на уровне библиотек, к которым у тебя нет доступа.
Поэтому тебе дается в руки некий API, который  позволяет решить твою задачу, и даже больше.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 14-12-2009 16:44 » 

Наверно лучше сразу пропускать в накопительный буфер лишь цифры. А ещё внутри хорошо бы выводить накопительный буфер на экран - к вопросу о gotoxy.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Almost456
Гость
« Ответ #10 : 16-12-2009 13:03 » 

Интересно.Ведь я же попросил пожалуйста.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 16-12-2009 13:17 » 

Almost456, т.е. ты даже и не понял что я тебе сказал?

Тогда объясняю.

Преобразование типов строковых в численные происходит на уровне библиотек, к которым у тебя нет доступа.

Это значит, что если ты напишешь readln(N), где N:integer, то компилятор вместо процедуры readln подставит, приблизительно, следующий код.

1. Прочитать буфер клавиатуры.
2. Полученную строку преобразовать в целочисленное значение.
Почему строку? Потому что клавиатура это символьное устройство.

Ты на этапе выполнения этого не увидишь, а в программу попадет уже целочисленное значение, если, конечно, не было ошибки при вводе.

Поэтому тебе дается в руки некий API, который  позволяет решить твою задачу, и даже больше.
Чтобы управлять вводом/выводом тебе предоставлены для использования набор функций (API, пусть это так называется).

Тоже самое и при выводе

writeln(N) =
Преобразовать N в строку
Выдать в буфер видео.

Почему в строку?
Потому что display - символьное устройство.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #12 : 18-12-2009 05:58 » 

как гласит нелюбимая всеми справка,

Цитата
Read считывает все символы до (но не включая) следующего маркера конца
строки или пока Eof(F) станет равным True. Read не переходит к следующей
строке после чтения. Если полученная в результате строка длиннее, чем
максимальная длина строковой переменной, то она усекается.
После первого
Read, каждые последующие вызовы Read будут видеть маркер конца строки и
возвращать строку нулевой длины.

т.е. для ограничения восемью символами достаточно читать в строку в 8 символов длиной:

Код:
var
  s: string [8];
begin
  Write ('Enter s: ');
  ReadLn (s);
  WriteLn ('s = ', s);
end.

результат:

Код:
Enter s: 123456789
s = 12345678
Записан

x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #13 : 18-12-2009 08:08 » 

кстати,

F1
Так там же всё на английском.

если кому-то надо - могу скинуть русский turbo.tph (файл турбо-паскалевской справки). выкладывать не буду, ибо не уверен, что это не будет варез, посему заинтересованным - в личку Ага.
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 18-12-2009 08:52 » 

x77, можно к нам в архив скинуть.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #15 : 18-12-2009 08:58 » 

x77, можно к нам в архив скинуть.

ок, цепляю.

* TURBO.rar (299.67 Кб - загружено 1046 раз.)
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #16 : 18-12-2009 09:22 » 

Игорь, это на русском?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #17 : 18-12-2009 11:07 » 

Джон, да, по идее - просто заменяешь им одноимённый файл в каталоге bin.

з.ы. но не весь турбо-паскакаль превратиться в русский, а только справка.
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 18-12-2009 11:39 » 

Я понял, что это только хэлп. Эх, и где ты был двадцать лет назад!
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #19 : 18-12-2009 11:44 » 

Джон, двадцать лет назад я уже шесть лет, как учил английский и справку читал почти свободно Ага тогда у меня хелпа тоже не было.
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 18-12-2009 11:45 » 

20 лет назад, тоже был русский под тройку в виде перевода текстового файлика)
потом под пятерку, под шестерку не видел.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #21 : 18-12-2009 12:19 » 

Что толку было от тогдашнего школьно-универовского аглицкого 20 лет назад? Специальных терминов всё-равно не знали. Словарь Борковского только в 90ом вышел, да и то заказывали его за бешеные деньги в единственном экземпляре. А так до всех премудростей приходилось доходить методом научного тыка. Хорошо ещё что у Борланда всегда примеры кода были в хэлпе (рабочие!!!).

У нас Турбо-Паскаль 5.5 тогда уже был.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 19-12-2009 23:30 » 

x77, можно к нам в архив скинуть.

ок, цепляю.

Выложу в архиве и тут ссылочку дам. Но завтра.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #23 : 23-05-2010 05:19 » new

Ром, выкладывал ?
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 23-05-2010 06:30 » 

Не помню - это пол года назад было Улыбаюсь
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines