Разработка приложения для работы с математическими функциями

Обоснование выбора средства программирования. Входная и выходная информация. Аппаратные и системные требования. Описание общего алгоритма решения. Описание файлов и главной формы проекта, основных функций приложения. Работа с математическими функциями.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 04.10.2017
Размер файла 211,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

СОДЕРЖАНИЕ

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. ПОСТАНОВКА ЗАДАЧИ

1.1 Цели и задачи курсовой работы

1.2 Обоснование выбора средства программирования

1.3 Входная и выходная информация

1.4 Аппаратные и системные требования

2. СВЕДЕНИЯ О ЯЗЫКЕ C++

2.1 Краткая теория о С++

2.2 Работа с графиками

3. ОБОБЩЕННАЯ СХЕМА ПРОГРАММЫ

3.1 Описание общего алгоритма решения

3.2 Обобщенная схема программы

4. ОПИСАНИЕ ПРОГРАММЫ

4.1 Описание файлов проекта

4.2 Описание главной формы проекта

4.2 Описание MyForm.h

4.3 Описание основных функций приложения

5. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЕ 1

ПРИЛОЖЕНИЕ 2

ВВЕДЕНИЕ

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

Объектом курсовой работы является приложение для работы с математическими функциями.

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

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

1. ПОСТАНОВКА ЗАДАЧИ

1.1 Цели и задачи курсовой работы

Цель курсовой работы: создать приложения для реализации построения графиков математических функций в среде Visual Studio 2015 C++.

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

1. Четко и ясно определить функции приложения.

2. Осуществить теоретический анализ научной и методической литературы для создания вышеупомянутого приложения.

3. Освоить основы программирования в Visual Studio 2015 C++.

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

5. Изучить функции по реализации приложения для реализации построения графиков.

6. Разработать приложения для реализации построения графиков математических функций.

1.2 Обоснование выбора средства программирования

Курсовая работа направлена на улучшение навыков программирования на языке С++. Это реализуется в процессе разработки приложения для реализации построения графиков математических функций.

Для написания этой программы была выбрана среда программирования Visual Studio C++ 2015, так как она отличается высокой эффективностью, удобством и надежностью. К тому же Visual предоставляет широкие возможности для создания понятного интерфейса.

1.3 Входная и выходная информация

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

Выходной информацией выступает построенный программой график, который соответствует введенной пользователем функции.

1.4 Аппаратные и системные требования

Для полноценного функционирования программы необходим компьютер фирмы IBM или совместимый с ним, с объёмом оперативной памяти не менее 2 Гб.

Частью системного обеспечения приложения является операционная система Windows XP или более поздняя.

2. СВЕДЕНИЯ О ЯЗЫКЕ C++

2.1 Краткая теория о С++

Язык С (читается "Си") создан в начале 70х годов, когда Кен Томпсон и Дэннис Ритчи из Bell Labs разрабатывали операционную систему UNDC. Сначала они создали часть компилятора С, затем использовали ее для компиляции остальной части компилятора С и, наконец, применили полученный в результате компилятор для компиляции UNIX. Операционная система UNIX первоначально распространялась в исходных кодах на С среди университетов и лабораторий, а получатель мог откомпилировать исходный код на С в машинный код с помощью подходящего компилятора С.

Распространение исходного кода сделало операционную систему UNIX уникальной; программист мог изменить операционную систему, а исходный код мог быть перенесен с одной аппаратной платформы на другую. Сегодня стандарт POSIX определяет стандартный набор системных вызовов UNIX, доступных в С, которые должны быть реализованы в версиях UNIX, являющихся POSIX-совместимыми. С был третьим языком, который разработали Томсон и Ритчи в процессе создания UNIX; первыми двумя были, разумеется, А и В.

По сравнению с более ранним языком -- BCPL, С был улучшен путем добавления типов данных определенной длины. Например, тип данных int мог применяться для создания переменной с определенным числом битов (обычно 16), в то время как тип данных long мог использоваться для создания целой переменной с большим числом битов (обычно 32). В отличие от других языков высокого уровня, С мог работать с адресами памяти напрямую с помощью указателей и ссылок. Поскольку С сохранил способность прямого доступа к аппаратному обеспечению, его часто относят к языкам среднего уровня или в шутку называют "мобильным языком ассемблера".

