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

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

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

 
Closed Topic Открыть новую тему 
> Часы
сообщение
Сообщение #1


Новичок
*

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

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


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

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

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


Гость






А в поиск заглянуть? ;)
Часы
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Спасибо!
А как можно сделать, чтобы с помощью стрелочек можно было время корректировать!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
А как можно сделать, чтобы с помощью стрелочек можно было время корректировать!
Вот что получилось у меня: программа считывает реальное время, поэтому чтобы не заморачиваться с постоянными переустановками, я попробовал ввести "дельту времени", то есть 3 переменные, которые показывают, на сколько увеличивать (или уменьшать, если они отрицательные) считанные процедурой GetTime значения часов, минут и секунд... А по нажатию кнопок влево и вправо я просто увеличиваю или уменьшаю "дельту"... smile.gif

Будут вопросы - задавай...


Прикрепленные файлы
Прикрепленный файл  __CLOCKS.PAS ( 3.42 килобайт ) Кол-во скачиваний: 245
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Огромное спасибо! :yessss:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


volvo, слушай, я конечно понимаю, что это нагло с моей стороны, но может, если можешь, посмотри ещё одну задачку пожалуйста! :molitva:

Здесь задачу нужно написать исключительно с помощью только CRT!

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

Заранее спасибо! ;)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Не понял, как окна должны располагаться одно относительно второго? Одно над другим или слева/справа/посередине?

P.S. Зачем поменял название темы? Вообще-то на форуме не принято обращаться лично к кому-то, на то он и форум. У нас достаточно участников, которым вполне по силам решение этой задачи...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


Расположение окон абсолютно безразличное, когда я пытался решать, я предполагал что друг под другом по середине, но это не принципиально!

По поводу названия темы: извиняюсь, что изменил, просто по поводу первой задачи, конкретно вы мне очень оперативно помогли... поэтому и обращаюсь к вам!

Ещё раз заранее спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Я все равно ничего не могу понять... Допустим, строка полностью поместилась в первом окне... Начинаем прокрутку. Что происходит со строкой, когда она достигает нижней границы первого окна? Появляется сверху? Или "уходит" вниз, за пределы окна, одновременно появляясь снизу второго окна (и "перетекает" полностью из первого окна во второе, из него - в третье, и так по кругу)?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Так точно! Строка достигает нижней границы первого окна и уходит вниз, одновременно появляясь снизу второго окна! Потом в третьем оно появляется сверху окна.... Потом опять сверху первого, снизу второго, сверху третьего!
Все эти переходы как-бы перетекая из окна в окно происходят...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Так пойдет? (окна выделены цветом, если курсор будет мешать - можно его отключить...)
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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

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

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


volvo, СПАСИБО! Всё работает!

Ещё, если будет возможность, то вы бы не могли пару комментов написать по некоторым моментам(просто для самообразования=)), но это не к спеху!

Конкретно:
1. Что это за тип такой record и что он делает?
2. Соответственно и раздел констант не очень ясен...
3. Что делает процедура show_window?
4. Вы писали, что курсор маргающий можно убрать, как?
5. И если вы уже возьмётесь за написание комментов, то можете пояснить циклы в самой программе...

Заранее спасибо... rolleyes.gif

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


Гость






Комментарии добавлены ... smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Ищущий истину
******

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

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


название информативно... а личная переписка у нас по правилам в PM ...
close.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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