Как написать программу часы на паскале

06. Часы на PascalABC

Для работы программы необходим файл с рисунком циферблата ( скачать ).

Рассмотрим код программы:

Program Timer;
uses crt, GraphABC;
var pic, x0,y0, x,y, R, min, sec : integer;
begin
SetWindowSize(360,480);
HideCursor;
x0:=173; y0:=300; min:=0; sec:=0;
pic:=LoadPicture(‘timer.jpg’);

DrawPicture(pic,0,0,360,480); // Рисование циферблата
sec:=sec+1;

min:= sec div 60; // секунды и минуты
x:=x0+Round(120*sin(Pi*sec/30));
y:=y0-Round(120*cos(Pi*sec/30));
SetPenWidth(3);

Line(x0, y0, x, y); // секундная стрелка
x:=x0+Round(100*sin(Pi*min/30));
y:=y0-Round(100*cos(Pi*min/30));
SetPenWidth(7);

Line(x0, y0, x, y); // минутная стрелка
sleep(1000);
until (min>=60) or keyPressed;
end.

Теперь разберемся как она работает.

Во-первых программа использует два модуля: модуль CRT — для запуска программы в отдельном окне. Во-вторых модуль GraphABC — для того, чтобы можно было вырисовывать минутную и секундную стрелки.

Как сделать игру Теннис на Паскале

Загрузка изображения часов осуществляется в два этапа: сначала с файлом изображения связывается идентификатор изображения (в нашем случае это pic ). Это делается следующим оператором: pic:=LoadPicture(‘timer.jpg’);

Далее уже в цикле происходит прорисовка изображения : DrawPicture(pic,0,0,360,480);

Оператор HideCursor; «прячет» курсор, который всегда «моргает» в левом верхнем углу окна.

Оператор x0:=173; y0:=300; min:=0; sec:=0; устанавливает центр циферблата — точку, откуда будут рисоваться стрелки, а ткже устанавливает начальное значение минут и секунд в ноль.

Работа цикла с постусловием.

Цикл repeat. until (min>=60) or keyPressed; работает пока количество минут не превысит 60 или не будет нажата какая-либо из клавиш клавиатуры.

Что происходит в теле цикла.

1. Прорисовка часов: DrawPicture(pic,0,0,360,480);

2. Увеличение количества секунд на 1: sec:=sec+1;

3. Расчет количества минут: min:= sec div 60;

4. Расчет конечных координат x и у для секундрой стрелки :

5. Прорисовка линии секундной стрелки: SetPenWidth(3); Line(x0, y0, x, y);

6. Расчет конечных координат х и у для минутной стрелки:

7. Прорисовка линии минутной стрелки: SetPenWidth(7); Line(x0, y0, x, y);

8. Задержка работы программы на 1 секунду: sleep(1000);

Читайте также:
Программы для составления межевого плана список

Небольшой видеофрагмент поможет еще досканельнее разобраться в работе программы:

Видеоурок:

Как добавить часовую стрелку в часы?

1. В области описания переменных добавить еще одну, отвечающую за количество часов, например hour .

2. После расчета количества минут добавить строку для расчета количества часов на основе количества минут:

hour:= min div 12; (здесь делим нацело уже не на 60, а на 12, т.к. часовая стрелка за один полный оборот минутной стрелки должна сместиться не на одно, а на 5 делений);

3. Далее необходимо по аналогии с секундной и минутной стрелками сделать перерасчет количества часов в координаты конца стрелки x и y. В этом же блоке необходимо учесть, что часовая стрелка должна быть еще короче минутной:

4. Выставить толщину и цвет часовой стрелки и провести линию, изображающую часовую стрелку.

5. Для того, чтобы пронаблюдать ход часов в ускоренном виде, необходимо сократить задержку с 1000 ms до 10m: sleep(10);

Вот и все. Удачи Вам в написании программы!

Источник: aaginfo.ru

Как написать программу часы на паскале

Помогите доработать часы в паскале. Нужно использовать в программе delay(задержка). У меня в программе при вставке этого оператора почему-то выдаёт ошибку, что delay-неизвестный идентификатор.

