49230

Механические часы, показывающие текущее время

Курсовая

Информатика, кибернетика и программирование

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

Русский

2013-12-23

160.41 KB

11 чел.

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение высшего профессионального образования

«Ижевский государственный технический университет им. М.Т.Калашникова»

Кафедра АСОИУ

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по дисциплине «Программирование»

на тему «Механические часы, показывающие текущее время»

Выполнил

студент гр. Б02-782-1                                       Д.С. Карелин

Руководитель

преподаватель кафедры АСОИУ         А.С.Харина

Ижевск 2012

СОДЕРЖАНИЕ

ВВЕДЕНИЕ 3

1 АНАЛИТИЧЕСКИЙ ОБЗОР ЯЗЫКОВ ПРОГРАММИРОВАНИЯ 4

2 МАТЕМАТИЧЕСКАЯ ГЛАВА 9

3 ОПИСАНИЕ АЛГОРИТМА РАБОТЫ ПРОГРАММЫ 11

ВЫВОД 12

СПИСОК ЛИТЕРАТУРЫ 13

ПРИЛОЖЕНИЕ А. Текст программы 14

ПРИЛОЖЕНИЕ Б. Результат работы программы 18


ВВЕДЕНИЕ

Тема моей курсовой работы – механические часы, показывающие текущее время.

Задача курсовой работы  состоит в следующем: составить алгоритм, рисующий  механические часы из различных графических примитивов, а также алгоритм, который будет считывать данные о текущем времени и на основании полученных данных перерисовывать часы.

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

Одной из подзадач является создание описание алгоритма программы и составление математической модели.

Часы будут состоять из основания (круга), циферблата (числа от 1 до 12 и 48 делений), секундной, минутной и часовой стрелок.

Для написания  выбран язык программирования С++, среда  разработки Microsoft Visual Studio 2010.

1 АНАЛИТИЧЕСКИЙ ОБЗОР ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

