Вы находитесь на странице: 1из 30

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное


образовательное учреждение высшего образования
«Тульский государственный университет»

Институт «Прикладной математики и компьютерных наук»


Кафедра «Вычислительной техники»

Утверждено на заседании кафедры


«Вычислительной техники»
«28» июня 2019 г., протокол №12

Заведующий кафедрой

_________________________А.Н.Ивутин

СБОРНИК МЕТОДИЧЕСКИХ УКАЗАНИЙ


К ПРАКТИЧЕСКИМ ЗАНЯТИЯМ

учебной дисциплины
«Программирование»

основной профессиональной образовательной программы


высшего образования – программы бакалавриата

по направлению подготовки
09.03.01 Информатика и вычислительная техника

с направленностью
Системы автоматизированного проектирования; Вычислительные
машины, комплексы, системы и сети;
Программное обеспечение средств вычислительной техники и
автоматизированных систем; Автоматизированные системы
обработки информации и управления

Форма обучения: очная

Идентификационный номер образовательной программы: 090301-02-19

Тула 2019 год


Сборник МУ составлен доц. каф ВТ Савиным Н.И. и обсужден на заседании кафедры
Вычислительной техники института Прикладной математики и компьютерных наук (протокол
заседания кафедры №12 от «28» июня 2019 г.)

Зав. кафедрой А.Н.Ивутин


СОДЕРЖАНИЕ
Практическое занятие 1. Среды разработки программ на языках С++ и C#. 4
Практическое занятие 2. Визуальное проектирование программ в среде VisualStudio .
Основные компоненты. 11
Практическое занятие 3. Визуальное проектирование программ в среде VisualStudio. Ввод-
вывод информации. 16
Практическое занятие 4. Визуальное проектирование программ в среде VisualStudio.
Диалоги. 20
Практическое занятие 5. Визуальное проектирование программ в среде VisualStudio.
Графика. 23
Практическое занятие 6. Визуальное проектирование программ в среде VisualStudio.
Анимация. 26
Список литературы 30
Практическое занятие 1.
Среды разработки программ на языках С++ и C#.
1. Цель занятия
Освоение интегрированных сред разработки: Microsoft Visual Studio .NET.
.
2. Теоретические сведения
2.1. Microsoft Visual Studio .NET
В Visual Studio .NET (далее VS .NET) каждый проект является частью того, что
Microsoft называет решением (solution). Любой код, созданный в VS .NET IDE, относится
к некоторому решению. Решение можно рассматривать как хранилище всей информации,
необходимой для компиляции программы и ее перевода в форму, пригодную для
исполнения. Таким образом, решение состоит из одного или нескольких проектов;
различных вспомогательных файлов (графических изображений, ресурсных файлов,
метаданных, то есть данных, описывающих другие данные, и т. д.); документации в
формате XML. Решение позволяет легко выбрать файлы, задействованные в решении
конкретной проблемы.
Новое решение создается командой File > New > Project. Далее требуется выбрать
тип проекта, который будет первым в решении, имя решения, и каталог где оно будет
находиться. Все новые проекты добавляются в решение лишь с одним отличием, при
создании проекта в поле «решение» требуется выбрать «В текущее» (Add to Solution)
вместо «в новое решение» (Create new solution).

Рис. 1. Новый проект


При помощи команды View в главном меню всегда можно вызвать нужное окно на
передний план (и передать ему фокус). Все окна IDE свободно перетаскиваются мышью.
Основные окна IDE
Но сначала напомним, что в VS .NET IDE, как и в большинстве современных
приложений Windows, контекстные меню вызываются правой кнопкой мыши.
Редактор текста
Редактор обладает полным набором стандартных возможностей, поддерживаемых
в редакторах такого рода (вырезание, вставка, поиск/замена и т. д.). Для работы с ними
можно использовать стандартные комбинации клавиш Windows (Ctrl+X — вырезать,
Ctrl+V — вставить и т. д.). Если вы предпочитаете работать с командами меню, к вашим
услугам меню Edit и контекстное меню окна программы. Полный список сочетаний
клавиш вызывается из меню Edit; кроме того, он приведен в разделе «Editing, shortcut
keys» справочной системы. Например, комбинация Ctrl+I включает режим поиска с
приращением.
В распоряжении разработчика имеется средство IntelliSense, выдающее
информацию о методах заданного объекта или параметрах, передаваемых при вызове
функции (рис. 2). Обычно IntelliSense вызывается автоматически, но его можно вызвать
нажатием «Ctrl + Пробел»

Рис. 2. Окно редактора


Настройка большинства глобальных параметров редактора выполняется в
диалоговом окне — выполните команду Tools > Options и выберите в списке строку Text
Editor. Например, чтобы выбрать размер позиций табуляции, щелкните в строке Text
Editor и выберите нужное значение для всех языков или только для С++. Здесь же
выбирается режим создания отступов: None (отступы отсутствуют), Block (курсор
выравнивается по началу предыдущей строки) или Smart (автоматическое создание
отступов в теле цикла, как того требует хороший стиль программирования). Кстати
говоря, устанавливать размер позиций табуляции и форматировать отступы можно в
готовом тексте, для чего используются комбинации клавиш Ctrl+K, Ctrl+F (сочетания
клавиш требуется нажать подряд, без длительной паузы) или команда Edit > Advanced >
Format Selection.
Также изменять отступы выделенного блока можно используя Tab для увеличения
отступа и Shift + Tab для уменьшения.
Редактор поддерживает и такую возможность, как свертка фрагментов программы
и отображение на их месте заголовков (folding). Обратите внимание на значки «-» рядом с
некоторыми строками на рисунке 2. Если щелкнуть на таком значке, в листинге будет
скрыта соответствующая область (region), а после первой строки кода из блока появится
многоточие. Если задержать указатель мыши над многоточием, на экране будет показан
свернутый код. Для управления сверткой используется подменю Edit > Outlining.
В программе можно определять собственные области. Сворачиваемый блок
(регион), пример
#pragma region R
int r;
#pragma endregion

Информация о редакторе IDE находится в разделе справки «Code and Text Editor».
Список задач
В Visual Studio поддерживается список задач (task list). Идея состоит в том, что в
программу включаются комментарии с описанием действий, которые предполагается
выполнить в будущем; тип задачи определяется специальным ключевым словом,
следующим после знака комментария. В настоящее время определены три встроенные
категории задач — TODO, HACK и UNDONE. Комментарии с задачами выводятся в окне,
вызываемом командой View > Other Windows > Task List (или комбинацией клавиш Ctrl+/,
Ctrl + T).
Для списка задач можно определять пользовательские ключевые слова.
Предположим, вы хотите помечать ключевым словом FOR_BETA_RELEASE те
фрагменты кода, которые должны выйти в бета версии программы. Определение
пользовательских ключевых слов для списка задач происходит следующим образом:
1. Выполните команду Tools > Options > Environment > Task List.
2. Введите текст FOR_BETA_RELEASE (при этом становится доступной кнопка
Add).
3. Выберите приоритет.
4. Нажмите кнопку Add и кнопку ОК.
Для просмотра задач, установленных с помощью комментариев, требуется в поле
вводе вверху окна выбрать «Comment» (рис. 3).

Рис. 3. Список задач


Окно решения
В окне решения (Solution Explorer), показанном на рис. 4, выводится список
файлов, входящих в решение. По умолчанию имя решения совпадает с именем первого
созданного в нем проекта.
Используя Solution Explorer, можно добавлять в проект различные файлы.
Например, текст или исходный код. Для этого требуется щелкнуть правой кнопкой мыши
по папке, куда необходимо добавить файл, в контекстном меню выбрать Add > New Item
(Добавить > Новый элемент), чтобы добавить новый файл, или Add > Existent Item
(Добавить > Существующий элемент), чтобы добавить существующий файл.
Рис. 4. Окно решения
Окно свойств
Функции окна свойств в VS .NET уже не ограничиваются простым заданием
свойств элементов управления. Содержимое окна зависит от того, что в настоящий
момент выделено в IDE. Имя и тип выделенного элемента указаны в списке, находящемся
в верхней части окна. Чтобы изменить значение свойства, щелкните в правой ячейке и
начинайте вводить символы. В окне свойств действуют стандартные комбинации клавиш,
используемые при редактировании в системе Windows.
На рис. 5 в окне свойств задаются свойства файла с1.cpp. При помощи этого окна
можно задать свойства дизайнера (например, используемого при построении web-
приложений или серверных приложений).
Рис. 5. Окно свойств объекта
Окно вывода и окно ошибок
В окне вывода (вызываемом командой View > Output или комбинацией клавиш Alt
+ 2) отображается текущая информация состояния. При построении решения в этом окне
компилятор выводит сообщения как об успешном завершении, так и о возникших
ошибках.
В окне ошибок выводятся все ошибки или предупреждения возникшие во время
компиляции программы. Оно вызывается сочетанием клавиш Ctrl + /, Ctrl + E.

Создание консольного приложения


Пример создания консольного приложения на языке C#.
Консольное приложение создается следующим образом.

Рис. 1.1. Окно создания проекта


Рис. 1.2. Окно редактора кода консольного приложениz

Рис. 1.3. Первая программа


Далее необходимо выполнить построение приложения.
Если синтаксических ошибок не обнаружено, то можно выполнить приложение.
При запуске консольного приложения на экране появляется консоль в которую
выведены результаты выполнения приложения. На рис.1.4 приведен вид окна командной
строки, в котором работает консольное приложение..
Процесс сохранения проекта консольного приложения стандартный. В результате
выбора из меню File команды Save Project на экране сначала появляется окно Save Project,
в котором нужно ввести имя проекта, а затем — окно Save Utit, в котором надо задать имя
модуля.
Получить доступ к модулю консольного приложения (тексту программы) для того,
чтобы внести изменения в программу, несколько сложнее. Сначала, выбрав в меню File
команду Open Project, нужно открыть файл проекта. Затем надо открыть окно Project
Manager (команда View | Project Manager), раскрыть список файлов, выбрать срр-файл и из
контекстного меню выбрать команду Open (или сделать двойной щелчок на имени срр-
файла) (рис. 1.5).

Рис. 1.4. Результат работы консольного приложения

Контрольные вопросы
1. Что такое решение (solution) в Visual Studio .NET? Зачем они нужны?
2. Как создать решение? Как добавить туда проект?
3. Что такое IntelliSense? Как он вызывается?
4. Что такое список задач? Как можно добавить задачу?
5. Как осуществляется «сворачивание кода»? Какие области сворачиваются?
6. Зачем нужно окно свойств?
7. Зачем нужно окно вывода и окно ошибок? Чем они отличаются?
8. Зачем нужно окно решения?
9. Как настраиваются параметры форматирования текста в окне редактора?
10. Какие существуют команды форматирования? Как можно менять отступы
блоков текста?
11. Как добавить в проект новый или существующий файл.
Практическое занятие 2.
Визуальное проектирование программ в среде VisualStudio . Основные
компоненты. Язык С++
1. Цели и задачи работы
Освоение основных компонент визуального проектирования приложения
2. Теоретические положения.
2.2. Windows Forms. Создание кнопки
Задание.
Создать приложение, которое имеет окно формы с одной кнопкой и на которой
нарисована линия.

Вид интерфейса.

Рис. Вид формы приложения

Порядок проектирования элемента управления

Рис. Дизайнер формы


Порядок проектирования рисования линии на форме
Класс формы
#pragma once
namespace butt {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{InitializeComponent(); }
protected:
~Form1()
{if (components){delete components;}
}
private: System::Windows::Forms::Button^ button1;
private: System::Windows::Forms::Timer^ timer1;
private: System::ComponentModel::IContainer^ components;
protected:
private:

#pragma region Windows Form Designer generated code


void InitializeComponent(void)
{
this->components = (gcnew System::ComponentModel::Container());
this->button1 = (gcnew System::Windows::Forms::Button());
this->timer1 = (gcnew System::Windows::Forms::Timer(this-
>components));
this->SuspendLayout();
// button1
this->button1->Location = System::Drawing::Point(453, 252);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(75, 23);
this->button1->TabIndex = 0;
this->button1->Text = L"button1";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this,
&Form1::button1_Click);
// Form1
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(558, 300);
this->Controls->Add(this->button1);
this->Name = L"Form1";
this->Text = L"Form1";
this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this,
&Form1::Form1_Paint);
this->ResumeLayout(false);
}
#pragma endregion
private: System::Void button1_Click
(System::Object^ sender, System::EventArgs^ e)
{
//Close();
double tt=Convert::ToDouble("25,7e-3");
Close();
}
#pragma endregion
private:
System::Void Form1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e)
{
Graphics ^g = e->Graphics;
g->DrawString("Hello World!",
gcnew Drawing::Font("Arial", 30, FontStyle::Bold), Brushes::Red, 100.0, 110.0);
ShowLineJoin( e );
}
private:
void ShowLineJoin( PaintEventArgs^ e )
{
// Create a new pen.
Pen^ skyBluePen = gcnew Pen( Brushes::DeepSkyBlue );
// Set the pen's width.
skyBluePen->Width = 8.0F;
// Set the LineJoin property.
skyBluePen->LineJoin = System::Drawing::Drawing2D::LineJoin::Bevel;
// Draw a rectangle.
e->Graphics->DrawRectangle( skyBluePen, Rectangle(40,40,150,200) );
//Dispose of the pen.
delete skyBluePen;
}
// This example creates a PictureBox control on the form and draws to it.
// This example assumes that the Form_Load event handler method is
// connected to the Load event of the form.
private:
PictureBox^ pictureBox1;
void Form1_Load( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
pictureBox1 = gcnew PictureBox;
// Dock the PictureBox to the form and set its background to white.
pictureBox1->Dock = DockStyle::Fill;
pictureBox1->BackColor = Color::White;
// Connect the Paint event of the PictureBox to the event handler method.
pictureBox1->Paint += gcnew System::Windows::Forms::PaintEventHandler( this,
&Form1::pictureBox1_Paint );
// Add the PictureBox control to the Form.
this->Controls->Add( pictureBox1 );
}
void pictureBox1_Paint( Object^ /*sender*/, System::Windows::Forms::PaintEventArgs^ e )
{
// Create a local version of the graphics object for the PictureBox.
Graphics^ g = e->Graphics;
// Draw a string on the PictureBox.
g->DrawString( "This is a diagonal line drawn on the control",
gcnew System::Drawing::Font( "Arial",10 ), System::Drawing::Brushes::Blue, Point(30,30) );
// Draw a line in the PictureBox.
g->DrawLine( System::Drawing::Pens::Red, pictureBox1->Left, pictureBox1->Top,
pictureBox1->Right, pictureBox1->Bottom );
}
};
}
Практическое занятие 3.
Визуальное проектирование программ в среде VisualStudio. Ввод-вывод
информации. Язык С++
1. Цели и задачи работы
2. Теоретические положения.
Использование TextBox
Задание.
Спроектировать приложение, интерфейс которого включает форму, элемент
вывода TextBox и кнопку.
При клике по кнопке в TextBox выводится строка текста.
Интерфейс.

Рис. Интерфейс приложения


Порядок создания элементов управления

Рис. Окно дизайнера формы


Класс формы
#pragma once
namespace OutText {

using namespace System;


using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

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


{
public:
Form1(void)
{
InitializeComponent();
}

protected:
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::TextBox^ textBox1;
private: System::Windows::Forms::Button^ button1;
protected:

private:
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code


void InitializeComponent(void)
{
this->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->button1 = (gcnew System::Windows::Forms::Button());
this->SuspendLayout();
// textBox1
this->textBox1->Location = System::Drawing::Point(36, 36);
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(121, 20);
this->textBox1->TabIndex = 0;
// button1
this->button1->Location = System::Drawing::Point(157, 119);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(73, 25);
this->button1->TabIndex = 1;
this->button1->Text = L"Вывод";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this,
&Form1::button1_Click);
// Form1
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode =
System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(284, 262);
this->Controls->Add(this->button1);
this->Controls->Add(this->textBox1);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);
this->PerformLayout();

}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e) {
textBox1->Text="Вывод в TextBox";
}
};
}
1. Порядок выполнения работы.
1. При домашней подготовке необходимо изучить литературу по теме
лабораторной работы.
2. Получить задание у преподавателя.
3. Разработать алгоритм решения задачи и написать программу, реализующую
задание.
4. Проверить правильность ее работы.
5. Составить отчет и защитить работу.
2. Требования к отчету.
Отчет по лабораторной работе должен соответствовать требованиям,
предъявляемым стандартами ТулГУ. Он должен содержать титульный лист, цели и задачи
работы, текст задания, алгоритм и программную реализацию решения, теоретические
положения, которые были использованы при выполнении лабораторной работы и
контрольные примеры.
3. Варианты заданий.
1. Спроектировать приложение. На форме предусмотреть: поле ввода
информации; поле вывода информаци, кнопку переноса информации из поля
ввода в поле вывода.
2. Спроектировать приложение. На форме предусмотреть: поле ввода
информации; поле вывода информаци, кнопку переноса информации из поля
ввода в поле вывода. При переносе отсортировать строки в
лексикографическом порядке
3. Спроектировать приложение. На форме предусмотреть: поле ввода
информации; поле вывода информаци, кнопку переноса информации из поля
ввода в поле вывода. В поле ввода предусмотреть ввод целых чисел.
4. Спроектировать приложение. На форме предусмотреть: поле ввода
информации; поле вывода информаци, кнопку переноса информации из поля
ввода в поле вывода. В поле ввода предусмотреть ввод чисел с плавающей
точкой.
5. Спроектировать приложение. На форме предусмотреть: поле ввода
информации; поле вывода информаци, кнопку переноса информации из поля
ввода в поле вывода. В поле ввода предусмотреть ввод информации в виде
структуры: ФИО, год родения, место работы.
6. Спроектировать приложение. На форме предусмотреть: поле ввода
информации; поле вывода информаци, кнопку переноса информации из поля
ввода в поле вывода. В поле ввода предусмотреть ввод матрицы смежности
графа. В поле вывода отобразить граф в виде списка смежности.
7. Спроектировать приложение. На форме предусмотреть: поле ввода
информации; поле вывода информаци, кнопку переноса информации из поля
ввода в поле вывода. В поле ввода предусмотреть ввод строк в стек . В поле
вывода отобразить информацию из стека.
8. Спроектировать приложение. На форме предусмотреть: поле ввода
информации; поле вывода информаци, кнопку переноса информации из поля
ввода в поле вывода. В поле ввода предусмотреть ввод строк в очередь . В
поле вывода отобразить информацию из очереди.
9. Спроектировать приложение. На форме предусмотреть: два поля ввода
информации; поле вывода информаци, кнопку переноса информации из поля
ввода в поле вывода. В поле вывода отобразить информацию из полей ввода в
виде таблицы.
10. Спроектировать приложение. На форме предусмотреть: два поля ввода
информации;, кнопку переноса информации из поля ввода в файл. В файл
записать информацию из полей ввода в виде таблицы.
11. Спроектировать приложение. На форме предусмотреть: два поля ввода
информации;, кнопку переноса информации из поля ввода в файл. В файл
записать информацию из полей ввода в виде полей стека.
4. Контрольные вопросы.
Практическое занятие 4.
Визуальное проектирование программ в среде VisualStudio. Диалоги. Язык С++
1. Цели и задачи работы
2. Теоретические положения.
Использование элементов диалога
Задание.
Спроектировать приложение, интерфейс которого включает форму, многострочный
элемент вывода TextBox, элемент диалога SaveFileDialog и кнопку.
При клике по кнопке в файл, заданный в элементе диалога saveFileDialog1,
выводится строки текста из элемента вывода textBox1.
Интерфейс.

Рис. Интерфейс приложения


Порядок создания элементов управления

Элемент
SaveFileDialog

Рис. Окно дизайнера формы


Файл out.txt
Hello,
world!
Класс формы
#pragma once

namespace dialog {

using namespace System;


using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::IO;
using namespace System::Text;
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
}
protected:
~Form1()
{
if (components)
{

delete components;
}
}
protected:
private: System::Windows::Forms::Button^ button1;
private: System::Windows::Forms::SaveFileDialog^ saveFileDialog1;
private: System::Windows::Forms::TextBox^ textBox1;
private:
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
void InitializeComponent(void)
{
this->button1 = (gcnew System::Windows::Forms::Button());
this->saveFileDialog1 = (gcnew System::Windows::Forms::SaveFileDialog());
this->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->SuspendLayout();
// button1
this->button1->Location = System::Drawing::Point(188, 64);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(76, 32);
this->button1->TabIndex = 0;
this->button1->Text = L"button1";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this,
&Form1::button1_Click);
// textBox1
this->textBox1->Location = System::Drawing::Point(28, 32);
this->textBox1->Multiline = true;
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(113, 64);
this->textBox1->TabIndex = 1;
this->textBox1->Text = L"hello,\r\nworld!";
this->textBox1->TextChanged += gcnew System::EventHandler(this,
&Form1::textBox1_TextChanged);
// Form1
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(284, 262);
this->Controls->Add(this->textBox1);
this->Controls->Add(this->button1);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e) {
String ^s;
this->saveFileDialog1->ShowDialog();
s=this->saveFileDialog1->FileName;
TextWriter^ out = gcnew StreamWriter( "two.txt" );

out->WriteLine(textBox1->Lines[0]);
out->Write(textBox1->Lines[1]);
out->Close();

}
private: System::Void textBox1_TextChanged(System::Object^ sender,
System::EventArgs^ e) {
//......
}
};
}

3. Контрольные вопросы.
Практическое занятие 5.
Визуальное проектирование программ в среде VisualStudio. Графика. Язык С++
1. Цели и задачи работы
2. Теоретические положения.
Использование элементов диалога
Задание.
Спроектировать приложение, интерфейс которого включает форму, элемент
вывода графики PictureBox, кнопки button1 и button2.
При клике по кнопке button1 на форме рисуется отрезок прямой красного цвета.
При клике по кнопке button2 в элементе PictureBox рисуется отрезок прямой синего
цвета.
Интерфейс.

а) после запуска а) после нажатия button1 а) после нажатия button1

Рис. Интерфейс приложения


Порядок создания элементов управления

Рис. Окно дизайнера формы


Класс формы
#pragma once
namespace DrawLine1 {

using namespace System;


using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

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


{
public:
Form1(void)
{
InitializeComponent();
//TODO: Add the constructor code here
}

protected:
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;
protected:
private: System::Windows::Forms::Button^ button2;
private: System::Windows::Forms::PictureBox^ pictureBox1;

private:
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code


void InitializeComponent(void)
{
this->button1 = (gcnew System::Windows::Forms::Button());
this->button2 = (gcnew System::Windows::Forms::Button());
this->pictureBox1 = (gcnew
System::Windows::Forms::PictureBox());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^
>(this->pictureBox1))->BeginInit();
this->SuspendLayout();
// button1
this->button1->Location = System::Drawing::Point(45, 205);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(74, 31);
this->button1->TabIndex = 0;
this->button1->Text = L"button1";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this,
&Form1::button1_Click);
// button2
this->button2->Location = System::Drawing::Point(165, 205);
this->button2->Name = L"button2";
this->button2->Size = System::Drawing::Size(81, 30);
this->button2->TabIndex = 1;
this->button2->Text = L"button2";
this->button2->UseVisualStyleBackColor = true;
this->button2->Click += gcnew System::EventHandler(this,
&Form1::button2_Click);
// pictureBox1
this->pictureBox1->BackColor = System::Drawing::Color::Beige;

24
this->pictureBox1->BorderStyle =
System::Windows::Forms::BorderStyle::Fixed3D;
this->pictureBox1->Location = System::Drawing::Point(140, 16);
this->pictureBox1->Name = L"pictureBox1";
this->pictureBox1->Size = System::Drawing::Size(129, 120);
this->pictureBox1->TabIndex = 2;
this->pictureBox1->TabStop = false;
// Form1
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode =
System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(284, 262);
this->Controls->Add(this->pictureBox1);
this->Controls->Add(this->button2);
this->Controls->Add(this->button1);
this->Name = L"Form1";
this->Text = L"Form1";
(cli::safe_cast<System::ComponentModel::ISupportInitialize^
>(this->pictureBox1))->EndInit();
this->ResumeLayout(false);

}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e) {
Color ^col=gcnew Color;
Pen ^pen= gcnew Pen(col->Red);
Graphics ^im =this->CreateGraphics();
im->DrawLine(pen,10,10,100,100);
}
private: System::Void button2_Click(System::Object^ sender,
System::EventArgs^ e) {
Color ^col=gcnew Color;
Pen ^pen= gcnew Pen(col->Blue,4);
Graphics ^im =pictureBox1->CreateGraphics();
im->DrawLine(pen,10,100,100,10);
}
};
}

3. Контрольные вопросы.

25
Практическое занятие 6.
Визуальное проектирование программ в среде VisualStudio. Анимация. Язык
С++
1. Цели и задачи работы
2. Теоретические положения.
Использование анимации
Задание.
Спроектировать приложение, интерфейс которого включает форму, кнопку Start,
кнопку Stop.
При инициализации формы на ней рисуется прямоугольный контур таймера
При клике по кнопке Start в на форме рисуется секундная стрелка синим цветом
каждую нечетную секунду и красным цветом – каждую четную.
Интерфейс.

а) после запуска а) после нажатия start а) после истеченияодной


секунды

Рис. Интерфейс приложения

26
Порядок создания элементов управления

Рис. Окно дизайнера формы


Класс формы
#pragma once
#include <math.h>
#include <stdlib.h>
using namespace std;
namespace tmr1 {

using namespace System;


using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

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


{
public:
Form1(void)
{
InitializeComponent();
//TODO: Add the constructor code here
im=this->CreateGraphics();
col=gcnew Color;
pen =gcnew Pen(col->Red);
// Build the rectangles from points and size
Drawing::Point point1 = Drawing::Point(25,45);
Drawing::Size size = Drawing::Size(150, 105);
rect1 = Drawing::Rectangle(point1, size);
}
protected:
~Form1()
{
if (components)

27
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;
protected:
private: System::Windows::Forms::Button^ button2;
private: System::Windows::Forms::Timer^ timer1;
private: System::ComponentModel::IContainer^ components;
private:
Color ^col;
Graphics ^im;
Pen ^ pen ;
Drawing::Rectangle rect1;
#pragma region Windows Form Designer generated code
void InitializeComponent(void)
{
this->components = (gcnew System::ComponentModel::Container());
this->button1 = (gcnew System::Windows::Forms::Button());
this->button2 = (gcnew System::Windows::Forms::Button());
this->timer1 = (gcnew System::Windows::Forms::Timer(this-
>components));
this->SuspendLayout();
this->Paint +=
gcnew System::Windows::Forms::PaintEventHandler(this,
&Form1::Form1_Paint);
// button1
this->button1->Location = System::Drawing::Point(43, 203);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(74, 30);
this->button1->TabIndex = 0;
this->button1->Text = L"Start";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnewSystem::EventHandler(this,&Form1::button1_Click);
// button2
this->button2->Location = System::Drawing::Point(164, 203);
this->button2->Name = L"button2";
this->button2->Size = System::Drawing::Size(75, 27);
this->button2->TabIndex = 1;
this->button2->Text = L"Stop";
this->button2->UseVisualStyleBackColor = true;
this->button2->Click += gcnew System::EventHandler(this,
&Form1::button2_Click);
// timer1
this->timer1->Interval = 1000;
this->timer1->Tick += gcnew System::EventHandler(this,
&Form1::timer1_Tick);
// Form1
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(284, 262);
this->Controls->Add(this->button2);
this->Controls->Add(this->button1);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);

}
#pragma endregion
//----------My code--------------
private:
System::Void Form1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e)
{
// Draw a rectangle
e->Graphics->DrawRectangle(Pens::Black, rect1);
}
28
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e) {
if(timer1->Enabled);else timer1->Enabled=true;
im->DrawRectangle(Pens::Black, rect1);}
private: System::Void button2_Click(System::Object^ sender,
System::EventArgs^ e) {
if(!timer1->Enabled);else timer1->Enabled=false; }
private: System::Void timer1_Tick(System::Object^ sender,
System::EventArgs^ e) {
static float x=100,y=100,fi=0,hfi=3.14159/30,fil,pi=3.14159 ,
x1=100,y1=100,xl,yl,x1l,y1l,cx=100,
cy=100,l1=20,l=50,ts=0;
x1l=x1;y1l=y1;xl=x;yl=y;
static int t;
t++;
y=100-l*sin(fi+pi/2);
x=100-l*cos(fi+pi/2);
x1=cx+l1*cos(fi+pi/2);
y1=cy+l1*sin(fi+pi/2);
fi=fi+hfi;
pen->Color=this->BackColor;
pen->Width=2;
im->DrawLine(pen,int(xl),int(yl),100,100);
im->DrawLine(pen,int(x1l),int(y1l),int(cx),int(cy));
if(t%2)pen->Color=col->Cyan;else pen->Color=col->Red;
im->DrawLine(pen,int(x1),int(y1),int(cx),int(cy));
im->DrawLine(pen,int(x),int(y),100,100);
im->DrawEllipse((pen->Width=1,pen),int(cx-5),int(cy-5),10,10);
}
};
}

3. Контрольные вопросы.

29
Список литературы
1. Анисимов, А.Е. Сборник заданий по основаниям программирования : учеб.пособие
/ А.Е.Анисимов,В.В.Пупышев .— М. : Интернет-ун-т информ. технологий;
БИНОМ. Лаборатория знаний, 2006 .— 348с. <15>
2. Макконелл, Д. Основы современных алгоритмов : учеб. пособие — М. :
Техносфера, 2006 .— 368 с. <7>
3. Подбельский, В.В. Язык Си+ : Учеб.пособие для вузов / В.В.Подбельский .— 5-е
изд. — М. : Финансы и статистика, 2003 .— 560с. <13>
4. Павловская, Т.А. C/C++:Программирование на языке высокого уровня : Учебник
для вузов / Т.А.Павловская .— М.и др. : Питер, 2004 .— 461с.<7>
5. Ганеев, Р.М. Проектирование интерфейса пользователя средствами Win32 API :
учеб. пособие для вузов / Р. М. Ганеев .— 2-е изд., испр. и доп. — М. : Горячая
линия-Телеком, 2007 .— 358 с.<3>
6. Вирт Н. Алгоритмы + структуры данных = программы. М.; Mиp, 1985. – 281 с.
7. Шлее, М. Профессиональное программирование на С++ / М.Шлее .— СПб. : БХВ-
Петербург, 2005 .— 544с. : ил. + 1 CD .— (В подлиннике). <3>
8. Страуструп, Б. Язык программирования Си++ : Спец.изд. / Б.Страуструп;Пер.с
англ.С.Анисимова,М.Кононова;Под ред.Ф.Андреева,А.Ушаков .— М. : Бином,
2004 .— 1098с. <4>
9. Шилдт, Г. C# : Учеб.курс / Г.Шилдт;Пер.с англ.А.Падалки .— М.и др. : Питер, 2003
.— 512 с. <4>
10. Секунов, Н.Ю. Разработка приложений на С++ и С# / Н.Ю.Секунов .— М.и др. :
Питер, 2003 .— 608с. — (Б-ка программиста) . <3>
11. Рихтер, Д. Windows для профессионалов : Создание эффективных Win32-
приложений с учетом специфики 64-разрядной версии Windows / Д.Рихтер;Пер.с
англ.:Ю.Е.Е.Купцевич,А.Р.Врублевский;Под общ.ред.Ю.Е.Купцевича .— 4-е изд.
— М.и др. : Питер, 2004 .— 722с.<3>

30

Оценить