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

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

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

 
 Ответить  Открыть новую тему 
> Часы
Pascal
сообщение 8.05.2004 14:56
Сообщение #1





Группа: Пользователи
Сообщений: 5

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


Подскажите, как сделать часы на Паскале, лучше со стрелками. Очень надо! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
virt
сообщение 8.05.2004 16:31
Сообщение #2


Знаток
****

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

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


тебе татушка нужна???

а так есть системный таймер :

Код
var Timer:longint absolute $0:$046c;


по этому адресу ~ 18.2 раза в секунду увеличивается значение на 1 (точнее 1000/55 ~= 18.18...). Можешь отслеживать изменения и каждые 18 увеличений прорисовывать новое положение стрелок. Не забудь каждые 1620 увеличений счетчика (90 секунд) ,корректировать значение часов на +2 сек.

Но это теория ,может тебя именно графическая реализация интересовала?

Сообщение отредактировано: volvo - 22.01.2005 11:36


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Serega
сообщение 8.05.2004 21:31
Сообщение #3


Новичок
*

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

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


Если все лишнее убрать, то получится то, что тебе надо. ;)
Код

program clock;
uses crt,graph,dos;
var gb,gm,R:integer;x,y,x1,y1,u1,u,x2,y2,u2:real;
   i:integer;
   s:string[2];
   h,m,c,d,c1:word;
begin

 gb:=detect;
 initgraph(gb,gm,'c:\bp\bgi');

 R:=80;x:=320;y:=240;
    x1:=320;y1:=240;u:=-pi/2;
    x2:=320;y2:=240;

 setfillstyle(1,6);
 bar(0,300,640,480);

 setfillstyle(10,2);
 bar(0,0,640,300);

 setfillstyle(1,7);
 setcolor(7);
 sector(250,150,35,215,30,30);
 sector(390,150,325,360,30,30);
 sector(390,150,0,143,30,30);
 setlinestyle(0,0,3);
 line(250,150,270,170);
 line(390,150,370,170);
 bar(305,120,335,125);
 line(320,125,320,170);
 setlinestyle(0,0,1);
 sector(320,360,0,180,60,40);
 setfillstyle(1,6);setcolor(6);
 fillellipse(320,370,40,25);
 setfillstyle(1,7);
 fillellipse(320,240,R+20,R+20);
 setbkcolor(0);

 for i:=1 to 12 do
  begin
   u:=u+pi/6;
   x:=(R+10)*cos(u)+317;y:=(R+10)*sin(u)+237;
   str(i,s);
   outtextxy(round(x),round(y),s);
 end;

 for i:=1 to 60 do
  begin
   u:=u+pi/30;
   x:=(R+17)*cos(u)+320;y:=(R+17)*sin(u)+240;
   putpixel(round(x),round(y),1);
  end;

 for i:=1 to 12 do
  begin
   u:=u+pi/6;
   x:=(R+17)*cos(u)+320;y:=(R+17)*sin(u)+240;
   setcolor(1);
   setfillstyle(1,7);
   fillellipse(round(x),round(y),2,2);
   circle(round(x),round(y),2);
  end;
repeat
 gettime(h,m,c,d);
 if c1<>c then
  begin c1:=c;
 setcolor(7);
 line(320,240,round(x),round(y));
 line(320,240,round(x1),round(y1));
 setlinestyle(0,0,3);
 line(320,240,round(x2),round(y2));

 x2:=(R-23)*cos(u2)+320;y2:=(R-30)*sin(u2)+240;
 setcolor(9);
 line(320,240,round(x2),round(y2));
 setlinestyle(0,0,1);

 x1:=(R-15)*cos(u1)+320;y1:=(R-15)*sin(u1)+240;
 setcolor(1);
 line(320,240,round(x1),round(y1));

 x:=(R)*cos(u)+320;y:=(R)*sin(u)+240;
 setcolor(4);
 line(320,240,round(x),round(y));

 setcolor(4);
 setfillstyle(1,4);
 fillellipse(320,240,3,3);
 u:=(c+45)*pi/30;
 u1:=(m+45)*60*pi/1800;
 u2:=(h*5+m/15+45)*3600*pi/108000;
end;
until keypressed;
closegraph;
end.

По-моему это надо отправить в "Задачи"


--------------------
Не могу сидеть, когда другие работают.
Пойду полежу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Pascal
сообщение 9.05.2004 15:49
Сообщение #4





Группа: Пользователи
Сообщений: 5

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


Serega
Подскажи, где можно взять модуль dos.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 9.05.2004 18:16
Сообщение #5


Четыре квадратика
****

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

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


Модуль DOS -- встроенный модуль Паскаля (в Borland/Turbo pascal for DOS как минимум)


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Pascal
сообщение 10.05.2004 10:44
Сообщение #6





Группа: Пользователи
Сообщений: 5

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


