Задача А. Програмування задачі А з лабораторної роботи виконується діями і командами, яки наведени далі.
Крок 1. На диску D:\ створіть папку Lab_5.
Крок 2. Після запуску у роботу С++ Buіlder у меню Fіle виконайте
команду New. У результаті відкриється вікно New Іtems, де вибіраємо Consol Wіzard.
Крок 3. У вікні редактора коду наберіть наступний текст програми і виконайте компіляцію:
/***************************************************/
// Структура даних до трикутника з вершинами
// 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(" робота N5");
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;
}
//---------------------------------------------------------------------------
Задача Б. Для файлу створеного до задачі А з лабораторної роботи № 5 виконуємо команди програмного відладчика С++ Builer, яки наведені у пункті 5.2. Необхідно вивчити методику використання наступних команд програмного відладчика:
- команди майстра з оцінки виразів (Tooltip Expression Evaluation);
- команди вікна спостережень у програмі значень змінних (Watch List);
- команди вікна з оцінки і модифікації значень (Evaluate/Modify);
- команди з використання крапок переривання без хрестиків (breakpoint);
- команди з спостереження появи хрестиків на breakpoint;
- трасування програми С++ по кроках командами з таблиці 5-1.
Таблиця 5-1.
Команда | "Гарячі" клавіші | Дія команди |
Step Over (По кроках без заходу в….) | F8 | Покрокове виконання рядків програми, вважаючи виклик функції за один рядок, тобто вхід у функцію не виконується. |
Trace Into (Трасування з заходом у...) | F7 | Покрокове виконання рядків програми з заходом у функцію, яка буде визвана. |
Trace to Next Source Line (Трасування до наступного рядка) | Shift+F7 | Перехід до наступного рядку програми, що виконується. |
Run toCursor (Виконати до курсора) | F4 | Виконується програма до того місця (виконуємого оператора), де розташован курсор у програмі. |
Run Until Return (Виконати до виходу з функції) | Shift+F8 | Виконання програми до виходу з викликаної функції з зупинкою на операторі, що викликає функцію. |
Show Execution Point (Показати крапку виконання) | - | Міститься курсор на операторі, що буде виконуватись наступним. |
5.5 Контрольні питання до лабораторної роботи № 5
1. Пояснить, до яких задач необхідно у програмах С++ оголошувати
змінні з данимі типу "структура".
2. Покажить можливі варіанти оголошення структур.
3. Пояснить правила запису значень і читання значень у полях змінної структурного типу і покажчика на структуру.
4. Покажить формат оголошення структур з бітовими полями.
5. Покажить дію команд з трасировки програми С++ по кроках.
6. Покажить методику використання команди breakpoint для пошуку
помилок у програмних модулях до прикладної програми С++.