Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

kurs_09

.pdf
Скачиваний:
5
Добавлен:
08.02.2015
Размер:
218.46 Кб
Скачать

11

при ошибке инициализации графического режима

Ошибка при инициализации

графического режима <<сообщение>>

Нажмите любую клавишу для завершения работы программы

работа программы завершается

при успешной инициализации графического режима при k=4

y

x

7. МЕТОД РЕШЕНИЯ ЗАДАЧИ

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

Для программы построения графиков функций метод решения можно описать следующим образом.

Вначале строятся оси координат и на осях откладываются единичные отрезки. При этом используются следующие переменные:

nx, ny – число единичных отрезков, откладываемых от 0 до конца отрезка соответствующей координатной оси, размещаемой на экране;

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

max, maxy максимальные координаты точки по осям Ox и Oy (т.е. мак- симальный размер экрана);

 

 

12

k номер функции (выбирается из меню);

a, b –

границы отрезка;

step –

расстояние между точками графика (шаг);

x, y

математические координаты точки экрана.

Количество единичных отрезков вычисляется по формулам:

nx =

max x

; ny =

max y

.

2 × mx

 

 

 

2 × my

При построении единичных отрезков используются следующие формулы. Для оси Ox:

= max y − × ym y my;

2

= max x + × xm x mx

для 2 шаг x=-nx; nx 1.

Для оси Oy те же формулы используются для y=-ny; ny шаг 1.

При построении графика используются приведенные выше формулы для xm, ym и вычисляются значения y=f(x) для x=a; b с шагом step.

13

y

(x,y)

X

(maxx/2;maxy/2)

8. ОПИСАНИЕ АЛГОРИТМА

В данном разделе необходимо привести полное описание алгоритма решения по- ставленной задачи. Описание должно отражать метод пошаговой детализации, используемый при разработке алгоритма: сначала описывается алгоритм главной программы, затем из неё выделяются подпрограммы, после чего описывается ал- горитм каждой подпрограммы и т.д. Описание алгоритма каждой подпрограммы включает описание исходных данных, результата, связи и текст алгоритма на псевдокоде с использованием базовых структур: простая последовательность дей- ствий, условная конструкция и цикл. Логические условия и действия, выполняе- мые в алгоритме, описываются словами.

8.1. Структура данных

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

nx, ny – число единичных отрезков, откладываемых от нуля до конца от- резка соответствующей координатной оси, размещаемой на экране;

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

max, maxy максимальные координаты точки по осям Ox и Oy (т.е. мак- симальный размер экрана);

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

 

 

 

14

x, y

координаты точки графика (математические координаты);

k номер функции (выбирается из меню):

 

o

при

k=1 f(x)=sin(x);

 

o

при

k=2 f(x)=cos(x);

 

o

при

k=3 f(x)=x*x;

 

o

при

k=4 f(x)=x;

a, b –

границы отрезка для построения графика;

step –

расстояние между точками графика (шаг).

8.2. Выделение подпрограмм

На основе анализа алгоритма главной программы выделяются основные подпро- граммы. Для каждой подпрограммы указывается её имя и выполняемые действия. Далее разрабатываются алгоритмы выделенных подпрограмм. Для каждой под- программы описываются исходные данные, результат и связь. На основе анализа алгоритмов могут выделяться новые подпрограммы. Например, для программы построения графиков функций можно выделить следующие подпрограммы:

input ввод исходных данных ( a, b, step, mx, my);

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

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

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

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

8.3. Алгоритмы главной программы и подпрограмм

В данном разделе приведены алгоритмы главной программы и подпрограмм. Для каждой из подпрограмм указаны входные и выходные параметры. Знак «-» указы- вает на отсутствие параметров. Допустимо приводить алгоритмы не для всех под- программ, а лишь для основных.

алг «fun(x) -вычисление значения функции» вход x, k

выход f(x)

нач выбор(k)

15

1: возврат (sin(x)) 2: возврат (cos(x)) 3: возврат ( x*x)

4: возврат (x)

квыбор

кон

алг «инициализация графического режима» вход - выход -

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

инициализация графического режима чтение результатов инициализации если ошибка инициализации то

вывод ("Ошибка при инициализации графического режима:", сообщение об ошибке);

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

возврат с кодом ошибки все

кон

алг «построение осей координат, единичных отрезков и вывод надписей к осям»

вход mx, my

выход

нач

maxx:=getmaxx(); maxy:=getmaxy();отрезок

(maxx/2,0, maxx/2, maxy); отрезок (0, maxy/2 ,maxx-16, maxy/2); надпись (maxx/2-3, 0,"^ y"); надпись(maxx-21, maxy/2-3,">x");

nx:=maxx/(2*mx)

ny:=maxy/(2*my)

y:=0

ym=maxy/2цикл от - y*myдо x:=-nx nx

xm:= maxx/2 + x*mx

16

кц точка (xm,ym,1)

x:=0;

xm:=цикл отmaxx/2 + доx*mx y:=-ny ny

ym:=maxy/2 -y*my конкц точка (xm,ym,1)

алг «ввод исходных данных» вход -

выход a, b, step, mx, my

нач очистка экрана

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

цикл

вывод("Введите a, b (a<b): ") до ввод(a,b)

кц(a<b)

цикл

вывод("Введите step (step>0): ") ввод(step)

до(step>0)

кц

цикл

вывод("Введите mx, my (mx>0, my>0): ") ввод(mx,my)

до(mx>0 и my>0)

кц

кон

алг «построение точек графика» вход a, b, step, mx, my, k

выход -

нач

maxx:=getmaxx()

maxy:=getmaxy()цикл от до шаг x:=a b step

y:=fun(x,k);

17

xm:= maxx/2 + x*mx

ym:=точкаmaxy/2 - y*my кц (xm,ym,6)

надпись(20, maxy-10,"Нажмите любую клавишу");

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

алг « выбор функции по номеру» вход n, h, v

выход k

нач

punkt[]:= "1. sin(x)", "2. cos(x)", "3. x*x",

очистка"4. x"; экрана перемещение курсора (h,v)

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

v:=v+2

цикл от i:=0 до n-1 перемещение курсора (h,v)

вывод(punkt[i]); кц v:=v+1

v:=v+1цикл

перемещение курсора (h,v) вывод("Введите номер функции: ")

до ввод(ch)и

(c>=’1' ch-'0'<=n)

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

кон (k)

алг «главная функция»

нач

вызов функции «ввод исходных данных» (a, b, step, mx, my) k= вызов функции «выбор функции по номеру» (4,10,10)

18

вызов функции «инициализация графического режима» вызов функции построение осей координат, единичных отрезков и вывод надписей к осям (mx, my)

вызов функции «построение точек графика» (a, b, step, mx, my, k)

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

9. СТРУКТУРА ПРОГРАММЫ

 

 

 

 

 

 

 

 

 

 

В данном разделе описывается структура программы в виде диаграммы, опреде-

ляющей вызовы подпрограмм.

Указывается назначение каждой подпрограммы.

Например, для программы построения графиков функций структура программы

будет следующей:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Главная функция

 

 

 

 

 

 

 

 

 

 

 

 

(main)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

input

 

 

menu

 

 

initialization

 

 

osi

 

poins

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

input -

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

 

 

 

 

menu -

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

 

 

 

 

initialization

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

 

 

 

 

-

 

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

osi -

 

 

на осях;

 

 

 

 

 

 

 

 

 

 

points

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

 

 

 

 

10. ПРИМЕР ПРОГРАММЫ

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

19

прокомментированы имена используемых переменных и указано их назначение.

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

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

#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));

 

20

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);

}

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