Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методуказания II семестр

.pdf
Скачиваний:
9
Добавлен:
02.06.2015
Размер:
2.32 Mб
Скачать

Drawing2D :: DashStyle).

Стиль:

DashStyle::Dash

Прерывистая линия

DashStyle::DashDot

Линия – точка

DashStyle::DashDotDot

Линия – точка – точка

DashStyle::DashDot

Линия точками

DashStyle::Solid

Сплошная линия

Замкнутые фигуры можно закрашивать: однородным цветом (SolidBrush), штриховкой

(HatchBrush), текстурой (TextureBrush), линейным градиентом (LinearGradientBrush) и траекторный градиент (PathGradientBrush).

Примеры

Линии, прямоугольники, эллипсы

Graphics^ g = pictureBox1->CreateGraphics();// Создает графический объект и

// связываем его с графическим окном g->Clear(Color::White) ; // цвет фона задаем белым

// Рисуем линию определенного стиля

Pen^ pen1 = gcnew Pen(Color::Blue, 3.0); // создаем перо синего цвета и толщиной 3пик Pen1->DashStyle = System::Drawing::Drawing2D::DashStyle::Dash; // задаем стиль пера g->DrawLine(pen1, 20,120, 100,60); // рисуем линию

// Рисуем закрашенный квадрат

SolidBrush^ sb1 = gcnew SolidBrush(Color::Red); // задаем заливку g->FillRectangle(sb1, 60,30, 40,40); // рисуем закрашенный квадрат

//Рисуем закрашенный прямоугольник и его окантовку

SolidBrush^ sb2 = gcnew SolidBrush(Color::Yellow); Pen^ pen2 = gcnew Pen(Color::Aqua, 2.0);

Pen2->DashStyle = System::Drawing::Drawing2D::DashStyle::Dot; g->FillRectangle(sb2, 90,40, 60,45);

g->DrawRectangle(pen2, 90,40, 60,45);

//Рисуем закрашенный эллипс

HatchBrush^ hb1 = gcnew HatchBrush(HatchStyle::DiagonalCross, Color::Black, Color::Green);

g->FillEllipse(hb1, 30,100, 65,50); // Рисуем наклонный эллипс

Pen^ pen3 = gcnew Pen(Color::Fuchsia, 2.0);

pen3->DashStyle = System::Drawing::Drawing2D::DashStyle::DashDotDot; g->ResetTransform();

g->RotateTransform(45); g->DrawEllipse(pen3, 70, -10, 100, 50);

Кардинальные сплайны (Cardinal Spline)

Graphics^ g = pictureBox1->CreateGraphics(); g->Clear(Color::White);

Point point1 = Point(0,100); Point point2 = Point(50,80); Point point3 = Point(100,20); Point point4 = Point(150,80); Point point5 = Point(200,100);

array<Point>^ curvePoints = {point1,point2,point3,point4,point5}; Pen^ pen = gcnew Pen(System::Drawing::Color::Aquamarine, 2); g->DrawCurve(pen, curvePoints);

21

Ход работы:

 

Построить график функции

 

 

 

 

ρ= a cos2 ϕ b sin 2 ϕ

 

 

 

 

a= 40 , 0ϕ , Δϕ = 0,05 , для b :10b100 , заданный в полярных координатах

1.

 

Создайте проект для проектирования приложения с графическим интерфейсом, и

назовите его, например, «Графика, ваша_фамилия» (Графика, Иванов Виктор).

2.

 

Для объекта Форма установите следующие свойства в окне свойств объекта:

 

 

Свойство

Значение

 

 

 

 

Text

Графика, Иванов Виктор (Ваша фамилия)

 

 

 

 

StartPosition

CenterScreen

 

 

3.

 

Добавим объект PictureBox (Графическое окно)

.

 

PictureBox (Графическое окно) - окно, которое может использоваться для отображения графических объектов в различных форматах и графических элементов.

В свойство Name обычно добавляют префикс pct. Установим свойства графического окна:

Свойство

Значение

Name

pctDraw

BorderStyle

FixedSingle

Size

272; 272

4. Добавим метку и установим ее свойства

Свойство

Значение

Name

lblb

Font

Comic Sans MS; 12pt; style=Bold

Text

b=65

TextAlign

MiddleCenter

5. Добавим объект HScrollBar (Горизонтальная полоса прокрутки)

.

HScrollBar (Горизонтальная полоса прокрутки)

используется для реализации

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

Основные свойства полосы прокрутки:

Value – значение полосы прокрутки.

Minimum, Maximum – минимальное и максимальное значение; SmallChange – шаг изменения.

В свойство Name обычно добавляют префикс scr.

Основное событие:

Scroll – реакция на изменение значения.

Установим свойства полосы прокрутки

Свойство

Значение

Name

scrb

Maximum

109

Minimum

10

Value

65

22

6.Добавим две кнопки и установим для них свойства

Name

Text

btnDraw

Нарисовать

btnExit

Выход

7.В результате получим форму

8.Сразу после строки

#pragma endregion

и перед

}; }

float x2,y2; static int a=40;

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

Функции приложения (сразу после объявления глобальных переменных)

! Функции приложения прописываются полностью: и заголовок, и тело функции.

(3) Функция вычисления значений координат private: System::Void func(float f, int b)

{

x2 = (a * pow(cos(f),2) - b * pow(sin(f),2)) * cos(f); y2 = (a * pow(cos(f),2) - b * pow(sin(f),2)) * sin(f);

}

Событие Формы

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

(1) Закрытие формы

private: System::Void btnExit_Click(System::Object * sender, System::EventArgs * e)

{

Close(); // закрытие формы

}

Событие Полосы прокрутки

(2) Отображение в метке значения полосы прокрутки

private: System::Void scrb_Scroll(System::Object^ sender, System::Windows::Forms::ScrollEventArgs^ e)

{

lblb->Text=String::Concat("b = ", (scrb->Value).ToString()); // Функция

String::Concat соединяет все элементы (строковые), в одну строку // Функция ToString() преобразует число в строку

}

23

Событие Кнопки

(4) Рисование графика функции

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

{

int b=scrb->Value; // запись в переменную значения полосы прокрутки float h=0.05,k_max,tt,x1,y1; // h - шаг

for(float f=0;f<=2*System::Math::PI;f=f+h) // определяем максимальное значение координат для правильного масштабирования

{

func(f,b); // вызов функции для вычисления значений координат if(f==0) // если первый шаг цикла

k_max=(x2>y2) ? x2 : y2; // в k_max записываем максимальное из значений координат

else

{

tt=(x2>y2) ? x2 : y2; // в tt записываем макс.из значений координат k_max=(tt>k_max) ? tt : k_max; // в k_max записываем макс.значение

}

}

Graphics^ g = pctDraw->CreateGraphics(); // создаем объект класса Graphics для объекта PictureBox pctDraw, на котором будет отображаться график функции

g->Clear(Color::White) ; // очищаем графич. окно белым цветом int pict_size=(pctDraw->Width<pctDraw->Height)? pctDraw->Width : pctDraw->Height; //

запоминаем минимальное значение из размеров графич. окна pict_size/=2;

g->ScaleTransform(pict_size/k_max, pict_size/k_max); // масштабируем будущий рисунок, чтобы он заполнил всю область рисования

g->TranslateTransform(pctDraw->Width/2, pctDraw->Height/2, Drawing2D::MatrixOrder::Append); // перемещаем точку начала координат на середину объекта

Pen^ p=gcnew Pen(Color::Black); // создаем объект перо для рисования графика черным цветом

g->DrawLine(p, -pctDraw->Width/2, 0.0, pctDraw->Width/2, 0.0); // рисуем ось Х g->DrawLine(p, 0.0, -pctDraw->Height/2, 0.0, pctDraw->Height/2);// рисуем ось Y float f = 0;

func(f,b); // вызов функции для вычисления значений координат x1 = x2; // запоминаем вычисленные координаты в точку начала y1 = y2; // -||-

p->Color=Color::Green; // задаем цвет пера как зеленый int xmax=0, ymax=0;

for(float f=h;f<=2*System::Math::PI+h;f=f+h) // цикл рисования графика

{

func(f,b); // вычисляем координаты последней точки

g->DrawLine (p, x1, y1, x2, y2); // рисуем линию с координатами

x1 = x2; // запоминаем координаты последней точки в качестве начальной y1 = y2; // -||-

xmax=(x1>xmax) ? x1 : xmax; // запоминаем макс. значение координаты Х ymax=(y1>ymax) ? y1 : ymax; // запоминаем макс. значение координаты У

}

g->DrawString( (xmax).ToString(),gcnew Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), xmax,0, gcnew StringFormat()); // пишем значение максимальной точки по Х

g->DrawString( (ymax).ToString(),gcnew Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), 0, -ymax, gcnew StringFormat());// пишем значение максимальной точки по У

delete p;

}

24

ПРИМЕР ОФОРМЛЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ

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

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

ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Факультет социально-экономический Кафедра «Прикладная информатика»

Лабораторная работа № __

Вар__

по дисциплине «Информатика и программирование»

Выполнил

 

 

студент гр.

_______________

/ Иванов И.С./

 

(дата, подпись)

Проверила

 

 

ст. преп.каф.БИ