program jfj; uses graphABC; var x,y:integer; r:word; begin circle(250,250,70); circle(250,250,7); Line (250,250,210,290); Line (250,250, 290, 210); line (250,250,280,200) end.
Регистрация: 08.03.2016
Сообщений: 0
Vladimir_S
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях

Репутация: 113184

Помогите доработать часы в паскале. Нужно использовать в программе delay(задержка). У меня в программе при вставке этого оператора почему-то выдаёт ошибку, что delay-неизвестный идентификатор.

Естественно, выдает ошибку. Потому что Delay — это процедура модуля CRT, а у Вас этот модуль не присоединен.

Vladimir_S
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
Ну вот Вам часы:

program jfj; uses graph,CRT,DOS; var i:integer; X1,X2,Y1,Y2,H,M,S,S100:word; SS:String; begin REPEAT ClearDevice; SetColor(Yellow); SetLineStyle(SolidLn,0,ThickWidth); Circle(320,240,200); SetTextStyle(DefaultFont,HorizDir,2); SetTextJustify(CenterText,CenterText); For i:=1 to 12 do begin X1:=320+ROUND(180*Sin(30*i*Pi/180)); X2:=320+ROUND(200*Sin(30*i*Pi/180)); Y1:=240-ROUND(180*Cos(30*i*Pi/180)); Y2:=240-ROUND(200*Cos(30*i*Pi/180)); Line(X1,Y1,X2,Y2); X1:=320+ROUND(160*Sin(30*i*Pi/180)); Y1:=240-ROUND(160*Cos(30*i*Pi/180)); STR(i,SS); OutTextXY(X1,Y1,SS); end; SetLineStyle(SolidLn,0,NormWidth); For i:=1 to 60 do begin X1:=320+ROUND(190*Sin(6*i*Pi/180)); X2:=320+ROUND(200*Sin(6*i*Pi/180)); Y1:=240-ROUND(190*Cos(6*i*Pi/180)); Y2:=240-ROUND(200*Cos(6*i*Pi/180)); Line(X1,Y1,X2,Y2); end; SetLineStyle(SolidLn,0,ThickWidth); SetColor(LightRed); GetTime(H,M,S,S100); If H>=12 then H:=H-12; Line(320,240,320+ROUND(100*Sin(30*(H+M/60)*Pi/180)), 240-ROUND(100*Cos(30*(H+M/60)*Pi/180))); Line(320,240,320+ROUND(160*Sin(M*6*Pi/180)), 240-ROUND(160*Cos(M*6*Pi/180))); SetColor(LightBlue); Circle(320,240,10); Delay(60000); UNTIL KeyPressed; CloseGraph; END.

Читайте также:
Apc программа для настройки

Несколько замечаний:
1. Часы идут и даже показывают правильное время (если, конечно, на компьютере установлено таковое).
2. Выход из программы — нажатие любой клавиши. Правда, придется с минутку подождать, пока кончится время задержки. Установлена задержка в 1 минуту; в принципе, можно поставить и меньше.
3. Название Вашего графического модуля (поправите, если надо) и инициализация графического режима — самостоятельно (зависит от реализации Паскаля и свойств системы).

Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20

Спасибо большое. у меня кстати тоже кое-что получилось)
Проверьте пожалуйста правильно ли написана программа для этих часов.