Языки программирования можно разделить на два большие группы: объектно-ориентированные языки (С++, C#, Delphi, Java, Perl и другие)  и процедурные языки (Basic, C,  Pascal, Фортран, Ассемблер и другие).  

Рассмотрим разницу между объектно-ориентированными и процедурными языками.

Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 40-х годах [1]. Теоретической моделью процедурного программирования служит алгоритмическая система под названием «машина Тьюринга».

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

Прототипом объектно-ориентированного программирования послужил ряд средств, входящих в состав языка SIMULA-67. Но в самостоятельный стиль оно оформилось с появлением языка SMALLTALK, первоначально предназначенного для реализации функций машинной графики.

В основе объектно-ориентированного стиля программирования лежит понятие объекта, а суть его выражается формулой: «объект = данные + процедуры». Каждый объект интегрирует в себе некоторую структуру данных и доступные только ему процедуры обработки этих данных, называемые методами. Объединение данных и процедур в одном объекте называется инкапсуляцией и присуще объектно-ориентированному программированию.

Для описания объектов служат классы. Класс определяет свойства и методы объекта, принадлежащего этому классу. Соответственно, любой объект можно определить как экземпляр класса.

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

Рассмотрим некоторые языки программирования в общем и, в частности, применительно поставленной задачи.

Ассемблер – язык программирования, который относиться к процедурным языкам программирования. Так же является языком низкого уровня, т.е мнемонические команды которого (за редким исключением) соответствуют инструкциям процессора вычислительной системы.

Достоинствами ассемблера являются:

  1.  программы, написанные на ассемблере самые быстрые из всех, что возможны для процесса, для которого написан код;
  2.  непосредственный доступ к аппаратуре (порты ввода-вывод, регистры процессора);
  3.  возможность встраивания кода ассемблера в некоторые языки программирования (например C++).

Исходя из данных достоинств, ассемблер часто применяют для написания драйверов, ядер операционных систем, «прошивок»  BIOS, написания вирусов и других вредоносных программ и др.

Но, не смотря на достоинства, ассемблер имеет и свои недостатки:

  1.  программу со сложной логикой написать на ассемблере очень сложно, а порой бывает и невозможно;
  2.  код языка низкого уровня хуже читается и воспринимается, по сравнению с языками высокого уровня;
  3.  не переносимость программ, написанных на ассемблере, на другие компьютеры другой архитектуры.

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

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

Delphi – язык программирования высокого уровня. Относиться к объектно-ориентированным языкам программирования. Произошел от языка Object Pascal, который в свою очередь произошел от Turbo Pascal.

Поскольку Delphi является объектно-ориентированным языком, в нем присутствуют все особенности объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм.   

К достоинствам Delphi можно отнести:

  1.   простота изучения синтаксиса языка;
  2.   возможность использование компонентов и модулей, написанных другими программистами;
  3.   программы, написанные на Delphi, не требуется снабжать дополнительными библиотеками (например в отличие от связки C++/MFC);
  4.   быстрый браузер классов и мгновенный вывод подсказки автозавершения кода (code completion);
  5.   высокая скорость компиляции.

К недостаткам Delphi можно отнести:

  1.   малое число параметров оптимизации кода;
  2.   отсутствие гибких инструментов для метапрограммирования и шаблонного программирования;
  3.   отсутствие возможности создания кроссплатформенных приложений;
  4.   статическое присоединение (linking) библиотеки VCL и компонентов к исполняемому файлу.

В целом Delphi довольно мощный инструмент для создания приложений под Windows[2]. Среды разработки (Borland Delphi различных версий) являться визуальными, что еще больше упрощает создание приложений.

Систему Delphi относят к категории RAD-систем программирования(RADRapid Application Development, быстрая разработка приложений).

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

Delphi подходит для решения поставленной задачи (механические часы). Математические операторы являться стандартным и с ними не возникнет сложности. Стандартный класс TCanvas позволяет рисовать различные примитивы, из которых возможно построить циферблат и стрелки часов, на основании математических расчетов. При необходимости более качественной прорисовки есть возможность подключить дополнительные графические библиотеки (например OpenGL).

 C++ - относится к объектно-ориентированным языкам программирования. Произошел от языка C.

C++ сочетает свойства языков программирования высокого уровня и низкого уровня.  Он является одним из самых популярных языков программирования.

Достоинства языка С++:

  1.   второй, по скорости компиляции, язык программирования (быстрее только ассемблер);
  2.   поддержка  шаблонного программирования, перегрузки операторов и перегрузки функций;
  3.   огромное количество библиотек, как стандартных (в частности библиотека стандартных шаблонов STL), так и созданных сторонними разработчиками;
  4.   кроссплатформенность;
  5.   возможность работы на низком уровне с памятью, адресами, портами.

Недостатки языка С++:

  1.   Некоторая неудобность синтаксиса, унаследованного от С;
  2.   Иногда для создания шаблонов используется много кода;
  3.   Некоторая избыточность языка, что часто приводит к сложностям изучения.

С++ является мощным средством для создания различно программного обеспечения, операционных систем.

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

Существуют различные среды разработки, использующие язык С++. Наиболее популярными являются  Microsoft Visual Studio 2010 и Borland C++  Builder.

Система разработки Microsoft Visual Studio 2010 является одним из ведущих продуктов на рынке программного обеспечения[3]. В центре системы Microsoft Visual Studio 2010 находиться платформа .NET Framework – встроенный компонент Windows, который поддерживает создание и выполнение приложений нового поколения и веб-служб. Основными компонентами .NET Framework являются общеязыковая среда выполнения (CLR) и библиотека классов .NET Framework, включающая ADO.NET, ASP.NET, Windows Forms и Windows Presentation Foundation (WPF). Платформа .NET Framework предоставляет среду управляемого выполнения, возможности упрощенной разработки и развертывания, а также возможности интеграции с другими языками программирования.

С++ Builder – продукт фирмы Borland, предназначенные для быстрой разработки приложений на языке С++[4]. С помощью С++ Builder можно создавать Windows-программы на С++ быстро и просто. При создании используется графический интерфейс (GUI - graphical user interface). Это значит, что при создании пользовательского интерфейса используется технология grag-and-grop. При этом  скорость выполнения программ остается высокой.

Для решения поставленной задачи язык С++ прекрасно подходит. В частности предполагается использования Microsoft Visual 2010.  Для математических вычислений иметься стандартная библиотека Math, которая позволяет вычислять значения тригонометрических функций (в частности потребуется вычислять значения синусов и косинусов), логарифмических функций и проводить другие математические операции. Класс Graphics позволяет рисовать различные графические примитивы (эллипсы, линии, прямоугольники, текст и другие) на различных объектах (форма, pictureBox и другие). Если возникнет необходимость, есть возможность подключить другие графические библиотеки (Direct X, OpenGL и  другие). На мой взгляд,  Visual C++ будет наиболее удачным выбором для решения поставленной задачи.

На основании выше сказанного, я останавливаю выбор языка программирования для решения данной задачи на С++ и в частности на среде Microsoft Visual 2010. С++ является более быстрым по времени выполнения, чем Delphi, а так же имеет большее мощные средства для выполнения поставленной задачи. Для рисования  в Microsoft Visual 2010 используется класс Graphics, который имеет ряд преимуществ перед классом TCanvas, с помощью которого происходит рисование в Delphi. Это более гибкое управления кистями и способами заливки, перегруженные функции позволяют задавать примитивы различными способами, возможность вставки текста. По сравнению с ассемблером, создания часов на С++ будет более простой задачей, так как ассемблер не имеет мощных инструментов для программирования графики и для написания программы потребуется много усилий.  


2 МАТЕМАТИЧЕСКАЯ ГЛАВА

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

Основание часов – круг. Отрисовывается стандартной процедурой, с радиусом R

R = h/2,

где hвысота области рисования.

Для удобства координаты объектов будут задаваться параметрический по следующим формулам:

где  x, y – координаты в прямоугольной декартовой системе координат,

,  – начало координат в  системе OX'Y',

r – длина радиус-вектора,

– угол отклонения от оси OX'.

Начало системы OX'Y' точка (R,R), где Rрадиус круга, в котором происходит прорисовка.

Циферблат состоит из 12-ти цифр и 48 делений. Для прорисовки цифр используется стандартная процедура. Для правильного отображения цифр, повернем систему OXY' на  радиан.   Окончательная формула для координат цифр:

где R - радиус круга, в котором происходит прорисовка,

 i – цифра, которую требуется изобразить.

Для секундной и минутной стрелок используется следующая формула:

где  = 0.8 для секундной стрелки,

= 0.65 для минутной стрелки,

i  - значение текущего времени (секунд и минут соответственно).

Для часовой стрелки используется следующая формула:

где h – значение часов в текущий момент времени,

m – значение минут в текущий момент времени.


3 ОПИСАНИЕ АЛГОРИТМА РАБОТЫ ПРОГРАММЫ

Алгоритм определения текущего времени приведен в следующей блок-схеме (см. рисунок 3.1):

Рисунок 3.1. Блок-схема

ВЫВОД

Был произведен анализ существующих языков программирования, который показал, что язык С++ более подходит для выполнения данного задания, чем ассемблер или Delphi.

В ходе выполнения работы были изучены: синтаксис языка С++, способы создания графики в Microsoft Visual Studio 2010, в частности работа с классами Graphics, BufferedGraphics, BufferedGraphicsContext. Были изучены приемы работы с такими компонентами, как: Form, Label, PictureBox.

Была составлена математическая модель задачи, где описаны основные математические формулы, на основании которых была написана программа.

Кроме того, для алгоритма определения текущего времени была составлена блок-схема.

Для верификации и тестирования разработанного алгоритма была реализована программа, представляющая собой числовой циферблат часов с часовой, минутной и секундной стрелками. Кроме того предусмотрена возможность масштабирования окна пользователем. Разработка велась на языке С++ в среде программирования Microsoft Visual Studio 2010.

Программа выводит на экран часы, которые показывают текущее время (см. приложение Б).

В ходе тестов программы ошибок замечено не было.


СПИСОК ЛИТЕРАТУРЫ

  1.  Аратамонов Б.Н Основы компьютерных технологий — СПб.: КОРОНА принт, 1998. — с.448
  2.  В. М .Пестриков, А. Н. Маслобоев, Delphi на примерах. — СПб.: БХВ-Петербург, 2005. — с. 496
  3.  В.В.Зиборов MS Visual C++ 2010 в среде .NET. Библиотека программиста. – СПб.: Питер 2012.  — с. 320
  4.  Рейсдорф К., Хендерсон К. – Borland C++ Builder – М., 2000. — c.702


ПРИЛОЖЕНИЕ А

(обязательное)

Текст программы

Файл Form1.h*:

#pragma once

#include"FunctionPaint.h"

namespace Kursovuk {

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

/// <summary>

/// Сводка для Form1

/// </summary>

public ref class Form1 : public System::Windows::Forms::Form

{

public:

 Form1(void)

 {

  InitializeComponent();

  //

  //TODO: добавьте код конструктора

  //

 }

protected:

 /// <summary>

 /// Освободить все используемые ресурсы.

 /// </summary>

 ~Form1()

 {

  if (components)

  {

   delete components;

  }

 }

private: System::Windows::Forms::PictureBox^  pictureBox1;

private: System::Windows::Forms::Timer^  timer1;

private: System::Windows::Forms::Label^  label1;

private: System::ComponentModel::IContainer^  components;

 protected:

private:

 /// <summary>

 /// Требуется переменная конструктора.

 /// </summary>

#pragma region Windows Form Designer generated code

 /// <summary>

 /// Обязательный метод для поддержки конструктора - не изменяйте

 /// содержимое данного метода при помощи редактора кода.

 /// </summary>

 void InitializeComponent(void)

 {

  this->components = (gcnew System::ComponentModel::Container());

  this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());

  this->timer1 = (gcnew System::Windows::Forms::Timer(this->components));

  this->label1 = (gcnew System::Windows::Forms::Label());

  (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->BeginInit();

  this->SuspendLayout();

  //

  // pictureBox1

  //

  this->pictureBox1->Dock = System::Windows::Forms::DockStyle::Fill;

  this->pictureBox1->Location = System::Drawing::Point(0, 0);

  this->pictureBox1->Name = L"pictureBox1";

  this->pictureBox1->Size = System::Drawing::Size(384, 362);

  this->pictureBox1->TabIndex = 0;

  this->pictureBox1->TabStop = false;

  this->pictureBox1->SizeChanged += gcnew System::EventHandler(this, &Form1::pictureBox1_SizeChanged);

  this->pictureBox1->Click += gcnew System::EventHandler(this, &Form1::pictureBox1_Click);

  this->pictureBox1->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::pictureBox1_Paint);

  this->pictureBox1->MouseEnter += gcnew System::EventHandler(this, &Form1::pictureBox1_MouseEnter);

  this->pictureBox1->MouseLeave += gcnew System::EventHandler(this, &Form1::pictureBox1_MouseLeave);

  //

  // timer1

  //

  this->timer1->Interval = 1000;

  this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);

  //

  // label1

  //

  this->label1->AutoSize = true;

  this->label1->Location = System::Drawing::Point(12, 9);

  this->label1->Name = L"label1";

  this->label1->Size = System::Drawing::Size(35, 13);

  this->label1->TabIndex = 1;

  this->label1->Text = L"label1";

  this->label1->Visible = false;

  this->label1->Click += gcnew System::EventHandler(this, &Form1::label1_Click);

  //

  // Form1

  //

  this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);

  this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

  this->ClientSize = System::Drawing::Size(384, 362);

  this->Controls->Add(this->label1);

  this->Controls->Add(this->pictureBox1);

  this->DoubleBuffered = true;

  this->MaximumSize = System::Drawing::Size(1000, 700);

  this->MinimumSize = System::Drawing::Size(300, 300);

  this->Name = L"Form1";

  this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;

  this->Text = L"Form1";

  this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);

  this->Resize += gcnew System::EventHandler(this, &Form1::Form1_Resize);

  (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->EndInit();

  this->ResumeLayout(false);

  this->PerformLayout();

 }

#pragma endregion

Graphics^ GrafOut;

int R;

private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {

  this->Text = "Clock";

  timer1->Enabled=true;

  this->DoubleBuffered = true; //влючаем двойную буфферизацию 

  GrafOut = pictureBox1->CreateGraphics(); //создаем привязке GrafOut k pictureBox1

  Font = gcnew System::Drawing::Font("Times New Roman", 9.F); //устанавливаем шрифт

  pictureBox1->Height=this->Height;

  pictureBox1->Width=this->Height;

   }

private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {

    label1->Text = String::Format("{0:T}", DateTime::Now); // считываем текущее время

  int S,M,H; // текущее время

  int H1 = pictureBox1->Height;

  int W = pictureBox1->Width;

  if (pictureBox1->Height<pictureBox1->Width) R=(pictureBox1->Size.Height)/2;

  else  R=(pictureBox1->Size.Width)/2;

  if (label1->Text->Length==8)  //переводим строку со временем в переменные S,M,H

  {

   //ковертируем SystemString в std::string

   //после конвертируем std::string в Int32

   String^ Mx = Convert::ToString(label1->Text[6]);

   String^ Mxx = Convert::ToString(label1->Text[7]);

   Mx +=Mxx;

   S = Convert::ToInt32(Mx);

   Mx = Convert::ToString(label1->Text[3]);

   Mxx = Convert::ToString(label1->Text[4]);

   Mx +=Mxx;

   M = Convert::ToInt32(Mx);

   Mx = Convert::ToString(label1->Text[0]);

   Mxx = Convert::ToString(label1->Text[1]);

   Mx +=Mxx;

   H = Convert::ToInt32(Mx);

   if (H>12) H-=12;

   }

   else

   {

    String^ Mx = Convert::ToString(label1->Text[5]);

    String^ Mxx = Convert::ToString(label1->Text[6]);

    Mx +=Mxx;

    S = Convert::ToInt32(Mx);

    Mx = Convert::ToString(label1->Text[2]);

    Mxx = Convert::ToString(label1->Text[3]);

    Mx +=Mxx;

    M = Convert::ToInt32(Mx);

    Mx = Convert::ToString(label1->Text[0]);

    H = Convert::ToInt32(Mx);

   };

   PaintClock(GrafOut,S,M,H,R,W,H1); //процедура прорисовки

   

   }

