
- •Московский государственный институт электроники и математики
- •1. Назначение и объем курсовой работы
- •2. Разработка технического задания
- •3. Содержание отчета
- •4. Задание на курсовую работу
- •5. Постановка задачи
- •6. Внешняя спецификация программы
- •7. Метод решения задачи
- •8. Описание алгоритма
- •8.1. Структура данных
- •8.2. Выделение подпрограмм
- •8.3. Алгоритмы главной программы и подпрограмм
- •9. Структура программы
- •10. Пример программы
- •11. Варианты индивидуальных заданий
- •12. Библиографический список
- •109028 Москва, б. Трехсвятительский пер., 3/12.
- •113054 Москва, ул. М. Пионерская, 12
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();
}