- •Методические указания
- •Часть 2
- •Лабораторна робота № 1
- •Загальні зведення про компоненти для розробки меню команд і вбудовування малюнків та значків на форму програми
- •Лабораторная работа № 2
- •Лабораторная работа № 3
- •Общие сведения о видах команд отладки для поиска
- •2. Постановка задач лабораторной работы
- •Лабораторная работа № 4
- •Общие сведения
- •Лабораторная работа № 5
- •Общие сведения о компонентах, инструментах для рисования
- •Лабораторная работа № 6 Обработка событий мышки в приложении Windows
- •1. Общие сведения о событиях мышки
- •2. Постановка задачи лабораторной работы.
- •3. Порядок действий и команд при выполнении работы.
- •Лабораторная работа № 7
- •Результат работы программы
- •Лабораторная работа № 8
- •Шаг 4. Установите на форму компоненты ListView1 и ListView2 , как это показано рис.3.
- •Лабораторная работа № 9
- •Лабораторная работа № 10
Лабораторная работа № 2
Данные типа “структура” и их применение в программах С++
Цель лабораторной работы состоит в изучении методики применения данных типа «структура» в программах. Одновременно изучается техника применения редактора кода для работы с текстами отдельных программных модулей и применение программного отладчика C++ Builder. Изучается техника применения команд отладчика для поиска ошибок в исходных текстах программных модулей создаваемого приложения.
Общие сведения о данных типа “структура”
Структуры – это составной тип данных создаваемый программистом, который строится с использованием других типов данных. Структуры представляют собой объединенный общим именем набор данных различных типов. Именно этим отличаются структуры, что в них могут хранится данные различных типов, например, в массивах хранятся данные одного типа. Данные структуры называются элементами или полями структуры. Формат объявления структуры имеет такой вид
struct <ярлык_структуры> {
тип_данных переменная1;
тип_данных переменная2;
…………………………….;
}<имя_переменной>;
Ярлык структуры позволяет объявлять новые переменные структурного типа с указанным ярлыком. В объявлении структуры обязательно должнен быть задан или «ярлык_структуры» или «имя_переменной». Например, можно объявить такую структуру
struct point {
float x;
float y;
float z;
};
или структуру в таком виде
struct {
float x;
float y;
float z;
}P1;
В языке програмирования С++ структуры наделены дополнительными возможностями:
первое- это можно в качестве элемента структуры указывать определение функции
struct point {
float x;
float y;
float z;
show()
{ printf(”/n %f”, x);
}
};
второе – можно указывать в структуре спецификаторы доступа к данным –элементам и функциям-элементам, как это делается в классах. Разрешается применять спецификаторы public(открытый) и private(закрытый). Закрытые элементы структуры могут быть доступны только для функций-элементов этой структуры. Ни через объект, ни через указатель на объект доступ к ним невозможен. Закрытыми объявляются какие-то вспомогательные данные-элементы не представляющие интереса для пользователя, а также вспомогательные функции(утилиты), требующиеся для работы некоторых других основных функций-элементов структуры.
Открытые элементы структуры могут быть доступны для любых функций в программе. Например, в следующем объявлении структуры
struct MyStr{
int x,y;
int Get();
private:
int a,b;
void F();
};
данные х и у и функция Get() – открытые и могут использоваться при работе со структурой, а данные а и b и функция F() – закрытые и ими может пользоваться только функция Get().
Структура может иметь элементы с побитовыми полями, т. е элемент может занимать заданное количество бит
struct pole_bit {
unsignit char x : 3;
unsignit char y : 5;
};
Постановка задачи лабораторной работы. Необходимо создать с мощью Consol Wizard исполняемый файл программы, в которой задаются координаты для трех точек на плоскости и затем строится поле и на этом поле в масштабе показываются введенные точки.
Порядок действий и команд при выполнении данной лабораторной работы:
На диске D:\ создайте папку Lab_7.
После запуска в работу С++ Builder в меню File выполните команду New. В результате откроется окно New Items, где выбирите Consol Wizard.
В окне редактора кодов наберите следующий исходный текст программы и выполните компиляцию
/***************************************************/
// Вычислить площадь треугольника,заданного своими
// вершинами P1(x1,y1), P2(x2,y2), Р3(x3,y3)
/***************************************************/
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <alloc.h>
#define Xmax 52 /* 52 */
#define Xmin 5 /* 1 */
#define Ymax 21 /* 25 */
#define Ymin 3 /* 1 */
struct point {
float x,y;
} k[2] ;
/* функция задания координат вершин треугольника*/
point * scan_xy( void )
{
gotoxy(44,1);
printf("Введите координаты вершин треугольника:");
gotoxy(62,2);
printf(" вершина P1(x1,y1) ");
gotoxy(66,3);
printf(" x1="); scanf("%f",&k[0].x);
gotoxy(66,4);
printf(" y1="); scanf("%f",&k[0].y);
gotoxy(62,5);
printf(" вершина P2(x2,y2) ");
gotoxy(66,6);
printf(" x2="); scanf("%f",&k[1].x);
gotoxy(66,7);
printf(" y2="); scanf("%f",&k[1].y);
gotoxy(62,8);
printf(" вершина P3(x3,y3) ");
gotoxy(66,9);
printf(" x3="); scanf("%f",&k[2].x);
gotoxy(66,10);
printf(" y3="); scanf("%f",&k[2].y);
return k;
}
/* функция вычисления коэффициентов для */
/* масштабирования координат рисунка */
float * m_ko( struct point k[] )
{
float xma,xmi,ymi,yma;
static float * mk;
int i;
xma = k[0].x; xmi = k[0].x;
yma = k[0].y; ymi = k[0].y;
for(i=0; i<=2; i++)
{
if( k[i].x > xma)
xma = k[i].x;
if( k[i].x < xmi)
xmi = k[i].x;
}
for( i=0; i<=2; i++)
{
if( k[i].y > yma)
yma = k[i].y;
if( k[i].y < ymi)
ymi = k[i].y;
}
mk = ( float *) calloc( 2, sizeof( float ));
* mk= yma;
*( mk + 1 ) = xma;
return mk;
}
/* функция расчета масштабированных координат*/
/* вершин треугольника и их вывод на рисунок*/
void out_point( struct point k[], float mk[])
{ int i;
double x,y;
float s;
for( i=0; i<=2; i++)
{
y = Ymax - ((k[i].y * (Ymax - Ymin))/mk[0]);
x = Xmin + ((k[i].x * (Xmax - Xmin))/mk[1]);
gotoxy( floor(x), floor(y)); textcolor(MAGENTA);
textbackground(WHITE); textcolor(BLACK );
cprintf("o"); gotoxy( floor(x) + 1, floor(y));
textmode(LASTMODE); textbackground(WHITE);
textcolor(BLACK);
cprintf("P%d\a",i + 1);
textmode(LASTMODE);
s = k[0].x *(k[1].y-k[2].y) + k[1].x *(k[2].y-k[0].y);
s = ( s + k[2].x *(k[0].y-k[1].y))/2;
gotoxy(40,23);
printf("Площдьа треугольника S=%f",fabs(s));
textbackground(WHITE);
gotoxy(1,23); textcolor(BLACK);
printf(" Лабораторная "); gotoxy(1,24);
printf(" работа N6 ");
textbackground(WHITE);
gotoxy(50,24); textcolor(BLACK);
printf(" Нажать любую клавишу ");
textmode(LASTMODE); gotoxy(3,22);
printf("0.00\t|\t|\t|\t|\t|\t%f ---> X ",mk[1]);
gotoxy(1,2);
printf("%f",mk[0]);
gotoxy(2,3); printf("Y ^");
gotoxy(4,4); printf("|");
gotoxy(4,5); printf("|");
gotoxy(4,6); printf("-");
gotoxy(4,10); printf("-");
gotoxy(4,15); printf("-");
gotoxy(4,20); printf("-");
gotoxy(78,24);
}
}
/*функция окрашивания поля под рисунок */
void pole( void)
{
int x,y;
for( y = Ymin; y <= Ymax; y++ )
{ for( x = Xmin; x <= Xmax; x++ )
{
gotoxy( x,y ); textbackground(GREEN );
cprintf(" ");
}
}
}
//------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
clrscr();
scan_xy();
pole();
out_point( k, m_ko(k));
getch();
return 0;
}
//---------------------------------------------------------------------------
Контрольные вопросы к лабораторной работе
Объясните, в каких задачах необходимо объявлять переменные типа “структура”.
Показать возможные варианты объявления структур.
Объясните правила записи данных и чтения данных в полях переменной структурного типа и указателя на структуру.
Показать формат объявления структур с битовыми полями.
Какие структуры используются в программах лабораторной работы.
Команды и техника применения программного отладчика С++ Builder
Дата _______________________
(відпрацювання лаб. роботи)
Студент___________________ Група ____________
Складови знань
Бали для оцінювання знань |
Уміння змінювати та налагоджувати алгоритм С++ програми |
Знання програмного та файлового забезпечення лабораторної роботи |
2,0 |
1,0 |
|
Набрані бали |
|
|
Дата __________________ Викладач ______________________
(захисту лаб. роботи) (підпис)