private: System::Void pictureBox1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) {

    

   }

private: System::Void pictureBox1_MouseEnter(System::Object^  sender, System::EventArgs^  e) {

   label1->Visible=true; //текст с временем виден

  }

private: System::Void pictureBox1_MouseLeave(System::Object^  sender, System::EventArgs^  e) {

   label1->Visible=false; //текст с временем не виден

  }

private: System::Void Form1_Resize(System::Object^  sender, System::EventArgs^  e) {

  }

private: System::Void pictureBox1_Click(System::Object^  sender, System::EventArgs^  e) {

  }

private: System::Void label1_Click(System::Object^  sender, System::EventArgs^  e) {

  }

private: System::Void pictureBox1_SizeChanged(System::Object^  sender, System::EventArgs^  e) {

  }

};

}

FunctionPaint.cpp:

#include"stdafx.h"

#include"FunctionPaint.h"

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

void PaintClock(Graphics ^bufG, int S, int M, int H, int R, int H1, int W)

{

BufferedGraphics^ Graf; //создаем буффер

BufferedGraphicsContext^ context; // создаем контекст

Rectangle rec;

rec = Rectangle(0,0,H1,W); //допустимая область рисования

context = BufferedGraphicsManager::Current; //активируем контекст

//определяем размер буффера

context->MaximumBuffer = System::Drawing::Size(H1+1, W+1 );

Graf = context->Allocate(bufG,rec); // создаем из контеста буффер

Brush^ brush = gcnew SolidBrush(Color::White); //цвет заливки

Graf->Graphics->Clear(SystemColors::Control); //очищаем область рисования

Graf->Graphics->FillEllipse(brush, 0,0,2*R,2*R); // рисуем основу часов

brush = gcnew SolidBrush(Color::Red); // цвет заливки - красный

Pen^ pen = gcnew Pen(Color::Black); //цвет линии - черный

for (int i=1; i<13; ++i)   //рисуем цифры

{

  int a,b;

  a = R + 0.9*R*Math::Cos(i*2*Math::PI / 12 - Math::PI/2);

  b = R + 0.9*R*Math::Sin(i*2*Math::PI / 12 - Math::PI/2);

  Graf->Graphics->DrawString(i.ToString(), gcnew System::Drawing::Font("Times New Roman", 9), brush, a-6, b-6 );

};

for (int i=1; i<=60; ++i) //рисуем 48 делений

{

  if (i%5==0) continue;

  int a1,a2,b1,b2;

  a1 = R + 0.95*R*Math::Sin(i*2*Math::PI /60);

  b1 = R + 0.95*R*Math::Cos(i*2*Math::PI /60);

  a2 = R + R*Math::Sin(i*2*Math::PI /60);

  b2 = R + R*Math::Cos(i*2*Math::PI /60);

  Graf->Graphics->DrawLine(pen, a1,b1,a2,b2);

 };

int x,y; //переменные для координат

 //рисуем секундную стрелку

x = R + 0.80*R*Math::Cos(((S*Math::PI)/30)-Math::PI/2);

y = R + 0.80*R*Math::Sin(((S*Math::PI)/30)-Math::PI/2);

Graf->Graphics->DrawLine(pen, R,R,x,y);

 //рисуем минутную стрелку

pen->Width = 2; //толщина стрелки - 2 пикселя

 pen->Color = Color::Blue; //цвет стрелки - голубой

x = R + 0.65*R*Math::Cos(((M*Math::PI)/30)-Math::PI/2);

y = R + 0.65*R*Math::Sin(((M*Math::PI)/30)-Math::PI/2);

Graf->Graphics->DrawLine(pen, R,R,x,y);

//рисуем часовую стрелку

x = R + 0.50*R*Math::Cos(((H*Math::PI)/6)+(M*Math::PI/360)-Math::PI/2);

y = R + 0.50*R*Math::Sin(((H*Math::PI)/6)+(M*Math::PI/360)-Math::PI/2);

pen->Width = 3; // толщина 3 пикселя

pen->Color = Color::Green; //цвет - зеленый

Graf->Graphics->DrawLine(pen, R,R,x,y);

 Graf->Render(bufG); //выводим изображение на pictureBox1

};


ПРИЛОЖЕНИЕ Б

(обязательное)

РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ

На рисунках ПБ.1 и ПБ.2 представлен результат работы программы:

Рисунок ПБ.1. Результат работы программы

Рисунок ПБ.2. Результат работы программы


 

А также другие работы, которые могут Вас заинтересовать

41498. ОПЕРАТИВНОЕ ПЛАНИРОВАНИЕ, УПРАВЛЕНИЕ И РУКОВОДСТВО РАБОТОЙ СТАНЦИИ 232 KB
  Оперативное планирование работы станции. Автоматизация текущего планирования работы станции АСТП. Оперативное руководство работой станции 1. План работы смены вступающий на дежурного во второй половине суток, оставляют с учетом итогов работы первой смены и обеспечения выполнения всего суточного плана.
41499. ОРГАНИЗАЦИЯ РАБОТЫ СТАНЦИЙ. ОБЩИЕ СВЕДЕНИЯ ОБ УСТРОЙСТВЕ И РАБОТЕ СТАНЦИЙ 162.5 KB
  К раздельным пунктам относятся: станции разъезды обгонные пункты путевые посты а при автоблокировке и проходные светофоры. Коммерческие операции: прием взвешивание хранение и выдача грузов; оформление перевозочных документов взимание провозных платежей; пломбирование вагонов; обеспечение сохранности грузов находящихся на станции; осмотр прибывающих и отправляющих составов в коммерческом отношении. В зависимости от основного назначения и характера работы станции делятся на промежуточные участковые сортировочные грузовые и...
41500. ОСНОВЫ УПРАВЛЕНИЯ ЭКСПЛУАТАЦИОННОЙ РАБОТОЙ ЖЕЛЕЗНЫХ ДОРОГ 123 KB
  Основные принципы организации движения. Железнодорожный транспорт занимает ведущее место среди всех видов транспорта автомобильный воздушный речной морской трубопроводный это определяется следующими положениями: 1 железнодорожный транспорт работает непрерывно в течении года и суток осуществляя массовую перевозку народнохозяйственных грузов пассажиров; 2железнодорожный транспорт участвует в различных фазах производственного процесса: в начальной если перевозят сырьё исходные материалы; в средней если перевозят комплектующее...
41502. РАБОТА СТАНЦИИ В ЗИМНИХ УСЛОВИЯХ 49.5 KB
  Ремонт оборудования сортировочных горок устройств СЦБ и связи и наружного освещения на горках капитальный ремонт замедлителей воздухопроводной сети компрессорного оборудования в устройствах СЦБ – ремонт стрелочных переводов гарнитуры; в устройствах связи – громкоговорящей связи в первую очередь пополнение количества динамиков; выправка профилей сортировочных горок вытяжек и сортировочных путей; эти работы являются очень ответственными трудоемкими и поэтому на практике не редко не производятся это приводит к замедлению темпа...
