IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Набор строки и выход из неё в любой момент
4epenOK
сообщение 1.03.2007 18:08
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Здравствуйте!
У меня возникла проблемка, надеюсь на вашу помощь. Пишу я программу по вычислению среднего балла учеников. Нужно чтобы можно было выйти из программы в любой момент времени сразу после нажатия Esc. Проблема заключается в том, что при вводе имени ученика я не могу это реализовать. Пробовал сделать вводить-выводить посимвольно каждую букву, но появились какие-то глюки. Дело в том, что нужно ещё реализовать поддержку клавиш Del, Backspace, end, home. Имя ученика может состоять из любых символов.
Компилятор Turbo Pascal 7.0


--------------------
Работать и создавать, сражаться и побеждать, расчитывать и не ошибаться,
бороться и искать, найти и переработать!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
4epenOK
сообщение 1.03.2007 20:20
Сообщение #2





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Признаю свою ошибку. Я не указал, что длина имени должна быть не более 25 символов и при вводе наряду с клавишами Del, End, Home, Space, нужно чтоб работали клавиши стрелки (влево и вправо), а клавиши F1-F12 не работали. Символы могут быть любые (русские-английские буквы, цифры, знаки и т.д.) Коды, которые вы привели , работают, но это не совсем то, что нужно. Как работать с байтами я не знаю.
Вот часть моей программы, которая, понятное дело, глючит.

uses crt;
label 1, 2;
type
spisok = record
name:string[25];
end;
ldp=array[1..40] of spisok;
var nomer:ldp; a, i, n:0..1001; symbol:char; c:string;
begin
1:clrscr; textcolor(7); i:=0; n:=0;
writeln('Имя':5,'Текущие оценки':40,'Средний бал':35); 2:textcolor(9);
inc(n); nomer[n].name:=''; repeat
symbol:=readkey;
if (symbol<>#0) and (symbol<>#8) and (symbol<>#27) then
if length(nomer[n].name)<25 then begin a:=wherex+1;
insert(symbol, nomer[n].name, wherex); gotoxy(1, wherey); clreol;
write(nomer[n].name); gotoxy(a, wherey) end;
case symbol of
#27:exit;
#0:begin symbol:=readkey; case symbol of
#75:gotoxy(wherex-1, wherey);
#77:if wherex<length(nomer[n].name) then gotoxy(wherex+1, wherey);
end; end;
#8:begin a:=wherex-1; if a>=1 then begin delete(nomer[n].name,a,1);
Gotoxy(1,wherey); clreol; write(nomer[n].name); gotoxy(a, wherey); end end
end;
until symbol=#13; textcolor(7);
if length(nomer[n].name)=0 then begin inc(i); str(i, c);
nomer[n].name:='Неизвестный № '+c; textcolor(9); write(nomer[n].name);
textcolor(7); end; gotoxy(length(nomer[n].name), wherey); write(': '); end.


{ name - имя учащегося
n - номер ученика по счёту
a - счётчик
i - количество "неизвестных"
symbol - запоминает нажатую клавишу }

Сообщение отредактировано: 4epenOK - 1.03.2007 20:24


--------------------
Работать и создавать, сражаться и побеждать, расчитывать и не ошибаться,
бороться и искать, найти и переработать!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"