Реферат по предмету "Информатика, программирование"


Построение графиков функций

МИНИСТЕРСТВООБРАЗОВАНИЯ И НАУКИ
РОССИЙСКОЙФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕАГЕНСТВО ПО ОБРАЗОВАНИЮ
КУРГАНСКИЙГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Кафедраавтоматизации производственных процессов
Темакурсовой работы:
«Построениеграфиков функций»
Курсоваяработа
Расчетно-пояснительнаязаписка.
Дисциплина:Программирование и основы алгоритмизации
Студент: Яковлев П. С.
Группа: Т-2144
Руководитель: Скобелев И.В.
Комиссия__________________
Оценка____________________
Датазащиты_______________
Курган,2006г.
Оглавление
1.     Техническоезадание
2.     Общаяблок-схема алгоритма
3.     Описаниеработы программного продукта
4.     Инструкцияпо инсталляции программного продукта
5.     Инструкция оператору
6.     Ограниченияданной версии программы
7.     Вывод
Список используемой литературы

1.Техническое задание
Программный продукт GRAPHIC позволяет строить и сохранятьграфики любых функций одной переменной. Продукт разработан на языкепрограммирования Мicrosoft Visual C++ 6.0 с использованиемобъектно-ориентированной методологии. Диалог пользователя с программой, аименно введение параметров, осуществляется посредством диалоговых оконпрограммы. Диапазон вводимых значений программно ограничен, с целью недопущениянекорректной работы или возникновения ошибки.
2. Общая блок-схема алгоритма
Общая блоксхема алгоритма программы GRAPHIC:
/>


3.Описание работы программного продукта
Программа“GRAPHIC” позволяет строить и сохранять графики функций одной переменной. Приоткрытии программы появляется окно, в котором уже по умолчанию построен графикфункции f(x)=sin(x)+0.05*x на отрезке [-5,10]. Выбравна панели меню пункт Функция, и, изменяя поле ввода в появившемся диалоговомокне, можно построить необходимый график функции или изменить отрезок, накотором построен график.
Для того,чтобы лучше понять работу программы приведем некоторые коды
classCGRAPHICView: public CView     //Класс Single Document
{
public:
         CStringsFunc;
         doubleXX;
         doubleX1;
         doubleX2;
         intSdvX;
         intSdvY;
         intDlX;
         intDlY;
         CDC*pDCbuf;
         boolGbNeedRepaint;
         CMFuncvFunc;
         CFuncEvalFuncEval;
         voidVichislenie();
         voidVFillBuffer (CDC* pSrcDC);
         //Остальные свойства иметоды класса Single Document
};
class CMFunc               //Классрасчета функции
{       
public:
         doubleFXX[400];
         doubleFYY[400];
         boolFYYER[400];
         intKolT;
         doubleMinY;
         doubleMaxY;
         voidFuncMaxMinY();
         CMFunc();
};
voidCGRAPHICView::OnDraw(CDC* pDC)   //Функция прорисовки документа
{
         CGRAPHICDoc*pDoc = GetDocument();
         ASSERT_VALID(pDoc);
         //TODO: add draw code for native data here
         try
         {
                   VFillBuffer(pDC);
         }
         catch(...)
         {
                   MessageBox(_T(«Ошибка построения графика!»),_T(«Ошибка»));
         }
}
void CGRAPHICView::Vichislenie()         //Функциявычисления параметров функции
{
         inta; double shag;
         externBOOL bMathError;
         FuncEval.SetString(sFunc);
         //Вычисляем шаг shag
         shag=((X2-X1)/(vFunc.KolT-1));
         //Вычисляем узлы функции vFunc.FXX[a]
         for(a=0;a
                   vFunc.FXX[a]=X1+a*shag;
         vFunc.FXX[vFunc.KolT-1]=X2;
         //Вычисляем значения функциив узлах vFunc.FYY[a] и ошибку вычисления vFunc.FYYER[a]
         for(a=0;a
                   bMathError= FALSE;
                   XX=vFunc.FXX[a];
                   vFunc.FYY[a]= FuncEval.Compute ();
                   vFunc.FYYER[a]= bMathError;
                   }
         //Вычисляем max и min значения функции vFunc.MaxY и vFunc.MinY
         vFunc.FuncMaxMinY();
}
voidCGRAPHICView::VFillBuffer (CDC* pSrcDC)  //Функция рисования графика
{
         intOtstX;
         intOtstY;
         intDlOX;
         intDlOY;
         intKolLX;
         intKolLY;
         SdvX=30;
         SdvY=30;
         DlX=700;
         DlY=370;
         OtstX=80;
         OtstY=30;
         DlOX=DlX-OtstX-50;
         DlOY=DlY-2*OtstY;
         KolLX=10;
         KolLY=10;
         doubleKoefX;
         doubleKoefY;
         inta; double d,dd; CString sss;
         if(GbNeedRepaint==TRUE){
                   //Вычислениепараметров функции (объект vFunc класса CMFunc)
                   Vichislenie();
                   //???????????????????????????????????????????????
                   pDCbuf->DeleteDC();
                   pDCbuf->CreateCompatibleDC(pSrcDC);
                   CBitmapbitmap;
                   bitmap.CreateCompatibleBitmap(pSrcDC,DlX,DlY);
                   CBitmap*pbmp=pDCbuf->SelectObject(&bitmap);
                  
//Рисованиеграфика-------------------------------------------------
                   //Цвета(разметки (линий) — cvet1, осей — cvet2, графика — cvet3)
                   CPencvet1(PS_SOLID,1,RGB(100,100,50));
                   CPencvet2(PS_SOLID,1,RGB(200,0,200));
                   CPencvet3(PS_SOLID,1,RGB(255,0,0));
                   //Отключаем фон текста иустанавливаем цвет текста
                   pDCbuf->SetBkMode(TRANSPARENT);
                   pDCbuf->SetTextColor(RGB(0,0,210));
                   //Закрашиваем областьграфика
                   pDCbuf->FillSolidRect(0,0,DlX,DlY,RGB(235,235,235));
                   //Рисованиеразметки X
                   pDCbuf->SelectObject(cvet1);
                   d=((double)DlOX/(KolLX-1));
                   for(a=0;a
                            pDCbuf->MoveTo(OtstX+(int)(a*d),OtstY);
                            pDCbuf->LineTo(OtstX+(int)(a*d),OtstY+DlOY);
                            }
                   //Рисованиеразметки Y
                   d=((double)DlOY/(KolLY-1));
                   for(a=0;a
                            pDCbuf->MoveTo(OtstX,OtstY+(int)(a*d));
                            pDCbuf->LineTo(OtstX+DlOX,OtstY+(int)(a*d));
                            }
                   //ПодписиX
                   d=(X2-X1)/(KolLX-1);
                   dd=((double)DlOX/(KolLX-1));
                   for(a=0;a
                            sss.Format(_T("%.3f"),X1+a*d);
                            pDCbuf->TextOut(OtstX+(int)(a*dd)-4*sss.GetLength(),OtstY+DlOY+3,sss);
                            }
                   sss.Format(_T("%.3f"),X2);a=KolLX-1;
                   pDCbuf->TextOut(OtstX+(int)(a*dd)-4*sss.GetLength(),OtstY+DlOY+3,sss);
                   //ПодписиY
                   d=(vFunc.MaxY-vFunc.MinY)/(KolLY-1);
                   dd=((double)DlOY/(KolLY-1));
                   for(a=1;a
                            sss.Format(_T("%.3f"),vFunc.MinY+a*d);
                            pDCbuf->TextOut(OtstX-3-7*sss.GetLength(),OtstY+DlOY-(int)(a*dd)-7,sss);
                            }
                   sss.Format(_T("%.3f"),vFunc.MinY);
                   pDCbuf->TextOut(OtstX-3-7*sss.GetLength(),OtstY+DlOY-12,sss);
                   sss.Format(_T("%.3f"),vFunc.MaxY);a=KolLY-1;
                   pDCbuf->TextOut(OtstX-3-7*sss.GetLength(),OtstY+DlOY-(int)(a*dd)-7,sss);
                   //Подпись «Графикфункции...»
                   sss.Format(_T(" на отрезке [%.2f,%.2f]"),X1,X2);
                   pDCbuf->TextOut(OtstX+80-2*sFunc.GetLength(),OtstY-25,(_T(«График функции f(x)=»)+sFunc+sss));
                   //Вычислениякоэффициентов сжатия на экране KoefX и KoefY
                   KoefX=((double)DlOX)/(X2-X1);
                   KoefY=((double)DlOY)/(vFunc.MaxY-vFunc.MinY);
                   //Рисованиеосей X и Y
                   pDCbuf->SelectObject(cvet2);
                   if(X1=0){
                            pDCbuf->MoveTo(OtstX-(int)(X1*KoefX),OtstY);
                            pDCbuf->LineTo(OtstX-(int)(X1*KoefX),OtstY+DlOY);
                            }
                   if(vFunc.MinY=0){
                            pDCbuf->MoveTo(OtstX,OtstY+DlOY+(int)(KoefY*vFunc.MinY));
                            pDCbuf->LineTo(OtstX+DlOX,OtstY+DlOY+(int)(KoefY*vFunc.MinY));
                            }
                   //Рисованиесамого графика функции
                   pDCbuf->SelectObject(cvet3);
                   for(a=1;a
                            if(vFunc.FYYER[a-1]==FALSE&&vFunc.FYYER[a]==FALSE){
                                      pDCbuf->MoveTo(OtstX+(int)(KoefX*(vFunc.FXX[a-1]-X1)),OtstY+DlOY-(int)(KoefY*(vFunc.FYY[a-1]-vFunc.MinY)));
                                      pDCbuf->LineTo(OtstX+(int)(KoefX*(vFunc.FXX[a]-X1)),OtstY+DlOY-(int)(KoefY*(vFunc.FYY[a]-vFunc.MinY)));
                                      }                
                            }
//------------------------------------------------------------------
                   GbNeedRepaint=FALSE;
                   }
         //Копированиебуфера pDCbuf на экран
         pSrcDC->BitBlt(SdvX, SdvY, DlX, DlY, pDCbuf, 0, 0, SRCCOPY);
}
void CGRAPHICView::OnFileSave()        //Функциясохранения графика
{
         HRESULThResult;
         CStringstrFilter;
         strFilter= «PNG image (*.png)|*.png||»;
         CFileDialogdlg(FALSE,_T(«png»),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |OFN_EXPLORER,strFilter);
         hResult= (int)dlg.DoModal();
         if(hResult != IDOK) {MessageBox(«Отменено пользователем»,«Предупреждение»);return;}
        
         CStringstrFileName;
         strFileName= dlg.m_ofn.lpstrFile;
         CImageimgOriginal;
         imgOriginal.Create(DlX, DlY, 24);
         //Это позволяетнарисовать все что должно быть сохранено
         (pDCbuf->FromHandle(imgOriginal.GetDC ()))->BitBlt (0, 0, DlX, DlY, pDCbuf, 0, 0, SRCCOPY);
         hResult= imgOriginal.Save(strFileName);
         try
         {
                   imgOriginal.ReleaseDC();
                   imgOriginal.Detach();
                   imgOriginal.Destroy();
         }
         catch(...)
         {
         }
         if(FAILED(hResult)) {
                   MessageBox(«Ошибкасохранения!»,«Ошибка!»);
         }
}
4.Инструкция по инсталляции программного продукта
Для установкипрограммы запустите файл GRAPHICv1.0\setup.exe и следуйте инструкциям мастера. Для удаленияпрограммы можно воспользоваться этим же файлом.
Гарантируетсяработа данной программы в операционной системе Windows не ниже 98. В предыдущихверсиях работа программы не проверялась.
Установкапрограммы требует около 1 Мб свободной памяти на жестком диске.
Внимание!
За возможные ошибки, сбои, возможный причиненный моральныйили материальный ущерб и т.д., авторы ответственности не несут. Вы используетепрограмму на свой страх и риск!
Если вы не согласны с этим, то не используйте даннуюпрограмму!
5. Инструкция оператору
При открытиипрограммы появляется окно, в котором уже по умолчанию построен график функции f(x)=sin(x)+0.05*x на отрезке [-5,10], какпоказано на рисунке:
/>
Чтобыпостроить необходимый график функции или изменить отрезок, на котором построенграфик, выберите на панели меню пункт Функция. При этом появится такоедиалоговое окно:
/>
В этом окневы можете изменять параметры функции. Начало и конец отрезка могут быть введенылюбые из отрезка [-1.7976931348623158e+308, 1.7976931348623158e+308], но приэтом начало должно быть меньше конца отрезка, иначе появится сообщение обошибке.
С функциейдело немного сложнее. Чтобы интерпретатор правильно понял функцию, при её вводенужно пользоваться правилами.
Унарныеоперации:
cos(x) — косинус
sin(x) — синус
tg(x) = tan(x) — тангенс
ctg(x) — котангенс
arccos(x) = acos(x) — арккосинус
arcsin(x) = asin(x) — арксинус
arctg(x) = atan(x) — арктангенс
arcctg(x) — арккотангенс
round(x) — обычное округление доцелого
sqr(x) — квадрат
sqrt(x) — арифметический корень
abs(x) = fabs(x) — модуль
neg(x) — отрицание
fact(x) — факториал
exp(x) — экспонента
ln(x) — натуральный логарифм
log10(x) = lg(x) — десятичный логарифм
cosh(x) — гиперболическийкосинус
sinh(x) — гиперболический синус
tanh(x) — гиперболическийтангенс
floor(x) — округление снедостатком
ceil(x) — округление с избытком
sign(x) — знак числа
inv(x) — логическая инверсия
— — отрицание
Бинарныеоперации:
(поприоритету с наименьшего)
x+y = add (x,y) — сложение x с y
x-y = sub (x,y) — вычитание из x y
x*y = mul (x,y) — умножение x на y
x/y = div (x,y) — деление x на y
x&y = log(x, y) — логарифм от x по основанию y
x^y = pow (x,y) — возведение x в степень y
x=y = x==y =equal (x, y) — если x = y, то 1 иначе 0
x
x>y =greater (x, y) — если x > y, то 1 иначе 0
and (x, y) — логическое И
or (x, y) — логическое ИЛИ
xor (x, y) — логическое сложение по модулю 2 (операция, исключающая ИЛИ) — сумма Жегалкина
pirs (x, y) — стрелка Пирса
shef (x, y) — штих Шеффера
impl (x, y) — логическая импликация
eq (x, y) — логическая эквиваленция
less (x, y) — x
greater(x, y) — x>y?
less_or_equal(x, y) — x
greater_or_equal(x, y) — x>=y?
max (x, y) — большее из x и y
min (x, y) — меньшее из x и y
equal (x, y)- эквиваленция
percent (x,y) — процент y от x
rand (x, y) — случайное число от x до y
Для всехлогических операций число отличное от 0 это 1 (ПРАВДА), иначе 0 (ЛОЖЬ).
Числа пишутсяв диапазоне [-1.7976931348623158e+308, 1.7976931348623158e+308]. Числа всегдазаписываются в десятичной форме, например 1 1f 1.0 1,0 1.0f 1,0f — одно и то жечисло в шести разных формах. Нельзя записывать числа в экспонентной форме,например 2.3e-5, вместо этого 2.3*(10^-5). Можно использовать константы: pi –число π, e – число e. Переменной является буква x. Между функциями можноставить разделитель – пробел(space).
Чтобысохранить изображение выберите во вкладке Файл -> Сохранить или Сохранитькак. При этом появится стандартное диалоговое окно сохранения, где выбираетсяпуть для сохранения. Изображения сохраняются в формате png.
6.Ограничения данной версии программы
Гарантируетсяработа данной программы в операционной системе Windows не ниже 98. В предыдущихверсиях работа программы не проверялась.
При работе спрограммой нужно пользоваться правилами, которые приведены в разделе Описаниеработы программного продукта. В этом случае гарантируется правильная работапрограммы. Причем нужно обязательно соблюдать правила ввода функции, интерпретаторв этом случае поймет функцию правильно. Если в поле ввода функции ввести что-тонеоговоренное правилами, интерпретатор примет это значение в любом случае, и небудет выведено никакого сообщения. Интерпретатор поймет, то что сможетраспознать, остальное он игнорирует. Например, если будет введено “zxczxc” или пустая строка, тофункция воспримется, как f(x)=0. Если будет введено “dghld+sin(x)asdfasf+dfgdfg”, то функция воспримется, как f(x)=sin(x).
7.Вывод
Написаннаямною программа, позволяет решать важнейшую задачу математического анализа –построение графиков функций. Она может облегчить работу исследования функций.Программный продукт GRAPHIC может быть использован для учебных целей.
Программанаписана при использовании самых современных на сегодняшний день технологийпрограммирования и обеспечивает быструю и качественную работу.

Список используемой литературы
1.     Языкпрограммирования Си++. Курс лекций. Учебное пособие / Издание второе,исправленное / Фридман А. Л. / М.: «Интернет-университет ИнформационныхТехнологий», 2004.– 264 с.
2.     ЯзыкСи++. Учебное пособие / Издание пятое / Подбельский В. В. / М.: Финансы истатистика, 2001.– 560 с.: ил.
3.     http: //www.holzner.ru.
4.     http: //www.firstsleps.ru.
5.     http: //www.intuit.ru.


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.