Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
последняя курсовая Мазманян А.А.docx
Скачиваний:
2
Добавлен:
17.09.2019
Размер:
1.12 Mб
Скачать
  1. Математическое описание

Для решения данной задачи необходимо составить ее математическое описание.

Одним из возможных вариантов решения является следующий:

  1. Константа R-радиус циферблата

2. т – переменная времени, т = Now()- реальное время

3. после чего реальное время отображается в аналоговом виде:

ahr := 90 - HourOf(t)*30-(MinuteOf(Today)div 12)*6;

amin := 90 - MinuteOf(t)*6;

asec := 90 - SecondOf(Today)*6;

4. Прорисовка реального времени, циферблата, часовой, минутной и секундной стрелок часов.

5. Закрытие программы.

2.1. Алгоритм решения

Для исполнительных устройств создаются алгоритмы. Алгоритм представляет собой упорядоченную последовательность действий приводящих к решению поставленной задачи, то есть последовательность предписаний исполнителю. Число этих предписаний конечно. Исполнитель должен неукоснительно выполнять данные предписания, чтобы достичь желаемого результата. При этом поставленная задача решается за определенное число шагов.

При написании любой программы возникает необходимость в разработке алгоритма решения поставленной задачи. Его роль очень важна. Ведь он математически и логически описывает структуру программы, логические операции, выполняющиеся в процессе решения задачи, также он является точным описанием, определяющим вычислительные процессы, которые происходят в программе и ведут к ожидаемому результату.

Для решения задачи, поставленной на курсовое проектирование, мною был разработан нижеприведенный алгоритм. Данный алгоритм является однозначным и результативным.

2.2. Операторы, применяемые в программе

В процессе написания программы мною были использованы следующие операторы и управляющие конструкции языка Delphi:

Var – оператор объявления переменной

<,>,<> – операторы сравнения

+, -, /, * – математические операторы

While– Оператор цикла

Ellipse – построение окружности

Canvas - вырисовка объекта

round – oкругление до целого

DrawClock -прорисовка текущих положений стрелок часов

2.3. Разработка интерфейса

Интерфейс для данной программы выполнен с помощью интегрированной среды разработки Delphi 6.0, он включает в себя несколько компонентов оформления форм. Наиболее функциональным и значимыми является невизуальный компонент Timer. Данный компоненты является стандартными для операционной системы Microsoft Windows 2000/XP и присутствуют во множестве популярных программ.

Рис. 2. Интерфейс курсового проекта

3. Программа на языке Delphi

unit clock2_;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls;

type

TForm1 = class(TForm)

Timer1: TTimer;

procedure FormCreate(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

// эти объявления вставлены вручную

procedure Vector(x0,y0,a,l: integer);

procedure DrawClock;

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses

DateUtils; // для доступа к SecondOf,

// MinuteOf и HourOf

const

R = 75 ; // радиус циферблата часов

var

x0,y0: integer; // центр циферблата

ahr,amin,asec: integer; // положение стрелок (угол)

// инициализация формы

procedure TForm1.FormCreate(Sender: TObject);

var

t: TDateTime;

begin

// зададим размер формы

// в соответствии с размером циферблата

ClientHeight := (R+30)*2;

ClientWidth := (R+30)*2;

x0 := R+30;

y0 := R+30;

t := Now();

// положение стрелок

ahr := 90 - HourOf(t)*30-(MinuteOf(Today)div 12)*6;

amin := 90 - MinuteOf(t)*6;

asec := 90 - SecondOf(Today)*6;

Timer1.Interval := 1000; // период сигнал от таймера 1 сек

Timer1.Enabled := True; // пуск таймера

end;

// вычерчивает вектор заданной длины из точки (x0,y0)

procedure TForm1.Vector(x0,y0: integer; a, l: integer);

// x0,y0 - начало вектора

// a - угол между осью x и вектором

// l - длина вектора

const

GRAD = 0.0174532; // коэффициент пересчета угла из градусов в радианы

var

x,y: integer; // координаты конца вектора

begin

Canvas.MoveTo(x0,y0);

x := Round(x0 + l*cos(a*GRAD));

y := Round(y0 - l*sin(a*GRAD));

Canvas.LineTo(x,y);

end;

// рисует стрелки

procedure TForm1.DrawClock;

var

t: TDateTime;

begin

// шаг секундной и минутной стрелок 6 градусов,

// часовой - 30.

// стереть изображение стрелок

Canvas.Pen.Color := clBtnFace;

Canvas.Pen.Width :=3;

// часовую

Vector(x0,y0, ahr, R-20);

// минутную

Vector(x0,y0, amin, R-15);

// секундную

Vector(x0,y0, asec, R-7);

t := Now();

// новое положение стрелок

ahr := 90 - HourOf(t)*30-(MinuteOf(t)div 12)*6;

amin := 90 - MinuteOf(t)*6;

asec := 90 - SecondOf(t)*6;

// нарисовать стрелки

// часовая стрелка

Canvas.Pen.Width := 3;

Canvas.Pen.Color := clBlack;

Vector(x0,y0, ahr, R-20);

// минутная стрелка

Canvas.Pen.Width := 2;

Canvas.Pen.Color := clBlack;

Vector(x0,y0, amin, R-15);

// секундная стрелка

Canvas.Pen.Width := 1;

Canvas.Pen.Color := clYellow;

Vector(x0,y0, asec, R-7);

end;

// прорисовка циферблата и начальных стрелок

procedure TForm1.FormPaint(Sender: TObject);

var

x,y: integer; // координаты маркера на циферблате

a: integer; // угол между OX и прямой (x0,yo) (x,y)

h: integer; // метка часовой риски

bs: TBrushStyle; // стиль кисти

pc: TColor; // цвет карандаша

pw: integer; // ширина карандаша

begin

bs := Canvas.Brush.Style;

pc := Canvas.Pen.Color;

pw := Canvas.Pen.Width;

Canvas.Brush.Style := bsClear;

Canvas.Pen.Width := 1;

Canvas.Pen.Color := clBlack;

a:=0; // метки ставим от 3-х часов, против

// часовой стрелки

h:=3; // угол 0 градусов - это 3 часа

// циферблат

while a < 360 do

begin

x:=x0+Round( R * cos(a*2*pi/360));

y:=x0-Round( R * sin(a*2*pi/360));

Form1.Canvas.MoveTo(x,y);

if (a mod 30) = 0 then

begin

Canvas.Ellipse(x-2,y-2,x+3,y+3);

// цифры по большему радиусу

x:=x0+Round( (R+15) * cos(a*2*pi/360));

y:=x0-Round( (R+15) * sin(a*2*pi/360));

Canvas.TextOut(x-5,y-7,IntToStr(h));

dec(h);

if h = 0 then h:=12;

end

else Canvas.Ellipse(x-1,y-1,x+1,y+1);

a:=a+6; // 1 минута - 6 градусов

end;

// восстановить карандаш кисть

Canvas.Brush.Style := bs;

Canvas.Pen.Width := pw;

Canvas.Pen.Color := pc;

DrawClock;

end;

// прорисовка текущих положений стрелок часов

procedure TForm1.Timer1Timer(Sender: TObject);

begin

DrawClock;

end;

end.