49230

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

Курсовая

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

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

Русский

2013-12-23

160.41 KB

14 чел.

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

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

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

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

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

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

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

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

Выполнил

студент гр. Б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. Результат работы программы


 

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

43977. Телекомунікації. Методичні вказівки 286 KB
  Дипломна робота на здобуття ступеня бакалавра по напряму 6.0924 «Телекомунікації» ставить за мету систематизацію, закріплення і розширення отриманих в процесі навчання теоретичних і практичних знань, а також оцінку підготовленості студентів до самостійної і ефективної роботи в умовах науково-технічного прогресу, економічного і культурного розвитку суспільства.
43978. Способи обробки субпродуктів. Особливості зберігання продуктів 1.35 MB
  Загальна характеристика субпродуктів 3. Способи обробки субпродуктів 5. Удосконалено технологічні процеси приготування напівфабрикатів з субпродуктів у процесі правильної технології їх виробництва первинної і теплової обробки відповідних субпродуктів. Розробляються і використовуються нові електрофізичні біотехнічні і ферментативні методи обробки субпродуктів.
43979. ОДЕРЖАННЯ ГАЛОГЕНІЗОТІОЦІАНАТІВ ТА ДОСЛІДЖЕННЯ ЇХ ВЗАЄМОДІЇ З ГІДРОКСИБЕНЗАЛЬДЕГІДАМИ 2.41 MB
  Дотримання правил техніки безпеки є обовязковим для кожного працівника під час роботи в хімічній лабораторії. Більш досвідчені працівники мають створювати такі умови праці в лабораторії при яких було б неможливе недбале ставлення до вимог техніки безпеки. До роботи в хімічній лабораторії допускаються особи які пройшли медичне обстеження та інструктаж з техніки безпеки.
43980. Исследование вопросов оформления и учета операций в иностранной валюте банками Республики Беларусь и разработка путей их развития 403 KB
  Понятие и сущность операций в иностранной валюте. Внебиржевой порядок Основные направления развития операций в иностранной валюте в Республике Беларусь. Целью работы является исследование вопросов оформления и учета операций в иностранной валюте банками Республики Беларусь и разработка путей их развития. Исходя из поставленной цели предметом работы является порядок оформления и учета операций в иностранной валюте банками Республики Беларусь.
43981. Правила складання і оформлення актів 240.5 KB
  Сукупність взаємоповязаних документів, які застосовуються у певній сфері діяльності, становить систему документації. Нині діють уніфіковані системи. Однією з найпоширеніших є організаційно - розпорядча документація (ОРД), використовувана в оформленні управлінських рішень.
43982. Цифровая система видеонаблюдения 2.38 MB
  С развитием цифровых технологий эта задача может быть решена внедрением системы видеонаблюдения английская аббревиатура CCTV Closed Circuit TeleVision Системы замкнутого телевидения. В зависимости от типа используемого оборудования системы видеонаблюдения делят на аналоговые и цифровые. Аналоговые системы видеонаблюдения используют там где необходимо организовать видеонаблюдение в небольшом числе помещений и информацию с видеокамер записывать на видеомагнитофон. Для обеспечения безопасности особо ответственных или...
43983. Организация автоматизированного учета и контроля деятельности религиозных организаций с использованием ПЭВМ (на примере администрации Октябрьского р-на г. Минска) 12.1 MB
  Данная активизация устанавливает определенные проблемы по традиционному учету деятельности религиозных организаций. Целью данной дипломной работы является организация автоматизированного учета и контроля деятельности религиозных организаций с использованием ПЭВМ на примере администрации Октябрьского рна г. Целью данной дипломной работы является организация автоматизированного учета и контроля за деятельностью религиозных организаций на примере администрации Октябрьского рна г. В связи с поставленной целью были намечены следующие задачи: ...
43984. Кредитование во внешнеторговой деятельности 288.5 KB
  Средства для международного кредита мобилизуются на международном рынке ссудных капиталов, на национальных рынках ссудного капитала, а также за счет использования ресурсов государственных, региональных и международных организаций. Размер кредита и условия его представления фиксируются в кредитном соглашении (договоре) между кредитором и заемщиком
43985. Банковская система. Банковские риски и методы их регулировани 701 KB
  В первом случае речь идет о шансах получения прибыли а во втором о рисках. Предоставляя ссуды коммерческий банк исходит прежде всего из рыночных критериев прибыльности риска и ликвидности. Значение посреднической функции коммерческих банков для успешного развития рыночной экономики состоит в том что они своей деятельностью уменьшают степень риска и неопределенности в экономической системе. Именно такая неопределенность и повышенный уровень риска это плата за полученную экономическую свободу хотя имеющаяся экономическая свобода еще...