41503. ОСНОВНЫЕ ПОКАЗАТЕЛИ, УЧЕТ И АНАЛИЗ РАБОТ СТАНЦИИ 236.5 KB
  Основные показатели работы станции. Учет работы станции формы учета и отчетности. Анализ работы станции.
41504. Провозная и пропускная способность железных дорог 37.5 KB
  Провозная способность прямо пропорциональна пропускной способности участка и массе составов поездов а также существенно зависит от конструктивных схем и параметров вагонов. Провозная способность увеличивается с понижением коэффициента тары вагонов улучшением использования их грузоподъемности. Расчеты ВНИИЖТа показывают что массовое применение восьмиосных полувагонов и цистерн габаритов Тпр и Тц позволяет увеличить провозную способность железных дорог на 18 .
41505. ТЕХНОЛОГИЯ ОБРАБОТКИ ТРАНЗИТНЫХ ВАГОНОВ С ПЕРЕРАБОТКОЙ. РАБОТА ПАРКА ПРИЁМА 206.5 KB
  Телетайпы устанавливаются в ИЦ станции расположенным обычно рядом с СТЦ. Таким образом до прибытия поезда СТЦ получает точную информацию о составе поезда в виде ТГНЛ в которой в порядке размещения в составе содержатся основные сведения о вагонах: его номер вес груза и наименование станция назначения получатель особые отметки. Оператор СТЦ различает полученную телеграмму натурку в соответствии с планом формирования поездов данной станции. Станция обычно получает 3 экземпляра натурки после разметки один экземпляр передается сначала...
41506. ТЕХНОЛОГИЯ РАБОТЫ ПАРКОВ ОТПРАВЛЕНИЯ 144.5 KB
  На сортировочной станции А производится смена поездных локомотивов у всех поездов как транзитных так и прибывших в расформирование. На сортировочной станции Б четные и нечетные поезда отправляются с локомотивами депо 1; у транзитных поездов смена локомотивов не производится только смена бригад. Могут быть любые другие сочетания участков обращения локомотивов с участками работы локомотивных бригад. В зависимости от схемы обслуживания поездов поездными локомотивами и локомотивными бригадами на сортировочных станциях с локомотивами могут...