Спасибо, у меня ещё один вопрос: где-нибудь можно взять исходники часов?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
HelpAusHeaven
сообщение 11.05.2004 2:53
Сообщение #7


Пионер
**

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

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


Какие именно тебе нужны исходники?
Тебе же привели уже программу с исходным кодом....


--------------------
Рассылка: "Решение Вами Предложенных Задач На Языке PASCAL. Алгоритмы на PASCAL."
Подписка по e-mail: comp.soft.prog.pascal123-sub@subscribe.ru
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Pascal
сообщение 11.05.2004 14:09
Сообщение #8





Группа: Пользователи
Сообщений: 5

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


Часы с этим кодом у меня бегают как бешеные.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
BlackShadow
сообщение 11.05.2004 14:36
Сообщение #9


Гость






А ты им успокоительное синсталлируй smile.gif
Пардон за флуд
 К началу страницы 
+ Ответить 
virt
сообщение 11.05.2004 15:58
Сообщение #10


Знаток
****

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

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


Pascal
а ты перед gettime поставь
Код
delay(100);


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
BlackShadow
сообщение 11.05.2004 16:26
Сообщение #11


Гость






virt, а я бы Delay и не советовал. Работает он сейчас... Ну дай бог через 10 раз...
 К началу страницы 
+ Ответить 
FreeMan
сообщение 11.05.2004 16:40
Сообщение #12


-
****

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

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


вместа дэлая юзай системный таймер по адресу $40:$6c. smile.gif


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





Группа: Пользователи
Сообщений: 5

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


Ну вроде заработало.
Спасибо всем!
Тему можно закрывать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Человечище
сообщение 19.05.2004 16:11
Сообщение #14


Гость






Нет!!!
Тему закрывать нельзя.
Может кто-нибудь предоставит решение классической задачи "ЧАСЫ".
Пусть даны целые числа m,n (часы, минуты), 0 <= m <= 11, 0 <= n <= 59, определяющие время суток. Опеределить наименьшее время (число полных минут), которое должно пройти до того момента, когда часовая и минутная стрелки:
1. совпадут
2. расположатся перпендикулярно друг другу
(программа должна быть линейной[без циклов, ветвлений])
Задача взята из задачника Усковой "Программирование на языке Паскаль".
Чего то не доходит, как её решать!!! blink.gif
 К началу страницы 
+ Ответить 
Atos
сообщение 22.05.2004 7:32
Сообщение #15


Прогрессор
****

Группа: Модераторы
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

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


Для 1. надо воспользоваться тем фактом, что 11 точек совпадения стрелок делят циферблат на 11 равных частей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 14.03.2007 20:05
Сообщение #16


Гость






а может и мне поможете? у нас в школе началось программирование в паскале... и задал нам препод очень странную задачку : надо создать часы в формате часы:минуты:секунды , чтобы было 01 , 05 ( сек мин часов) и т.д. а также чтобы можно было устанавливать время самостоятельно, был будильник... сколько пробовал сделать не получается... wacko.gif то что получилось прекреплю...


Прикрепленные файлы
Прикрепленный файл  Gmail.zip ( 676 байт ) Кол-во скачиваний: 139
 К началу страницы 
+ Ответить 
Артемий
сообщение 14.03.2007 20:26
Сообщение #17


Помощник капитана
****

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

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


Цитата
а также чтобы можно было устанавливать время самостоятельно

Но он у тебя каждый раз должен просто отсчет вперед вести (1 сек,2 сек, 3 сек, n сек) или все-таки время системное показывать?
Или ты имел ввиду настроить время для будильника?


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 14.03.2007 21:22
Сообщение #18


Помощник капитана
****

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

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


немного подделал по твоему наброску..Если не очень красиво, без обид. smile.gif
uses crt;
var i,k,m,d: integer;
f: boolean;
c: char;
dat: record
h,m,s: Integer;
end;
label 10,11;
begin
clrscr;
writeln('Press 2 to prepare the alarm clock!');
readln(d);
case d of
2: begin goto 10 end;
end;
11: for i:=0 to 23 do
begin
for k:=0 to 59 do
begin
for m:=0 to 59 do
begin
if not (2 <> d) then begin
if (i=Dat.h) and (k=Dat.m) and (m=Dat.s) then begin
gotoxy (11,11);
writeln('Stand up!');
f:=true;
break;
end;
end;
gotoxy (11,11);
delay (50000);
delay (50000);
delay (50000);
write(i,' з б®ў : ',k,' ¬Ё­гв : ',m,' ᥪ㭤');
end;
if f then break;
end;
if f then break; goto 10
end;
writeln('Do you want to exit? (y/n)');
readln( c);
case c of
'y': begin exit; end;
'n': begin writeln; end;
end;
10: writeln('Put your settings: ');
readln(Dat.h,Dat.m,Dat.s);
goto 11;


Сообщение отредактировано: Артемий2 - 14.03.2007 21:28


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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