_______________

/ Козьминых Н.М./

 

(дата, подпись)

2010

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

ρ=acos2 ϕ b sin2 ϕ

a= 40 , 0ϕ , Δϕ = 0,05 , для b:10b100

25

Эскиз формы во время разработки и вид формы во время выполнения

Таблица свойств объектов

Объект

Name

Другие свойства

Button

btnDraw

Text:= Нарисовать

btnExit

Text: Выход

 

 

lblb

Font: Comic Sans MS; 12pt; style=Bold

Label

 

Text: b=65

 

 

TextAlign: MiddleCenter

PictureBox

pctDraw

BorderStyle: FixedSingle

 

scrb

Maximum: 109

HScrollBar

 

Minimum: 10

 

 

Value: 65

Список идентификаторов

Область видимости

 

Назначение

 

 

Иденти-

Тип

 

 

 

 

 

фикатор

 

Глобальные

Переменные координат

 

 

x2, y2

float

Статическая переменная коэффициента

 

а

static int

 

 

 

Переменные координат

 

 

x1, y1

float

 

Переменная коэффициента

 

 

b

int

 

Переменная угла

 

 

f

float

Локальные

Переменная шага

 

 

h

float

Переменная

максимального

из

значений

k_max

float

 

координат для масштабирования графика

 

 

 

 

 

 

 

 

 

 

Временная переменная

 

 

tt

float

 

Переменная минимального значения из размеров

pict_size

int

 

графического окна

 

 

 

 

Программные коды

stdafx.h – файл с подключаемыми библиотеками проекта

#include <stdlib.h> #include <malloc.h> #include <memory.h> #include <tchar.h> #include <math.h>

Form.h – файл формы проекта

float x2,y2; static int a=40;

26

Функции приложения

Функция вычисления значений координат private: System::Void func(float f, int b){

x2 = (a * pow(cos(f),2) - b * pow(sin(f),2)) * cos(f); y2 = (a * pow(cos(f),2) - b * pow(sin(f),2)) * sin(f);

}

Событие Формы

Закрытие формы

private: System::Void btnExit_Click(System::Object^ sender, System::EventArgs^ e){ Close();

}

Событие Полосы прокрутки

Отображение в метке значения полосы прокрутки

private: System::Void scrb_Scroll(System::Object^ sender, System::Windows::Forms::ScrollEventArgs^ e){

lblb->Text=String::Concat("b = ", (scrb->Value).ToString());

}

Событие Кнопки

Рисование графика функции

private: System::Void btnDraw_Click(System::Object^ sender, System::EventArgs^ e){ int b=scrb->Value;

float h=0.05,k_max,tt,x1,y1;

for(float f=0;f<=2*System::Math::PI;f=f+h)

{

func(f,b); if(f==0)

k_max=(x2>y2) ? x2 : y2;

else

{

tt=(x2>y2) ? x2 : y2; k_max=(tt>k_max) ? tt : k_max;

}

}

Graphics^ g = pctDraw->CreateGraphics(); g->Clear(Color::White) ;

int pict_size=(pctDraw->Width<pctDraw->Height)? pctDraw->Width : pctDraw->Height; pict_size/=2;

g->ScaleTransform(pict_size/k_max, pict_size/k_max); g->TranslateTransform(pctDraw->Width/2, pctDraw->Height/2,

Drawing2D::MatrixOrder::Append); Pen^ p=gcnew Pen(Color::Black);

g->DrawLine(p, -pctDraw->Width/2, 0.0, pctDraw->Width/2, 0.0); g->DrawLine(p, 0.0, -pctDraw->Height/2, 0.0, pctDraw->Height/2); func(f,b);

x1 = x2;

y1 = y2; p->Color=Color::Green; int xmax=0, ymax=0;

for(float f=h;f<=2*System::Math::PI+h;f=f+h)

{

func(f,b);

g->DrawLine (p, x1, y1, x2, y2); x1 = x2;

y1 = y2;

xmax=(x1>xmax) ? x1 : xmax; ymax=(y1>ymax) ? y1 : ymax;

}

g->DrawString( (xmax).ToString(),gcnew Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), xmax,0, gcnew StringFormat());

g->DrawString( (ymax).ToString(),gcnew Drawing::Font("Arial", 8), gcnew SolidBrush(Color::Black), 0, -ymax, gcnew StringFormat());

}

27

ЛАБОРАТОРНАЯ РАБОТА №9

Работа с массивами

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

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

Задание: создать приложение для работы с одномерными массивами, для решения следующих задач:

1.Четные элементы массива переставить в конец массива.

2.Вставить заданное число перед последним положительным элементом.

Требование к отчету:

1.Номер и название лабораторной работы.

2.Текст задания.

3.Структура приложения.

4.Таблица свойств объектов.

5.Список идентификаторов.

6.Блок-схема алгоритма.

7.Программные коды.

Создадим приложение для работы с одномерными массивами, причем управление приложением будет возможно как при помощи кнопки мыши, так и при помощи только клавиатуры. Ход работы:

6.

Создайте проект для проектирования приложения с графическим интерфейсом, и

назовите его, например, вашей фамилией с номером лабораторной работы (Иванов6).

7.

Для объекта Форма установите следующие свойства в окне свойств объекта:

 

Свойство

Значение

 

 

Text

 

Работа с массивом, Иванов Виктор (Ваша фамилия)

 

 

StartPosition

CenterScreen

 

 

8.

Для приложения создадим меню.

Объект меню предоставляет следующие возможности:

1.эффективное использование пространства экрана;

2.меню для пользователей является привычным элементом. Создание меню:

3.поместите на форму объект меню ;

4.внизу окна дизайнера форм появится соответствующий значок, выделите его;

5.в верхнем левом углу разрабатываемой формы появится прямоугольник с текстом

TypeHere;

6.нажмите на него правой кнопкой мыши и выберите пункт Insert New (Вставить Новый);

7.в окне свойств можно изменить его свойства, в том числе Name (Имя объекта) и Text (Информация, выводимая на экран), например, mnuTask и Задачи соответственно, где mnu – префикс;

8.для создания подменю на нижележащий TypeHere нажмите правой кнопкой мыши и выберите пункт Insert New и т.д.

28

Создайте меню следующего вида со следующими свойствами:

Name

Text

Другие свойства

mnuTask

Задачи

Enabled = False

mnu1

Задача 1

-

mnu2

Задача 2

-

mnuExit

Выход

-

9.Добавим в проект объект Panel (Панель) .

Панель – это контейнер, который служит для объединения элементов в группу, после чего, помещенными в него объектами, можно управлять как единым целым.

Основные свойства панели: Name, BackColor, ForeColor, Font, Enabled, Locked, Visible, Size и

др.

В свойство Name обычно добавляют префикс pnl. Поместите его на форму следующим

образом и определите свойства

Свойство

Значение

Name

pnlz

Visible

False

10. Добавим в проект объект GroupBox (Рамка) . Рамка – это контейнер, который служит для

объединения элементов в группу, после чего, помещенными в него объектами, можно управлять как единым целым.

Основные свойства рамки : Name, Text, BackColor, ForeColor, Font, Enabled, Locked, Visible, Size и др.

В свойство Name обычно добавляют префикс grb.

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

Name

Text

Visible

grbEl

Ввод элементов массива

False

grbBasic

Исходный массив

False

grbWork

Результат

False

11. Поместите на форму, уже известные вам объекты, метки (Label), текстовые окна (TextBox), кнопки (Button) со следующими свойствами:

Контейнер

Объект

Name

Text

Другие свойства

 

Label

lblVvod

Введите количество элементов

 

Form

 

 

 

 

TextBox

txtN

 

 

 

Button

btnN

Ок

 

 

Label

lblz

Введите задан.зн.

 

pnlz

TextBox

txtz

 

 

 

Button

btnz

Ок

 

 

Label

lblEl

Введите 1 элем.

Visible=false

 

TextBox

txtEl

 

Visible=false

grbEl

 

btnEl

Ок

Visible=false

 

Button

 

 

 

 

btnRnd

Случайным образом

 

 

 

btnKlav

С клавиатуры

 

grbWork

Label

lblTask

 

 

29

12.Добавим в проект объект ListView (Список просмотра).

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

Контейнер

Name

GridLines

View

grbBasic

lvBasic

True

Details

grbWork

lvWork

True

Details

13.В результате получим форму

14.Объявим глобальные переменные

int n, *a, *b;

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

Функции приложения (сразу после объявления глобальных переменных)

! Функции приложения прописываются полностью: и заголовок, и тело функции.

(6) Функция вывода элементов массива на экран

private:System::Void vivod(GroupBox^ grb,ListView^ lv,int * w,int kol,String^ text){ grb->Visible=true; // объект GroupBox сделать видимым

if(text!="") // если параметр text не пустой

lblTask->Text=text; // в метку выводим значение параметра text lv->Clear(); // очищаем объект ListView

ListViewItem^ item1 = gcnew ListViewItem(); // создаем объект элемента строки lv->Columns->Add(S"", 30, HorizontalAlignment::Center); // создаем заголовок

(столбец) для первого элемента строки

item1->Text=S"Arr[]"; // присваиваем этому элементу значение for(int i=0;i<kol;i++)

{

30