Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 2
Регистрация: 13.11.2015
Сообщений: 53

Почему не вводится keypressed. где ошибка?

03.12.2015, 19:09. Показов 1747. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу сделать секундомер с небольшой графикой в консоли, но не пашет ввод или чёт другое
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
program secundak;
uses crt;
var
z : array [1..3] of integer;
s : array [1..3] of integer;
begin
repeat
  writeln('  YY   UU   II');
  writeln('  ', z[1], '    ', z[2], '    ', z[3]);
  writeln('  HH   JJ   KK');
  keypressed;
  if readkey = #25 then z[1] := z[1] + 1 else
  if (readkey = #8) and (z[1] > 0) then z[1] := z[1] - 1 else
  if readkey = #21 then z[2] := z[2] + 1 else
  if (readkey = #10) and (z[2] > 0) then z[2] := z[2] - 1 else
  if readkey = #9 then z[3] := z[3] + 1 else
  if (readkey = #37) and (z[3] > 0) then z[3] := z[3] - 1 else
  gotoxy(1,4);
  clearline;
  gotoxy(1,3);
  clearline;
  gotoxy(1,2);
  clearline;
  gotoxy(1,1);
  clearline;
until keypressed and (readkey = #13);
end.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2015, 19:09
Ответы с готовыми решениями:

Подскажите где почему ошибка?
Подскажите почему ошибка? SC:=MapVirtualKeyEx(VK,MAPVK_VK_TO_VSC,MyHKL); Unit2.pas(106): Undeclared identifier: 'MAPVK_VK_TO_VSC'

Где ошибка? Почему не получается?
Дано натуральное число N и массив из N действительных чисел. Найти сумму его элементов. N (1 <= N <= 10000) Пример входных данных...

Где ошибка, почему блоки разъезжаются?
#knopki{ width:300px; height:1000px; } #knopka{ width:300px; height:100px; }

11
129 / 17 / 7
Регистрация: 02.11.2015
Сообщений: 52
03.12.2015, 19:31
keypressed всего лишь функция, возвращающая, была ли нажата клавиша. Её использование без возвращаемого значения не имеет смысла. А вообще меня смущает фрагмент с readkey. Скажем, в
Pascal
1
readkey = #25
программа считывает клавишу, удаляя её из клавиатурного стека. Правильно добавить
Pascal
1
var c: char
и написать так:
Pascal
1
2
3
4
5
6
7
  c := readkey;
  if c = #25 then z[1] := z[1] + 1 else
  if (c = #8) and (z[1] > 0) then z[1] := z[1] - 1 else
  if c = #21 then z[2] := z[2] + 1 else
  if (c = #10) and (z[2] > 0) then z[2] := z[2] - 1 else
  if c = #9 then z[3] := z[3] + 1 else
  if (c = #37) and (z[3] > 0) then z[3] := z[3] - 1;
0
1 / 1 / 2
Регистрация: 13.11.2015
Сообщений: 53
03.12.2015, 19:45  [ТС]
Все равно не работает! Может вывод не обновляется?
0
129 / 17 / 7
Регистрация: 02.11.2015
Сообщений: 52
03.12.2015, 19:56
Интересно бы узнать, как оно должно работать
0
1 / 1 / 2
Регистрация: 13.11.2015
Сообщений: 53
03.12.2015, 20:04  [ТС]
1. Задаётся значение часов, минут, секунд.
2. Переводятся секунды в минуты, минуты в часы если есть не точности.
3. Тикает
4. Всё

ну как то так!
это только начало программы! я как исправлю ошибку перейду на следующий этап
наверно сделаю просто ввод!
0
129 / 17 / 7
Регистрация: 02.11.2015
Сообщений: 52
03.12.2015, 20:28
Странно... У меня все работает. Только что за константы клавиш #37, #25 и #10?

Добавлено через 18 минут
И ещё. Советую убрать
Pascal
1
until keypressed and (readkey = #13);
Вместо этого вставьте
Pascal
1
until false;
,
а в самом цикле вставьте
Pascal
1
if c = #13 then break;
0
1 / 1 / 2
Регистрация: 13.11.2015
Сообщений: 53
03.12.2015, 20:38  [ТС]
Вот уменьшенная копия или типо того!
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
program advancedsecundomer;
uses crt;
var
s : array [1..3] of integer;
o : byte;
begin
writeln('Введите кол-во часов');
read(s[1]);
writeln('Введите кол-во минут');
read(s[2]);
writeln('Введите кол-во секунд');
read(s[3]);
repeat
  if s[3] > 59 then
  begin
    s[3] := s[3] - 60;
    s[2] := s[2] + 1;
    o := 1
  end
  else
  o := 0;
  if s[2] > 59 then
  begin
    s[2] := s[2] - 60;
    s[1] := s[1] - 1;
    o := 1;
  end
  else
  o := 0;
until o = 0;
clrscr;
writeln('Для запуска нажмите любую клавишу');
readkey;
clrscr;
writeln('Осталось:');
repeat
  if s[3] > 0 then s[3] := s[3] - 1 else
  if s[2] > 0 then
  begin
    s[2] := s[2] - 1;
    s[3] := 59;
  end
  else
  if (s[2] = 0) and (s[1] > 0) then
  begin
    s[1] := s[1] - 1;
    s[2] := 59;
    s[3] := 59;
  end;
  gotoxy(1,2);
  clearline;
  writeln('Часов:  ', s[1]);
  gotoxy(1,3);
  clearline;
  writeln('Минут:  ', s[2]);
  gotoxy(1,4);
  clearline;
  writeln('Секунд: ', s[3]);
  delay(1000);
until (s[3] = 0) and (s[2] = 0) and(s[1] = 0);
writeln('Время истекло!');
end.
0
129 / 17 / 7
Регистрация: 02.11.2015
Сообщений: 52
03.12.2015, 20:46
Это понятно. Эта "уменьшенная копия" вроде рабочая. Насколько я понял, проблема в вводе времени через readkey в коде, представленном в начале. Вы говорите, что ввод не работает. Я заметил такую проблему: при вводе коды клавиш (#37, #25, #21, #10, #9) не соответствуют ни одной из клавиш клавиатуры. Какие клавиши должны быть использованы при вводе?
0
1 / 1 / 2
Регистрация: 13.11.2015
Сообщений: 53
03.12.2015, 20:48  [ТС]
YY UU II

HH JJ KK
0
129 / 17 / 7
Регистрация: 02.11.2015
Сообщений: 52
03.12.2015, 20:57
Лучший ответ Сообщение было отмечено Витя Ямук как решение

Решение

Понятно. Проблема в следующем: readkey возвращает введённый символ. К примеру, если нажали "Q", он и вернёт "Q". Поэтому следует заменить коды клавиш в if'ах. К тому же, пользователь в зависимости от включенного Caps Lock может ввести как "Q", так и "q". Для этого вместо
Pascal
1
c := readkey;
используем
Pascal
1
c := upcase(readkey);
. Исправленный вариант:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
program secundak;
uses crt;
var
z : array [1..3] of integer;
s : array [1..3] of integer;
c : char;
begin
clrscr;
repeat
  writeln('  YY   UU   II');
  writeln('  ', z[1], '    ', z[2], '    ', z[3]);
  writeln('  HH   JJ   KK');
  c := upcase(readkey);
  if c = 'Y' then z[1] := z[1] + 1 else
  if (c = 'H') and (z[1] > 0) then z[1] := z[1] - 1 else
  if c = 'U' then z[2] := z[2] + 1 else
  if (c = 'J') and (z[2] > 0) then z[2] := z[2] - 1 else
  if c = 'I' then z[3] := z[3] + 1 else
  if (c = 'K') and (z[3] > 0) then z[3] := z[3] - 1;
  if c = #13 then break;
  gotoxy(1,4);
  clearline;
  gotoxy(1,3);
  clearline;
  gotoxy(1,2);
  clearline;
  gotoxy(1,1);
  clearline;
until false;
end.
1
1 / 1 / 2
Регистрация: 13.11.2015
Сообщений: 53
04.12.2015, 15:24  [ТС]
Спасибо! Всё работает! буду доделовать
0
129 / 17 / 7
Регистрация: 02.11.2015
Сообщений: 52
04.12.2015, 15:28
Не за что. Всегда рад помочь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.12.2015, 15:28
Помогаю со студенческими работами здесь

as1 где ошибка и почему так ?
Вот скрипт AS2 - публикую как AS1 + flash pleer 6.0 - всё ок. percentLoaded = int(100 * _root.getBytesLoaded() / _root.getBytesTotal()...

Где же ошибка, почему зависает скрипт?
Привет всем, У меня проблема с кодом. Объясните, где здесь ошибка? Почему этот скрипт не хочет выполняться? При запуске скрипта,...

Почему выводит nan!? Где ошибка?
program pascal_equation_3; var a,b,x,y,h:real; i:integer; BEGIN h:=0.5; writeln('Enter a:'); readln(a); writeln('Enter b:'); ...

почему не работает case? где ошибка?
uses SysUtils, ConvertRus; var day: integer; month: integer; year: integer; last: boolean; r: integer; ...

Form2.show; где ошибка и почему
Form2.show; где ошыбка и почему


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru