kurs_09
.pdf11
при ошибке инициализации графического режима
Ошибка при инициализации
графического режима <<сообщение>>
Нажмите любую клавишу для завершения работы программы
работа программы завершается
при успешной инициализации графического режима при 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);
}