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

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

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

> Часы
shadoof
сообщение 12.10.2005 22:22
Сообщение #1


Новичок
*

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

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


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

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

Сообщение отредактировано: shadoof - 13.10.2005 22:24
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
volvo
сообщение 14.10.2005 14:15
Сообщение #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

 



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