uses CRT, graphABC, Utils; var x1,y1,xh,yh,xm,ym,xc,yc,gd,gm,X,Y,i,a:integer; n:array[0..12] of string; curTime : DateTime; s:string; procedure ShowCurArrows(ShowColor : ColorType); begin SetPenColor( ShowColor ); xc:=round(X-180*cos(pi/180*(90+6*CurTime.Second))); yc:=round(Y-180*sin(pi/180*(90+6*CurTime.Second))); line(x,y,xc,yc); xm:=round(X-155*cos(pi/180*(90+6*CurTime.Minute))); ym:=round(Y-155*sin(pi/180*(90+6*CurTime.Minute))); line(x,y,xm,ym); xh:=round(X-115*cos(pi/180*(90+6*((CurTime.Hour mod 12)*5+ CurTime.Minute div 12)))); yh:=round(Y-115*sin(pi/180*(90+6*((CurTime.Hour mod 12)*5+ CurTime.Minute div 12)))); line(x,y,xh,yh); end; begin n[1]:=’ 1′; n[2]:=’ 2′; n[3]:=’3′; n[4]:=’4′; n[5]:=’5′; n[6]:=’6′; n[7]:=’7′; n[8]:=’8′; n[9]:=’9′; n[10]:=’10’; n[11]:=’11’; n[12]:=’12’; X:=WindowWidth div 2; Y:=WindowHeight div 2; circle(X,Y,190); a:=270; for i:=1 to 60 do begin x1:=round(X-205*cos(pi/180*a)); y1:=round(Y+205*sin(pi/180*a)); a:=a+6; if (a-6) mod 30=0 then TextOut(x1-16,y1-18,n[12-(i div 5)]) else end; xh:=X; yh:=Y; xm:=X; ym:=Y; xc:=X; yc:=Y; circle(X,Y,3); circle(X,Y,6); circle(X,Y,9); repeat CurTime := CurrentDateTime; ShowCurArrows( clBlack); delay(1000); ShowCurArrows( clWhite ); until keypressed; end.

Источник: www.tehnari.ru

pascal — дата и время

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

program calc_days1; uses system; var DT: DateTime; // тип для хранения даты DS: TimeSpan; // тип для разницы дат Tpos: byte; DSS1, DSs2: string; DSI, code: integer; begin DT := DateTime.Parse(‘15.03.2001’); writeln(DT.Date); writeln(DateTime.Now — DT); DS := DateTime.Now — DT; // вычисляем разницу дат writeln(TS.Days); DSS1 := DS.ToString; // переводим разницу дат в строку writeln(DSS1); Tpos := pos(‘.’, DSS1); // находим позицию точки в строке writeln( ‘point position is: ‘, Tpos); DSS2 := copy( DSS1, 1, Tpos — 1); // копируем подстроку с первой позиции до позиции точки writeln( ‘days: ‘, DSS2); Val(DSS2, DSI, code); // преобразуем строку в число writeln( ‘days+1: ‘, DSI + 1); end.

Читайте также:
Что такое программа каденс

Задача: вычислисть количество дней от определенной даты до сегодняшней. Используем механизм вычисления разницы дат, для которого используется тип TimeSpan. Затем используем встроенную функцию, которая нам выдает количество дней. С этим числом можно производить математические операции.

program calc_days2; uses system; var DT: DateTime; TS: TimeSpan; // тип для разницы дат DDD: integer; begin DT := DateTime.Parse(‘15.03.2001’); // cтроку переводим в тип для даты writeln(DT.Date); writeln(DateTime.Now — DT); TS := DateTime.Now — DT; // вычисляем разницу дат writeln(TS.Days); DDD := TS.Days; // встроенная функция выдаёт количество дней из типа для разнцы дат writeln( ‘days: ‘, DDD); writeln( ‘days+1: ‘, DDD + 1); end.
program calc_date; uses system; var D: DateTime; begin writeln( ‘tekushee vremya: ‘, DateTime.Now.

Hour,’:’, DateTime.Now.Minute,’:’, DateTime.Now.Second,’.’, DateTime.Now.Millisecond ); writeln( ‘tekushaya data: ‘, DateTime.Now.Date ); D := DateTime.Parse( ‘02.10.2001’ ); writeln( ‘Дата из строки: ‘, D.Date ); end.

Код для FreePascal:

program calc_date; uses sysutils; var D, N: TDateTime; begin writeln( TimeToStr( StrToTime( ’18:30′ ) ) ); writeln( DateToStr( StrToDate( ‘02.10.2017’ ) ) ); N := Now; writeln( ‘tekushee vremya: ‘, TimeToStr( N ) ); writeln( ‘tekushaya data: ‘, DateToStr( N ) ); writeln( ‘tekushee vremya i data: ‘, DateTimeToStr( N ) ); D := StrToDate( ‘02.10.2001’ ); writeln( ‘raznitsa dat: ‘, DateToStr( N — D ) ); end.

Источник: sch61.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru