Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба ИССЛЕДОВАНИЕ ВИДЕОСИСТЕМЫ (ГРАФИЧЕСКИЙ РЕЖИМ) ЭВМ.docx
Скачиваний:
4
Добавлен:
08.07.2025
Размер:
2 Мб
Скачать
☆
  1. Задание на лабораторную работу

  1. Разработать программу для вывода на экран функции sin2(x/2)-sqrt(x). График должен быть отрисован в диапазоне от π/2 до 13π;

  2. Произвести разметку осей и проставить истинные значения точек;

  3. Найти максимальное значение функции на заданном интервале и вывести в отдельное окно на экране вместе с графиком.

  1. Алгоритмы и тексты отлаженных программ

Функция Func (Рисунок 1), определяющая заданную функцию.

Рисунок 1 — Функция Func

Функция DrawLine (Рисунок 2), обеспечивающая построение линии заданной функции.

Рисунок 2 — Функция DrawLine

Функция ScaleX (Рисунок 3), задающая нужный масштаб относительно центра.

Рисунок 3 — Функция ScaleX

Фукция ScaleY, задающая нужный масштаб координаты относительно центра.

Рисунок 4 — Функция ScaleY

Функция main (Рисунок 5 - а, б), обеспечивающая выполнение основного задания.

Рисунок 5(а) — Функция main - начало.

Рисунок 5(б) — Функция main - конец

Текст программы:

#include <graphics.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <dos.h>

const int SCALE = 13;

const int SCALEY = 30;

const double PI = 3.14159;

double Func(double x)

{

return pow(sin(x / 2), 2) - sqrt(x);

}

void DrawLine(int moveToX, int moveToY, int drawX, int drawY, int color)

{

moveto(moveToX, moveToY);

setcolor(color);

lineto(drawX, drawY);

}

double ScaleX(double x, int x_center)

{

return x_center + int(x * SCALE);

}

double ScaleY(double y, int y_center)

{

return y_center + int(y * SCALEY);

}

int main(void)

{

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode, "c:/turboc3/bgi");

errorcode = graphresult();

if (errorcode != grOk)

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

}

int WIDTH = getmaxx(), HEIGHT = getmaxy();

setbkcolor(15);

cleardevice();

int center_x = 40, center_y = HEIGHT / 2;

DrawLine(center_x - 20, center_y, WIDTH - 20, center_y, 9);

DrawLine(center_x, 20, center_x, HEIGHT - 20, 9);

float n = 0.5;

char temp_ar1[6];

for (int x_d = SCALE * (PI / 2) + center_x; x_d < WIDTH - 20; x_d += SCALE * (PI * 2.5))

{

DrawLine(x_d, center_y + 5, x_d, center_y - 5, 9);

sprintf(temp_ar1, "%.1f", n);

outtextxy(x_d - 15, center_y + 7, temp_ar1);

sprintf(temp_ar1, "Pi");

outtextxy(x_d - 13, center_y + 16, temp_ar1);

n += 2.5;

}

int v = 1, y_d;

char temp_ar2[2];

int digit_height = textheight("0");

outtextxy(center_x - 13, center_y + (digit_height)-1, "0");

for (y_d = center_y - SCALEY; y_d >= 20; y_d -= 1 * SCALEY)

{

DrawLine(center_x - 5, y_d, center_x + 5, y_d, 9);

sprintf(temp_ar2, "%i", v++);

outtextxy(center_x - 13, y_d - 4, temp_ar2);

}

int miunus_width = textwidth("-");

int z = 1;

for (y_d = center_y + SCALEY; y_d <= HEIGHT - 20; y_d += 1 * SCALEY)

{

DrawLine(center_x - 5, y_d, center_x + 5, y_d, 9);

sprintf(temp_ar2, "-%i", z++);

outtextxy(center_x - (13 + miunus_width), y_d - 4, temp_ar2);

}

double max_y = -1000.0;

for (double x = PI / 2; x <= PI * 13; x += 0.01)

{

double y = Func(x);

if (max_y < y)

max_y = y;

putpixel(ScaleX(x, center_x), ScaleY(-y, center_y), 12);

delay(1);

}

setcolor(9);

setlinestyle(0, 1, 3);

rectangle(WIDTH - 450, HEIGHT - 400, WIDTH - 190, HEIGHT - 350);

settextstyle(0, HORIZ_DIR, 2);

char temp_ar3[20];

sprintf(temp_ar3, "f(x) max = %.1f", max_y);

outtextxy(WIDTH - 440, HEIGHT - 380, temp_ar3);

getch();

closegraph();

return 0;

}