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

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

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

> Часы
сообщение
Сообщение #1


Новичок
*

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

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


Народ, может кто-нить поможет зарешать! СРОЧНО!!! :molitva: :molitva: :molitva:

Составьте программу вывода на экран изображения циферблата механических часов с секундной, минутной и часовой стрелками. Запуск часов осуществляйте клавишей Enter, при этом перемещение секундной стрелки сопровождается «харак-терным» для часов звуком и предусмотрите коррекцию времени путем перемещения стрелок часов при нажатии клавиши Курсор влево и Курсор вправо.

Сообщение отредактировано: shadoof -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Так пойдет? (окна выделены цветом, если курсор будет мешать - можно его отключить...)
uses crt;
type
{
Record - объединение разнотипных данных "под одной крышей".
Например, чтобы полноценно работать с окном,
мне надо знать про него следующее: }
RWin = record
{ координаты левого верхнего (xs, ys) и правого нижнего (xf, yf) угла }
xs, ys, xf, yf: integer;
{ цвет фона }
b_color: byte;

{ ну и дополнительная информация (разная для разных окон) }
count: byte;
s: string;
end;

{ Для инициализации констант типа Record пользуемся синтаксисом:
(<имя поля>:<значение>), при этом можно не указывать те поля,
инициализировать которые мы будем в другом месте...

Далее инициализируется массив записей (для трех окон) }
const
winds: array[1 .. 3] of RWin =
((xs: 3; ys:1; xf:10; yf: 8; b_color:red; count:1),
(xs:12; ys:1; xf:25; yf:12; b_color:green; count:1),
(xs:32; ys:1; xf:48; yf:17; b_color:blue; count:1));

{ "Высота" окна }
function win_height(i: integer): integer;
begin
with winds[i] do
win_height := yf - ys + 1;
end;

{ Процедура, очищающая окно, заданное записью R }
procedure clearwindow(r: RWin);
begin
with r do begin
window(xs, ys, xf, yf);
textbackground(b_color);
clrscr;
end;
end;

{
Эта поцедура изменяет окно с номером i,
с учетом того что в 1-ом и 3-ем окне строка "выезжает" сверху,
а во втором - снизу }
procedure show_window(i: integer);
begin
with winds[i] do begin
window(xs, ys, xf, yf);
textbackground(b_color); { устанавливаем i-ое окно }

gotoxy(1, 1); { переходим в его левый верхний угол }

if i = 2 then begin
{
если окно - второе, то удаляем первую строку, при этом
все остальные строки сдвигаются вверх, и соответственно
внизу появляется пустая строка, куда и устанавливаем курсор
}
delline; gotoxy(1, yf - ys + 1);
end
else begin
{
если окно первое или третье, то добавляем строку, соответственно
все остальные строки сдвигаются на одну вниз, и нижняя строка
выходит за пределы окна... Курсор оставляем в левом верхнем углу
}
insline; gotoxy(1, 1);
end;

{
в позицию, где находится курсор (она уже была правильно выставлена),
выводим текущий символ, и увеличиваем счетчик символов. Если счетчик
"зашкалило", сбрасываем его в 1...
}
write(s[count]); inc(count);
if count > length(s) then count := 1;

end;
end;

var
s: string;
i, j: integer;

begin
{ чистим экран черным цветом }
textattr := lightgray + 16 * black;
clrscr;

s := 'testing'; { эта строка будет "крутиться" }

{
здесь устанавливаются символы, в порядке появления их
внизу/вверху i-го окна (нарисуй окно на бумаге, и посмотри,
в каком порядке символы заданной строки должны в этом окне
появляться). При таком подходе достаточно потом просто
проходить в цикле по всем символам строки и все будет работать
как положено...
}
for i := 1 to 3 do begin
winds[i].s := '';
for j := length(s) downto 1 do
winds[i].s := winds[i].s + s[j];
end;

for i := 1 to win_height(1) - length(s) do begin
winds[1].s := winds[1].s + #32;
winds[2].s := #32 + winds[2].s;
winds[3].s := #32 + winds[3].s;
end;

for i := 1 to win_height(2) do begin
winds[1].s := winds[1].s + #32;
winds[2].s := winds[2].s + #32;
winds[3].s := #32 + winds[3].s;
end;

for i := 1 to win_height(3) do begin
winds[1].s := winds[1].s + #32;
winds[2].s := winds[2].s + #32;
winds[3].s := winds[3].s + #32;
end;

{ Теперь очищаем все три окна (делаем их видимыми) ... }
for i := 3 downto 1 do
clearwindow(winds[i]);
{ ... выводим заданную строку в первое окно ... }
for j := 1 to length(s) do
show_window(1);
{ ... и ждем нажатия на Enter }
readln;

{ Основной цикл программы - пока пользователь не нажмет
какую-нибудь клавишу, перерисовываем все 3 окна (что
заставит строку прокручиваться)
}
repeat
for i := 1 to 3 do begin
show_window(i);
delay(7200);
end;
until keypressed;

{
чистим буфер клавиатуры, чтобы по окончании работы программы
не вываливался мусор ...
}
while keypressed do readkey;

{ и возвращаемся в обычное черно-белое окно на полный экран }
window(1, 1, 80, 25);
textattr := lightgray + 16 * black;
clrscr;

end.
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 18.05.2022 6:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name