![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
4epenOK |
![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Максим Репутация: ![]() ![]() ![]() |
Здравствуйте!
У меня возникла проблемка, надеюсь на вашу помощь. Пишу я программу по вычислению среднего балла учеников. Нужно чтобы можно было выйти из программы в любой момент времени сразу после нажатия Esc. Проблема заключается в том, что при вводе имени ученика я не могу это реализовать. Пробовал сделать вводить-выводить посимвольно каждую букву, но появились какие-то глюки. Дело в том, что нужно ещё реализовать поддержку клавиш Del, Backspace, end, home. Имя ученика может состоять из любых символов. Компилятор Turbo Pascal 7.0 -------------------- Работать и создавать, сражаться и побеждать, расчитывать и не ошибаться,
бороться и искать, найти и переработать! |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
|
klem4 |
![]()
Сообщение
#3
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Типа этого ?
procedure ReadWord; -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
T i m e |
![]()
Сообщение
#4
|
|||
![]() Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Просто используй readkey. Знаешь как она работает?
Сообщение отредактировано: volvo - 1.03.2007 19:29 -------------------- Time have not meaning. Mind - this is main...
|
|||
4epenOK |
![]()
Сообщение
#5
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Максим Репутация: ![]() ![]() ![]() |
Признаю свою ошибку. Я не указал, что длина имени должна быть не более 25 символов и при вводе наряду с клавишами Del, End, Home, Space, нужно чтоб работали клавиши стрелки (влево и вправо), а клавиши F1-F12 не работали. Символы могут быть любые (русские-английские буквы, цифры, знаки и т.д.) Коды, которые вы привели , работают, но это не совсем то, что нужно. Как работать с байтами я не знаю.
Вот часть моей программы, которая, понятное дело, глючит.
{ name - имя учащегося n - номер ученика по счёту a - счётчик i - количество "неизвестных" symbol - запоминает нажатую клавишу } Сообщение отредактировано: 4epenOK - 1.03.2007 20:24 -------------------- Работать и создавать, сражаться и побеждать, расчитывать и не ошибаться,
бороться и искать, найти и переработать! |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Тогда вот так (не стал привязывать функцию к твоему интерфейсу, нехорошо это; функция должна вводить строку, интерфейс здесь ни при чем - не надо перемешивать его с логикой программы):
uses crt; Тестируй как следует - глюки могут проявиться, ибо я проверял под 32-битным компилером, хотя и в режиме совместимости с TP... |
4epenOK |
![]()
Сообщение
#7
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Максим Репутация: ![]() ![]() ![]() |
всё идёт норм, но эта строка в любом случае не будет пустой, после нажатия Enter. Даже если ты ничего не ввёл.
Если ты после запуска проги сразу жмёшь enter, то lenght(s) будет равно 1, а команда ord(s[1]) выдаст 1. А ведь должно быть lenght(s)=0. Кроме того после выполнения программы координата x почему-то устанавливается на 1. То есть, если дополнить прогу так: убрать в конце writeln('s = ', s); и написать write(':'); readln;; то двоеточие выведется в начале строки, а по идее должен вывестись сразу после строки. Почему так? Или это я что-то не так делаю ![]() -------------------- Работать и создавать, сражаться и побеждать, расчитывать и не ошибаться,
бороться и искать, найти и переработать! |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Я же говорил, что возможны недоработки... Исправление будет совсем небольшое: перед
#27: добавить #13: ; { <--- То есть, если нажат Enter - его НЕ обрабатывать, а выходить сразу }Тогда будет работать, как ты и сказал... |
4epenOK |
![]()
Сообщение
#9
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Максим Репутация: ![]() ![]() ![]() |
Сделал я как ты сказал. Поначалу всё пошло. Но потом, когда я начал подстраивать её под себя, опять появились траблы. Я повставлял write(lenght(s)) в нескольких местах и прога начала мне выдавать самые разные цифры. От 78 до 224. Склоняюсь к мысли, что у меня Паскаль левый какой-то. В общем я поковырялся в программе и остановился на следующем варианте.
uses crt; Поскольку все ученики без исключения имеют ограничения на имена в 25 символов и должны начинаться сначала строки, то я переделал твою функцию в процедуру. Вроде всё работает ![]() Спасибо за помощь ![]() Сообщение отредактировано: 4epenOK - 3.03.2007 20:53 -------------------- Работать и создавать, сражаться и побеждать, расчитывать и не ошибаться,
бороться и искать, найти и переработать! |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 13:40 |