49230

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

Курсовая

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

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

Русский

2013-12-23

160.41 KB

9 чел.

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

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

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

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

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

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

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

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

Выполнил

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


 

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

23055. Моделювання цифрових логічних схем 178.5 KB
  Перелічимо деякі логічні ІМС 74ї серії: 74x00 базовий елемент 2ІНЕ 74x10 логічний елемент 3ІНЕ 74x20 логічний елемент 4ІНЕ 74x30 логічний елемент 8ІНЕ 74x02 логічний елемент 2АБОНЕ 74x27 логічний елемент 3АБОНЕ 74x08 логічний елемент 2І 74x32 логічний елемент 2АБО 74x04 інвертор логічний елемент НЕ 74x51 логічний елемент 2І2АБОНЕ 74x86 логічний елемент Виключне АБО на 2 входи Пакет OrCAD дозволяє провести суто цифрове моделювання для даного вузла схеми якщо до цього вузла під’єднані лише входи та виходи...
23056. Роль та повноваження Ради національної безпеки України в системі забезпечення національної безпеки 40.5 KB
  Роль та повноваження Ради національної безпеки України в системі забезпечення національної безпеки. Це випливає із Закону України Про Раду національної безпеки.подає пропозиції Президентові України щодо .визначення стратегічних національних інтересів України концептуальних підходів та напрямів забезпечення національної безпеки і оборони у політичній економічній соціальній військовій науковотехнологічній екологічній інформаційній та інших сферах проектів державних програм доктрин .
23057. Стратегія національної безпеки України: основні положення та проблеми формування 38 KB
  Стратегія національної безпеки України: основні положення та проблеми формування. ТЕМА: Стратегія національної безпеки Стратегія – чітко вивірений шлях і напрям досягнення мети. Стратегія національної безпеки – це система державнополітичних рішень головних напрямків діяльності у сфері безпеки послідовна реалізація яких забезпечує досягнення мети головна лінія що дозволяє забезпечити безпеку на певний період спрямована на досягнення середньострокових та довгострокових інтересів. В НАТО змінено пріоритет безпеки на поширення зони...
23058. Загрози національній безпеці України у політичній сфері та шляхи їх нейтралізації 40 KB
  Загрози національній безпеці України у політичній сфері та шляхи їх нейтралізації. Загрози у внутрішньополітичній сфері: порушення з боку органів державної влади та органів місцевого самоврядування Конституції і законів України прав і свобод людини і громадянина в тому числі при проведенні виборчих кампаній недостатня ефективність контролю за дотриманням вимог Конституції і виконанням законів України; можливість виникнення конфліктів у сфері міжетнічних і міжконфесійних відносин радикалізації та проявів екстремізму в діяльності деяких...
23059. Загрози національній безпеці України в економічній сфері та шляхи їх подолання 38 KB
  Загрози в економічній сфері: істотне скорочення внутрішнього валового продукту зниження інвестиційної та інноваційної активності і науковотехнічного та технологічного потенціалу скорочення досліджень на стратегічно важливих напрямах інноваційного розвитку; ослаблення системи державного регулювання і контролю у сфері економіки; нестабільність у правовому регулюванні відносин у сфері економіки в тому числі фінансової фіскальної політики держави; відсутність ефективної програми запобігання фінансовим кризам; зростання...
23060. Загрози національній безпеці України в соціальній сфері та шляхи їх подолання 22 KB
  Загрози у соціальній та гуманітарній сферах: невідповідність програм реформування економіки країни і результатів їх здійснення визначеним соціальним пріоритетам; неефективність державної політики щодо підвищення трудових доходів громадян подолання бідності та збалансування продуктивної зайнятості працездатного населення; криза системи охорони здоров'я і соціального захисту населення і як наслідок небезпечне погіршення стану здоров'я населення; поширення наркоманії алкоголізму соціальних хвороб; загострення демографічної кризи;...
23061. Загрози національній безпеці України у воєнній сфері та шляхи їх нейтралізації. Воєнна доктрина України 39 KB
  Воєнна доктрина України. Загрози у воєнній сфері та сфері безпеки державного кордону України: поширення зброї масового ураження і засобів її доставки; недостатня ефективність існуючих структур і механізмів забезпечення міжнародної безпеки та глобальної стабільності; нелегальна міграція; можливість втягування України в регіональні збройні конфлікти чи у протистояння з іншими державами; нарощування іншими державами поблизу кордонів України угруповань військ та озброєнь які порушують співвідношення сил що склалося; небезпечне...
23062. Загрози національній безпеці України в екологічній сфері та шляхи їх нейтралізації 24 KB
  Загрози в екологічній сфері: значне антропогенне порушення і техногенна перевантаженість території України зростання ризиків виникнення надзвичайних ситуацій техногенного та природного характерів; нераціональне виснажливе використання мінеральносировинних природних ресурсів як невідновлюваних так і відновлюваних; неподоланність негативних соціальноекологічних наслідків Чорнобильської катастрофи; погіршення екологічного стану водних басейнів загострення проблеми транскордонних забруднень та зниження якості води; загострення...
23063. Чорнобильська катастрофа як загроза екологічній безпеці України 53 KB
  Україну на цій зустрічі представив Міністр з питань надзвичайних ситуацій та у справах захисту населення від наслідків Чорнобильської катастрофи Василь Дурдинець який виступив із промовою. Також він наголосив на основних аспектах Чорнобильської проблематики. Це було сказано Президентом України Леонідом Даниловичем Кучмою у зверненні з нагоди закриття Чорнобильської АЕС 15 грудня 2000 року. За останні десять років коли Україна самостійно фінансує витрати на ліквідацію наслідків Чорнобильської катастрофи питома вага витрат на ці цілі не...