Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KURS_09.DOC
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
248.32 Кб
Скачать

9. Структура программы

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

Н азначение подпрограмм:

input -

ввод исходных данных;

menu -

выбор номера функции;

initialization-

инициализация графического режима;

osi -

построение координатных осей и единичных отрезков на осях;

points

построение точек графика.

10. Пример программы

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

//построение графика функции

//подключение библиотек

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <math.h>

#include <graphics.h>

//пропуск символов до конца строки

#define CLR while (getchar()!='\n')

/*Вычисление значения функции

возвращает значение f(x), k -номер функции*/

float fun(float x, int k)

{

switch(k)

{

case 1: return(sin(x));

case 2: return(cos(x));

case 3: return( x*x);

case 4: return(x);

}

}

//инициализация графического режима

void initialization()

{ /* автоматическое определение типа драйвера*/

int gdriver = DETECT, gmode, errorcode;

/* инициализация графического режима

указан путь к файлу egavga.bgi*/

initgraph(&gdriver, &gmode, "c:\\turboc30\\bgi");

/* чтение результатов инициализации */

errorcode = graphresult();

if (errorcode != grOk) /* при обнаружении ошибки выво дится сообщение*/

{

printf("Ошибка при инициализации графического режима: %s\n", grapherrormsg(errorcode));

printf("Нажмите любую клавишу для завершения работы программы:");

getch();

exit(1); /* возврат с кодом ошибки */

}

}

/*построение осей координат, единичных отрезков и вывод надписей к осям

mx, my – масштабные коэффициенты для осей Ox, Oy

*/

void osi( int mx, int my)

{ int maxx=getmaxx(),maxy=getmaxy(),xm,ym,nx,ny;

float x,y;

/* maxx, maxy – макcимальные координаты точки по осям Ox, Oy,

nx, ny – количество единичных отрезков от 0 до конца экрана,

x, y – математические координаты точки,

xm, ym – экранные (машинные) координаты точки

*/

// рисование осей

line( (int)(maxx/2),0, (int)(maxx/2), maxy);

line(0, (int)(maxy/2),maxx-16, (int)(maxy/2));

//надписи к осям

outtextxy((int)(maxx/2)-3, 0,"^ y");

outtextxy(maxx-21,(int)(maxy/2)-3,">x");

//единичные отрезки на осях

//количество точек масштаба

nx=(int)(maxx/(2*mx));

ny=(int)(maxy/(2*my));

//отрезки для оси Ox

y=0;

ym=(int)(maxy/2) -(int)(y*my);

for(x=-nx;x<=nx;x++)

{

xm=(int)(maxx/2) +(int)(x*mx);

putpixel(xm,ym,1);

}

//отрезки для оси Oy

x=0;

xm=(int)(maxx/2) +(int)(x*mx);

for(y=-ny;y<=ny;y++)

{

ym=(int)(maxy/2) -(int)(y*my);

putpixel(xm,ym,1);

}

}

//ввод исходных данных

/* a, b – границы отрезка для построения графика,

step – шаг, mx, my – масштабные коэффициенты по осям Ox и Oy

*/

void input(float *a, float *b, float *step, int *mx, int *my)

{

clrscr();

puts("Построение графиков функций ");

do{

puts("Введите a, b (a<b): ");

scanf("%f%f",a,b);

}

while (*a>=*b);

do{

puts("Введите step (step>0): ");

scanf("%f",step);

}

while(*step<=0);

do{

puts("Введите mx, my (mx>0, my>0): ");

scanf("%d%d",mx,my);

}

while (*mx<=0||*my<=0);

CLR;

}

// построение точек графика

void points(float a, float b, float step, int mx, int my, int k)

{ float x,y;

int xm,ym;

int maxx=getmaxx(),maxy=getmaxy();

for(x=a;x<=b;x+=step)

{// вычисление y=f(x)

y=fun(x,k);

//вычисление машинных координат точки графика

xm=(int)(maxx/2) +(int)(x*mx);

ym=(int)(maxy/2) -(int)(y*my);

putpixel(xm,ym,6);//рисование точки

}

outtextxy(20, maxy-10,"Нажмите любую клавишу");

getch();

// ожидание нажатия клавиши

}

/* выбор функции по номеру

n – количество пунктов меню,

h,v – координаты для начала вывода меню(в знакоместах)

*/

int menu(int n, int h, int v)

{// пункты меню

char * punkt[]=

{

"1. sin(x)",

"2. cos(x)",

"3. x*x",

"4. x"

} ;

int i,k, ch;

// i – счетчик цикла, k – номер выбранного пункта //меню,

// ch – символ (ответ пользователя)

clrscr();

gotoxy(h,v);//перемещение курсора на знакоместо с ко//ординатами (h,v)

puts("Выберите функцию для построения графика");

v+=2;

//вывод пунктов меню

for(i=0;i<n;i++,v++)

{

gotoxy(h,v);

puts(punkt[i]);

}

++v;

//ввод ответа пользователя

do

{

gotoxy(h,v);

printf("Введите номер функции: ");

ch=getchar();

CLR;

}

while (ch<'1'||ch-'0'>n);

k=ch-'0';// преобразование ответа пользователя из //строки в число

return(k);

}

//главная функция

void main()

{

float a,b,x,y,step;

int mx,my,k;

input(&a, &b, &step, &mx, &my);

k=menu(4,10,10);

initialization();

osi(mx,my);

points( a, b, step, mx, my,k);

/* закрытие графического режима */

closegraph();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]