Что касается грамматики и синтаксиса, то С является структурным языком программирования. В то время как многие современные программисты мыслят в категориях классов и объектов, программисты на С думают в категориях процедур и функций. В С можно определить собственные абстрактные типы данных, используя ключевое слово struct. Аналогично можно описывать собственные целые типы (перечисления) и давать другие названия существующим типам данных при помощи ключевого слова typedef. В этом смысле С является структурным языком с зародышами объектно-ориентированного программирования.

Широкое распространение языка C на различных типах компьютеров (иногда называемых аппаратными платформами) привело, к сожалению, ко многим вариациям языка. Они были похожи, но несовместимы друг с другом. Это было серьезной проблемой для разработчиков программ, нуждавшихся в написании совместимых программ, которые можно было бы выполнять на нескольких платформах. Стало ясно, что необходима стандартная версия C. В 1983г. ANSI (Американский Национальный Комитет Стандартов) сформировал технический комитет X3J11 для создания стандарта языка C (чтобы "обеспечить недвусмысленное и машинно-независимое определение языка"). В 1989 стандарт был утвержден. ANSI скооперировался с ISO (Международной Организацией Стандартов), чтобы стандартизовать C в международном масштабе; совместный стандарт был опубликован в 1990 году и назван ANSI/ISO 9899:1990. Этот стандарт совершенствуется до сих пор и поддерживается большинством фирм разработчиков компиляторов.

Бьерн Страуструп высвободил объектно-ориентированный потенциал С путем перенесения возможностей классов Simula 67 в С. Первоначально новый язык носил имя "С с классами" и только потом стал называться C++. Язык C++ достиг популярности, будучи разработанным в Bell Labs, позже он был перенесен в другие индустрии и корпорации. Сегодня это один из наиболее популярных языков программирования в мире. C++ наследует как хорошие, так и плохие стороны С.

Бьерн Страуструп: "Я придумал C++, записал его первоначальное определение и выполнил первую реализацию. Я выбрал и сформулировал критерии проектирования C++, разработал его основные возможности и отвечал за судьбу предложений по расширению языка в комитете по стандартизации C++", - пишет автор самого популярного языка программирования. - "Язык C++ многим обязан языку C, и язык C остается подмножеством языка C++ (но в C++ устранены несколько серьезных брешей системы типов C). Я также сохранил средства C, которые являются достаточно низкоуровневыми, чтобы справляться с самыми критическими системными задачами. Язык C, в свою очередь многим обязан своему предшественнику, BCPL; кстати, стиль комментариев // был взят в C++ из BCPL. Другим основным источником вдохновения был язык Simula67. Концепция классов (с производными классами и виртуальными функциями) была позаимствована из него. Средства перегрузки операторов и возможность помещения объявлений в любом месте, где может быть записана инструкция, напоминает Algol68. "

Название C++ выдумал Рик Масситти. Название указывает на эволюционную природу перехода к нему от C. "++" - это операция приращения в C. Чуть более короткое имя C+ является синтаксической ошибкой; кроме того, оно уже было использовано как имя совсем другого языка. Знатоки семантики C находят, что C++ хуже, чем ++C. Названия D язык не получил, поскольку он является расширением C и в нем не делается попыток исцеляться от проблем путем выбрасывания различных особенностей.

C++ компилируемый язык программирования общего назначения, сочетает свойства как высокоуровневых, так и низкоуровневых языков программирования. В сравнении с его предшественником, языком программирования Cи, наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. Название «язык программирования C++» происходит от языка программирования C, в котором унарный оператор ++ обозначает инкремент переменной.

Язык программирования C++ широко используется для разработки программного обеспечения. А именно, создание разнообразных прикладных программ, разработка операционных систем, драйверов устройств, а также видео игр и многое другое. Существует несколько реализаций языка программирования C++ -- как бесплатных, так и коммерческих.

Он придумал ряд усовершенствований к языку программирования C, для собственных нужд. Т. е. изначально не планировалось создания языка программирования С++. Ранние версии языка С++, известные под именем «Cи с классами», начали появляться с 1980 года. Язык C, будучи базовым языком системы UNIX, на которой работали компьютеры фирмы Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами, тем самым зародил предпосылки нового, основанного на синтаксисе С, языка программирования. Синтаксис C++ был основан на синтаксисе C, так как Бьёрн Страуструп стремился сохранить совместимость с языком C.

В него были добавлены новые возможности: виртуальные функции, перегрузка функций и операторов, ссылки, константы и многое другое. Его первый коммерческий выпуск состоялся в октябре 1985 года.

2.2 Работа с графиками

График функции -- понятие в математике, которое даёт представление о геометрическом образе функции.

Каждая функция может быть адекватно описана своим графиком.

Из определения графика функции следует, что далеко не всякое множество точек плоскости может быть графиком некоторой функции: никакая прямая, параллельная оси ординат, не может пересекать график функции более чем в одной точке. Если функция обратима, то график обратной функции (как подмножество плоскости) будет совпадать с графиком самой функции (это, попросту, одно и тоже подмножество плоскости).

Построение графиков функции в С++ осуществляется разными способами, например, в builder'е используется компонент Tchart. Так как курсовая работа выполнена в Visual Studio используется компонент PictureBox и пространство имён System::Drawing.

У нас есть возможность рисовать любые графики, координатные оси и всё что необходимо для работы с графиками.

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

В зависимости от входных данных изменяется и функция и область определения.

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

3. ОБОБЩЕННАЯ СХЕМА ПРОГРАММЫ

3.1 Описание общего алгоритма решения

Для реализации функционала программы были использованы:

1. Сторонний класс Ncalc, который рассчитывает значения функции, по которым они строятся

2. Picture Box - компонент Windows Forms который может отображать графическую информацию.

3. Класс Graphics, который содержит методы для рисования линий.

Построение графиков в программе проходит по алгоритму

1. Получение функции

2. Расчёт значений

3. Вывод на экран

3.2 Обобщенная схема программы

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

Рисунок 1- Обобщенная схема программы

4. ОПИСАНИЕ ПРОГРАММЫ

4.1 Описание файлов проекта

Приложения состоит из следующих файлов:

1.Файл MyForm.h направлен на создание и описание основной формы программы (Рисунок 2);

2.Файл MyForm.cpp реализует основные функции приложения (рисунок 3);

3.Файлы ресурсов.

Рисунок 2 - Файлы проекта

4.2 Описание главной формы проекта

Приложение «Построение графиков математических функций» состоит из одной главной формы.

Главная форма программы (рисунок 3) имеет компоненты, приведенные в таблице 1

Рисунок 3 - Главная форма проекта

Таблица 1 - Описание компонентов главной формы приложения

Имя

Тип

Назначение

Button

System.Windows.Forms.

Button

Запуск фрагмента программы, при нажатии на кнопку

TextBox

System.Windows.Forms.TextBox

Получение входных данных

Label

System.Windows.Forms. Label

Отображение данных на форме

ComboBox

System.Windows.Forms.ComboBox

Выбор сложных функций

PictureBox

System.Windows.Forms.PictureBox

Отображение графической информации на форме

4.2 Описание MyForm.h

Заголовочный файл данного приложения состоит из функций

Таблица 2 - Прототипы программы

№п\п

Имя

Назначение

1

button1_Click

Запуск метода MakeFunct()

2

pictureBox1_Paint

Рисование в PictureBox

3

button2_Click

Очистка текстбоксов

4

comboBox1_SelectedIndexChanged

Выбор функции и её построение

4.3 Описание основных функций приложения

алгоритм программирование приложение файл

button1_Click - функция, реализующая запуск функции MakeFunct().

MakeFunct() - функция получающая границы графиков из текстбоксов, затем она отправляет функцию, границы и шаг на обработку в класс Ncalc и мы получаем значения функции.

pictureBox1_Paint - функция, которая рисует координатную плоскость, а затем рисует график по значения полученным от ncalc.

button2_Click - функция очищающая тестбоксы для ввода новых данных.

Описать основные функции

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

5. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

1. Запускаем файл Проект1, в результате чего должно появиться главное окно программы (рисунок 4).

Рисунок 4 - Главное окно программы «Построение графиков математических функций»

2. Выбираем необходимую функцию из предложенного нам списка под названием «Построить:» или вводим самостоятельно с клавиатуры нужный нам график. В качестве примера рассмотрим функцию . Далее вводим область определения, которая нас интересует. Завершающий этап состоит в указании шага, с которым будет выполняться построение. Нажимаем кнопку «Построить» (рисунок 5).

Рисунок 5 - Результат

3. Также для дальнейшего использования приложения, и ввода новой функции - необходимо нажать кнопку «Очистить» и для построения нового графика выполнить далее те действия, которые описанны пункте выше.

ЗАКЛЮЧЕНИЕ

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

Реализуя цель данного проекта, был улучшен навык использования среды программирования Visual Studio 2015.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Ашарина И.В. Объектно-ориентированное программирование в С++: лекции и упражнения: учебное пособие / И.В. Ашарина. - М. : Телеком, 2012. -- 319 с.

2. Подбельский В.В. Курс программирования на языке Си / В.В. Подбельский- М. : Пресс, 2012. -- 384 с.

3. Логинова Ф.С. Объектно-ориентированные методы программирования. / Ф.С. Логинова-- М.: Пресс, 2012. -- 208 с.

4. Павловская Т.А. «C/C++. Программирование на языке высокого уровня» / Т.А.Павловская. - СПб. : Питер,2012 - 367 с.

5. Хабибуллин И.Ш. «Программирование на языке высокого уровня. C/C++». / И.Ш. Хабибуллин- Спб.: Питер, 2013 - 405 с.

6. Шилдт Г. «C++ базовый курс» / Г. Шилдт- Спб.: Питер, 2012 - 709 с.

7. Павловская Т.А. «C/C++. Структурное программирование: Практикум» / Т.А. Павловская- СПб.: Питер, 2013 - 451 с.

ПРИЛОЖЕНИЕ А

Код файла MyForm.cpp:

#include "MyForm.h"

using namespace System;

using namespace System::Windows::Forms;

[STAThread]

void main(array<String^>^ arg) {

Application::EnableVisualStyles();

Application::SetCompatibleTextRenderingDefault(false);

Проект1::MyForm form;

Application::Run(%form);

}

System::Void Проект1::MyForm::button2_Click(System::Object ^ sender, System::EventArgs ^ e)

{

Points->Clear();

pictureBox1->Invalidate();

textBox2->Text = "";

textBox3->Text = "";

return System::Void();

}

System::Void Проект1::MyForm::comboBox1_SelectedIndexChanged(System::Object ^ sender, System::EventArgs ^ e)

{

textBox1->Text = (String^)comboBox1->SelectedItem;

/*switch (comboBox1->SelectedIndex)

{

case 0:textBox1->Text = "Sin(x)"; break;

case 1:textBox1->Text = "Cos(x)"; break;

case 2:textBox1->Text = "Tg(x)"; break;

}*/

MakeFunct();

return System::Void();

}

Код файла MyForm.h:

#pragma once

#include <vector>

namespace Проект1 {

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>

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

/// </summary>

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

{

int count = 0;

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

private: System::Windows::Forms::TextBox^ textBox1;

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

private: System::Windows::Forms::Button^ button2;

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

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

private: System::Windows::Forms::TextBox^ textBox2;

private: System::Windows::Forms::TextBox^ textBox3;

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

private: System::Windows::Forms::ComboBox^ comboBox1;

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

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

private: System::Windows::Forms::TextBox^ textBox4;

private: System::Windows::Forms::TextBox^ textBox5;

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

private: System::Windows::Forms::TextBox^ textBox6;

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

ArrayList^ Points = gcnew(ArrayList);

public:

MyForm(void)

{

InitializeComponent();

//

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

//

}

protected:

/// <summary>

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

/// </summary>

~MyForm()

{

if (components)

{

delete components;

}

}

private: System::Windows::Forms::Button^ button1;

protected:

private:

/// <summary>

/// Обязательная переменная конструктора.

/// </summary>

System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

/// <summary>

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

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

/// </summary>

void InitializeComponent(void)

{

this->button1 = (gcnew System::Windows::Forms::Button());

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

this->textBox1 = (gcnew System::Windows::Forms::TextBox());

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

this->button2 = (gcnew System::Windows::Forms::Button());

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

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

this->textBox2 = (gcnew System::Windows::Forms::TextBox());

this->textBox3 = (gcnew System::Windows::Forms::TextBox());

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

this->comboBox1 = (gcnew System::Windows::Forms::ComboBox());

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

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

this->textBox4 = (gcnew System::Windows::Forms::TextBox());

this->textBox5 = (gcnew System::Windows::Forms::TextBox());

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

this->textBox6 = (gcnew System::Windows::Forms::TextBox());

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

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

this->SuspendLayout();

//

// button1

//

this->button1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

static_cast<System::Byte>(204)));

this->button1->Location = System::Drawing::Point(318, 12);

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

this->button1->Size = System::Drawing::Size(101, 20);

this->button1->TabIndex = 0;

this->button1->Text = L"Построить";

this->button1->UseVisualStyleBackColor = true;

this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);

//

// pictureBox1

//

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

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

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

this->pictureBox1->TabIndex = 9;

this->pictureBox1->TabStop = false;

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

//

// textBox1

//

this->textBox1->Location = System::Drawing::Point(36, 13);

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

this->textBox1->Size = System::Drawing::Size(276, 20);

this->textBox1->TabIndex = 10;

//

// label1

//

this->label1->AutoSize = true;

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

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

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

this->label1->TabIndex = 11;

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

//

// button2

//

this->button2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

static_cast<System::Byte>(204)));

this->button2->Location = System::Drawing::Point(318, 39);

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

this->button2->Size = System::Drawing::Size(101, 20);

this->button2->TabIndex = 12;

this->button2->Text = L"Очистить";

this->button2->UseVisualStyleBackColor = true;

this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click);

//

// label2

//

this->label2->AutoSize = true;

this->label2->Location = System::Drawing::Point(12, 342);

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

this->label2->Size = System::Drawing::Size(122, 13);

this->label2->TabIndex = 13;

this->label2->Text = L"Область определения:";

//

// label3

//

this->label3->AutoSize = true;

this->label3->Location = System::Drawing::Point(12, 364);

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

this->label3->Size = System::Drawing::Size(17, 13);

this->label3->TabIndex = 14;

this->label3->Text = L"X:";

//

// textBox2

//

this->textBox2->Location = System::Drawing::Point(35, 361);

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

this->textBox2->Size = System::Drawing::Size(379, 20);

this->textBox2->TabIndex = 15;

//

// textBox3

//

this->textBox3->Location = System::Drawing::Point(35, 387);

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

this->textBox3->Size = System::Drawing::Size(379, 20);

this->textBox3->TabIndex = 17;

//

// label4

//

this->label4->AutoSize = true;

this->label4->Location = System::Drawing::Point(12, 390);

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

this->label4->Size = System::Drawing::Size(17, 13);

this->label4->TabIndex = 16;

this->label4->Text = L"Y:";

//

// comboBox1

//

this->comboBox1->FormattingEnabled = true;

this->comboBox1->Items->AddRange(gcnew cli::array< System::Object^ >(3) { L"Sin(x)", L"Cos(x)", L"Pow(x,2)" });

this->comboBox1->Location = System::Drawing::Point(318, 102);

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

this->comboBox1->Size = System::Drawing::Size(101, 21);

this->comboBox1->TabIndex = 18;

this->comboBox1->SelectedIndexChanged += gcnew System::EventHandler(this, &MyForm::comboBox1_SelectedIndexChanged);

//

// label5

//

this->label5->AutoSize = true;

this->label5->Location = System::Drawing::Point(318, 86);

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

this->label5->Size = System::Drawing::Size(64, 13);

this->label5->TabIndex = 19;

this->label5->Text = L"Построить:";

//

// label6

//

this->label6->AutoSize = true;

this->label6->Location = System::Drawing::Point(315, 137);

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

this->label6->Size = System::Drawing::Size(23, 13);

this->label6->TabIndex = 20;

this->label6->Text = L"От:";

//

// textBox4

//

this->textBox4->Location = System::Drawing::Point(344, 134);

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

this->textBox4->Size = System::Drawing::Size(75, 20);

this->textBox4->TabIndex = 21;

this->textBox4->Text = L"-100";

//

// textBox5

//

this->textBox5->Location = System::Drawing::Point(344, 160);

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

this->textBox5->Size = System::Drawing::Size(75, 20);

this->textBox5->TabIndex = 23;

this->textBox5->Text = L"100";

//

// label7

//

this->label7->AutoSize = true;

this->label7->Location = System::Drawing::Point(315, 163);

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

this->label7->Size = System::Drawing::Size(25, 13);

this->label7->TabIndex = 22;

this->label7->Text = L"До:";

//

// textBox6

//

this->textBox6->Location = System::Drawing::Point(344, 196);

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

this->textBox6->Size = System::Drawing::Size(75, 20);

this->textBox6->TabIndex = 25;

this->textBox6->Text = L"1";

//

// label8

//

this->label8->AutoSize = true;

this->label8->Location = System::Drawing::Point(315, 199);

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

this->label8->Size = System::Drawing::Size(30, 13);

this->label8->TabIndex = 24;

this->label8->Text = L"Шаг:";

//

// MyForm

//

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

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

this->ClientSize = System::Drawing::Size(426, 419);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

this->Name = L"MyForm";

this->Text = L"MyForm";

this->FormClosing += gcnew System::Windows::Forms::FormClosingEventHandler(this, &MyForm::MyForm_FormClosing);

this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);

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

this->ResumeLayout(false);

this->PerformLayout();

}

#pragma endregion

void MakeFunct()

{

try

{

Points->Clear();

for (double i = double::Parse(textBox4->Text); i < double::Parse(textBox5->Text); i += double::Parse(textBox6->Text))

{

try

{

double x = (static_cast<double>(NCalc::Expression(textBox1->Text->Replace("x", i.ToString())).Evaluate()));

if (!Double::IsInfinity(x) && x > -214748364)

{

Points->Add(Point((pictureBox1->Width / 2) + i, (pictureBox1->Height / 2) - x));

textBox2->Text += ((pictureBox1->Width / 2) + i) + ",";

textBox3->Text += ((pictureBox1->Height / 2) - x) + ",";

}

}

catch (Exception^ ex)

{

int x = (static_cast<int>(NCalc::Expression(textBox1->Text->Replace("x", i.ToString())).Evaluate()));

if (x > -214748364)

{

Points->Add(Point((pictureBox1->Width / 2) + i, (pictureBox1->Height / 2) - x));

textBox2->Text += i + ",";

textBox3->Text += x + ",";

}

}

}

pictureBox1->Invalidate();

}

catch (const std::exception&)

{

}

}

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

MakeFunct();

}

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

Graphics^ g = e->Graphics;

g->DrawLine(Pens::Red, pictureBox1->Width / 2, 0, pictureBox1->Width / 2, pictureBox1->Height);

g->DrawLine(Pens::Red, 0,pictureBox1->Height / 2, pictureBox1->Width, pictureBox1->Height/2);

int temp = 25;

for (int i = pictureBox1->Width/2; i < pictureBox1->Width; i+=25)

{

g->DrawString(temp.ToString(), SystemFonts::DefaultFont, Brushes::Red, i, pictureBox1->Height/2);

temp += 25;

}

temp = -25;

for (int i = pictureBox1->Width / 2-25; i >= 0; i -= 25)

{

g->DrawString(temp.ToString(), SystemFonts::DefaultFont, Brushes::Red, i, pictureBox1->Height / 2);

temp -= 25;

}

temp = 25;

for (int i = pictureBox1->Height / 2-25; i >= 0; i -= 25)

{

g->DrawString(temp.ToString(), SystemFonts::DefaultFont, Brushes::Red, pictureBox1->Width / 2,i);

temp += 25;

}

temp = -25;

for (int i = pictureBox1->Height / 2+10; i <pictureBox1->Height; i += 25)

{

g->DrawString(temp.ToString(), SystemFonts::DefaultFont, Brushes::Red, pictureBox1->Width / 2, i);

temp -= 25;

}

//Преобразуем ArrayList в массив точек

try

{

if (Points->Count > 0)

{

array<Point>^ pt = gcnew array<Point>(Points->Count);

Points->CopyTo(pt);

g->DrawLines(Pens::Black, pt);

delete pt;

}

}

catch(std::exception ex)

{

}

}

private: System::Void MyForm_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) {

delete Points;

}

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e);

private: System::Void comboBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e);

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

}

};

}

ПРИЛОЖЕНИЕ В

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.