Uploaded by ugf

Лабораторная работа по программированию

advertisement
1
Пензенский государственный университет
Факультет вычислительной техники
Кафедра «Информационно-вычислительные системы»
Работа с графикой
Отчет о лабораторной работе № 4
по дисциплине «Программирование»
Выполнил: студент гр.19ВО1
Иванов А.A.
Проверил: к.т.н доцент каф. ИВС
Убиенных Г.Ф.
2020
2
1 Постановка задачи
Приложение должно выводить изображение колеблющегося согласно
за-конам физики маятника. Интерфейс приложения должен позволять задавать начальное отклонение маятника, значение коэффициента затухания,
запуск маятника, остановка маятника.
2 Техническое задание
2.1
Введение
Программа
«Модель
затухающего
математического
маятника»
применяется для визуального представления колебательных движений
математического маятника
2.2
Основания для разработки
Разработка
программы
«Модель
затухающего
математического
маятника» ведётся на основании документа «Варианты заданий к
лабораторным работам по дисциплине “Программирование”. Темой
разработки является работа с объектами классов в среде Borland C++
Builder.
2.3
Требования к программе
Программа должна:
1)
Предоставлять возможность пользователю вводить коэффициент
затухания;
2)
Предоставлять возможность пользователю вводить угол начального
отклонения;
3
3)
Если пользователь вводит значение, которое не является числом,
программа должна выдавать сообщение «Ошибка, повторите ввод»
4)
Если пользователь вводит значение начального отклонения меньше 1
или больше 90, то выводится сообщение «Введите угол от 1 до 180
градусов»;
5)
Обеспечивать запуск маятника с введенными параметрами нажатием
на кнопку «Пуск»;
6)
Обеспечивать остановку маятника нажатием на кнопку «Пауза»;
7)
Обеспечивать возобновление движения маятника с текущими
значениями коэффициента затухания и углом начального отклонения
нажатием на кнопку «Возобновить»;
2.4
Стадии и этапы разработки
Разработка программы включает в себя следующие стадии :
Техническое задание.
Постановка задачи. Обоснование необходимости разработки программы.
Обоснование требований к разрабатываемой программе и методов
проверки выполнения этих требований.
Рабочий проект.
Для решения поставленной задачи необходимо первоначально разработать
алгоритм
решения
программы.
Алгоритм
должен
выполнять
все
требования к программе и быть оформлен в виде блок-схемы. По
разработанному алгоритму требуется написать программу на языке C++.
Написанную
программу
тестируют
на
соответствие
требованиям
технического задания. По результатам проверки делается вывод о
соответствии требованиям технического задания. На удовлетворяющую
требованиям программу создаётся документация.
4
2.5
Порядок контроля и приёмки
Проверка работы программы производится путём ручного
подсчета. Если результаты работы программы совпадают с требуемыми
результатами, то это доказывает то, что программа удовлетворяет
требованиям технического задания.
3 Логическая структура
3.1
Описание логической структуры
Для решения поставленной задачи необходимо разработать
следующие классы: TForm1, TTimer, TImage, TButton, TLabel, TEdit.
Диаграмма классов представлена на рисункех 1.
TTimer
+enabled, +interval
TForm1
+caption, +top, +left
TEdit
+text
+__fastcall TForm1(TComponent*
Owner);
TForm1::Timer1Timer(TObject
*Sender)
Button2Click()
Button2Click()
Button3Click
FormCreate()
TLabel
TImage
+color, +width, +heigth,
+left, +top
+MoveTo(int, int)
+LineTo(int, int)
+Rectangle(int, int, int ,int)
+Ellipse(int, int ,int ,int )
Рисунок 1 – Диаграмма классов
TButton
5
Для выполнения поставленной задачи разработан класс TForm1.
Класс TForm1 имеет следующие атрибуты:
caption- текст на заголовке формы,
top – отступ от экрана сверху,
left – отступ от экрана слева.
Класс Tform1 имеет следующие методы:
Конструктор формы __fastcall TForm1(TComponent* Owner).
__fastcall TForm1::Timer1Timer(TObject *Sender)
- Обработчик
таймера
Button1Click() – Обработчик нажатия на кнопку «Пуск»
Button2Click() – Обработчик нажатия на кнопку «Пауза»
Button3Click() – Обработчик нажатия на кнопку «Возобновить»
FormCreate() – Обработчик создания формы
Класс TTimer является потомком класса TForm1. Он имеет
следующие атрибуты:
enabled – состояние включенности/выключенности таймера,
interval – интервал срабатывания таймера.
Класс TEdit является потомком класса TForm1. Он имеет
следующие атрибуты:
text – текст, находящийся в поле редактора.
Класс TLabel является потомком класса Tform1.
Класс TButton является потомком класса Tform1.
Класс TImage имеет следующие атрибуты:
color – текст, находящийся в поле редактора.
width – текст, находящийся в поле редактора.
heigth – текст, находящийся в поле редактора.
left – текст, находящийся в поле редактора.
top – текст, находящийся в поле редактора.
6
Класс TImage имеет следующие методы:
MoveTo(int, int)
LineTo(int, int)
Rectangle(int, int, int ,int)
Ellipse(int, int ,int ,int )
7
Рисунок 2 – Схема обработчик таймера__fastcall
TForm1::Timer1Timer(TObject *Sender) - Обработчик таймера
В
методе
выполняется
интервала
маятника
и
увеличение
интервала(Блок 2). Далее проверяется условие(блок 3) — если угол меньше
PI/2,то угол наклона расчитывается по формуле ax=l*sin(PI/2) (блок 4), иначе - по
ax=l*sin(fi)
(Блок 5). Далее выполняются рассчеты остальных величин,
необходимых для отрисовки маятника(Блок 6), после этого выполняется
отрисовка маятника(Блок 7-8)
8
Рисунок 3 – Схема обработчика нажатия на кнопку «Пуск»
Button1Click()
В методе выполняется преобразование строки из Edit1 к числу
float(блок 2), если преобразование не удалось — выполняется вывод
сообщения(Блок 4), иначе выполняется преобразование строки из edit2 к
числу(блок 3), если преобразование не удаловь - ыполняется вывод
сообщения(Блок 4), иначе выполняется проверка условие(блок 5) – если fi>=1.0
и fi<=90.0, то выполняется расчет нового значения fi(блок 6), иначе выполняется
вывод сообщения (блок 7)
9
Рисунок 4 – Схема обработчика нажатия на кнопку «Пауза»
Button2Click()
В методе выполняется отключение таймера(Блок 2)
Рисунок 4 – Схема обработчика нажатия на кнопку «Возобновить»
Button3Click()
В методе выполняется включение таймера(Блок 2)
10
Рисунок 5 – Схема обработчика создания формы FormCreate()
В методе выполняется отключение таймера(Блок 2)
4. Описание программы
4.1
Общие сведения
Программа «Модель затухающего математического маятника»
создана на языке C++ в среде разработки Borland C++ Builder и
предназначена для выполнения в операционной системе Microsoft
Windows 7.
4.2
Функциональное назначение
Программа «Модель затухающего математического маятника»
визуализирует колебательные движения маятника.
11
4.3
Текст
Описание интерфейса программы
программы
«Модель
затухающего
математического
маятника» представлен в приложении А.
Программа состоит из единственного модуля Form1.
На форме модуля Form1 расположены следующие объекты:
Два однострочных редактора Edit1(для ввода коэффициента
затухания), Edit2(для ввода угла начального отклонения).
Таймер Timer1(для движения маятника во времени).
Три
кнопки
Button1(запуск
маятника),
Button2(остановка
маятника), Button3(возобновление движения маятника с
текущими
параметрами).
Обьект Image1(полотно для визуализации движения маятника).
Три метки label1...label3 для вывода пояснений пользователю.
12
5 Программа и методика испытаний.
5.1
Объект испытаний
Программа «Модель затухающего математического маятника».
5.2
Цель испытаний
Испытания проводятся с целью выявления ошибок, недочётов в
работе программы и проверки соответствия программы требованиям
технического задания.
5.3
Методы испытаний
Для проверки правильности работы программы необходимо
запустить ее на выполнение, ввести тестовые значения коэффициента
затухания и угла начального отклонения . После этого нажать на кнопку
Button 1 “Пуск”. На экране появится результат работы программы. При
работе программы с тестовым набором данных получены результаты,
приведенные в приложении Б на рисунке Б.1 . Таким образом, можно сделать
вывод, что программа соответствует требованиям.
13
Выводы
В ходе выполнения лабораторной работы было сформулировано
техническое задание, разработан алгоритм программы,
использующий
возможности Borland C++ Builder по работе с классами, для решения
поставленной задачи.
По алгоритму, на языке программирования C++ была написана
программа, решающая поставленную задачу по визуализации динамики
математического маятника
Были проведены испытания программы, которые позволили
проверить
соответствие
работы
программы
всем
требованиям
показали,
что
программа
Технического Задания.
Проведенные
испытания
удовлетворяет требованиям технического задания.
Оформлена документация, содержащая в себе описание
требований к программе, методы тестирования программы, алгоритм
решения задачи, описание и результаты тестирования программы,
описание
работы
с
программой,
текст
программы,
выводы
по
проведённой работе, приложения к документации.
Требования Технического Задания выполнены в полном объёме.
14
ТЕКСТ ПРОГРАММЫ
Приложение А
(обязательное)
15
//Unit1.h--------------------------------------------------------------------------#ifndef Unit1H
#define Unit1H
//--------------------------------------------------------------------------#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//--------------------------------------------------------------------------class TForm1 : public TForm
{
__published: // IDE-managed Components
TImage *Image1;
TTimer *Timer1;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TEdit *Edit1;
TEdit *Edit2;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private:
// User declarations
public:
// User declarations
__fastcall TForm1(TComponent* Owner);
};
//--Unit1.cpp------------------------------------------------------------------------extern PACKAGE TForm1 *Form1;
//--------------------------------------------------------------------------//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include "Unit1.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
#define PI 3.14159265
TForm1 *Form1;
float w=1, a=60*PI/180, k, t=100, fi, l=200, ax, ay, fl=1;
float x=250 + l*sin(fi);
float y=310 - l*cos(fi);
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (TryStrToFloat(Edit1->Text, k)) ;
else
{
//Êíîïêà Ïóñê
16
Edit1->Text="Îøèáêà, ïîâòîðèòå ââîä";
return;
}
if (TryStrToFloat(Edit2->Text, fi))
if (fi>=1.0 && fi<=180.0) ;
else {
Edit2->Text="Ââåäèòå óãîë îò 1 äî 180 ãðàäóñîâ";
return;
}
else
{
Edit2->Text="Îøèáêà, ïîâòîðèòå ââîä";
return;
}
fi=fi*PI/180;
t=0;
Timer1->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender)
//Îáðàáîò÷èê ñîáûòèÿ òàéìåðà
{
fi=fi*exp(-k*t/100000);
Timer1->Interval=10;
t=t+100;
if (fi>PI/2)
ax=l*sin(PI/2);
else
ax=l*sin(fi);
ay=100 + l*cos(fi);
x=290 - ax*cos(PI + w*t/1000 );
y=ay + abs((300-ay)*sin(w*t/1000));
Image1->Canvas->Brush->Color=clWhite;
Image1->Canvas->Rectangle(0, 0, Image1->Width, Image1->Height);
Image1->Canvas->Rectangle(240, 90, 340, 100);
Image1->Canvas->MoveTo(290, 100);
Image1->Canvas->LineTo(x, y);
Image1->Canvas->Brush->Color=clBlue;
Image1->Canvas->Ellipse(280 + ax*sin(PI/2 + w*t/1000 ), ay-10 + abs((300-ay)*sin(w*t/1000)), 300 +
ax*sin(PI/2 + w*t/1000 ),ay +10+ abs((300-ay)*sin(w*t/1000)) );
Image1->Canvas->Pen->Color=clBlack;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
//Êíîïêà Ïàóçà
{
Timer1->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender)
//Êíîïêà Âîçîáíîâèòü
{
Timer1->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Timer1->Enabled=false;
}
//---------------------------------------------------------------------------
17
РЕЗУЛЬТАТЫ ИСПЫТАНИЙ
Приложение Б
(обязательное)
18
Рисунок Б.1
Download