MaterStudiorum.ru - домашняя страничка студента.
Минимум рекламы - максимум информации.


Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Биографии
Биология
Биология и химия
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Издательское дело и полиграфия
Инвестиции
Иностранный язык
Информатика
Информатика, программирование
Исторические личности
История
История техники
Кибернетика
Коммуникации и связь
Компьютерные науки
Косметология
Краткое содержание произведений
Криминалистика
Криминология
Криптология
Кулинария
Культура и искусство
Культурология
Литература и русский язык
Литература(зарубежная)
Логика
Логистика
Маркетинг
Математика
Медицина, здоровье
Медицинские науки
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Москвоведение
Музыка
Муниципальное право
Налоги, налогообложение
Наука и техника
Начертательная геометрия
Новейшая история, политология
Оккультизм и уфология
Остальные рефераты
Педагогика
Полиграфия
Политология
Право
Право, юриспруденция
Предпринимательство
Промышленность, производство
Психология
Психология, педагогика
Радиоэлектроника
Разное
Реклама
Религия и мифология
Риторика
Сексология
Социология
Статистика
Страхование
Строительные науки
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Управленческие науки
Физика
Физкультура и спорт
Философия
Финансовые науки
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика
Юриспруденция
Языковедение
Языкознание, филология
    Начало -> Информатика, программирование -> Построение графиков функций

Название:Построение графиков функций
Просмотров:53
Раздел:Информатика, программирование
Ссылка:Скачать(170 KB)
Описание: МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ КУРГАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Кафедра автоматизации производственных процессов Тема курсово

Часть полного текста документа:

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

КУРГАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра автоматизации производственных процессов

Тема курсовой работы:

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

Курсовая работа

Расчетно-пояснительная записка.

Дисциплина: Программирование и основы алгоритмизации

Студент: Яковлев П. С.

Группа: Т-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]. Выбрав на панели меню пункт Функция, и, изменяя поле ввода в появившемся диалоговом окне, можно построить необходимый график функции или изменить отрезок, на котором построен график.

Для того, чтобы лучше понять работу программы приведем некоторые коды

class CGRAPHICView : public CView     //Класс Single Document

{

public:

         CString sFunc;

         double XX;

         double X1;

         double X2;

         int SdvX;

         int SdvY;

         int DlX;

         int DlY;

         CDC* pDCbuf;

         bool GbNeedRepaint;

         CMFunc vFunc;

         CFuncEval FuncEval;

         void Vichislenie();

         void VFillBuffer (CDC* pSrcDC);

         //Остальные свойства и методы класса Single Document

};

class CMFunc               //Класс расчета функции

{       

public:

         double FXX[400];

         double FYY[400];

         bool FYYER[400];

         int KolT;

         double MinY;

         double MaxY;

         void FuncMaxMinY();

         CMFunc();

};

void CGRAPHICView::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()         //Функция вычисления параметров функции

{

         int a; double shag;

         extern BOOL bMathError;

         FuncEval.SetString(sFunc);

         //Вычисляем шаг shag

         shag=((X2-X1)/(vFunc.KolT-1));

         //Вычисляем узлы функции vFunc.FXX[a]

         for(a=0;a<(vFunc.KolT-1);a++)

                   vFunc.FXX[a]=X1+a*shag;

         vFunc.FXX[vFunc.KolT-1]=X2;

         //Вычисляем значения функции в узлах vFunc.FYY[a] и ошибку вычисления vFunc.FYYER[a]

         for(a=0;a<vFunc.KolT;a++) {

                   bMathError = FALSE;

                   XX=vFunc.FXX[a];

                   vFunc.FYY[a] = FuncEval.Compute ();

                   vFunc.FYYER[a] = bMathError;

                   }

         //Вычисляем max и min значения функции vFunc.MaxY и vFunc.MinY

         vFunc.FuncMaxMinY();

}

void CGRAPHICView::VFillBuffer (CDC* pSrcDC)  //Функция рисования графика

{

         int OtstX;

         int OtstY;

         int DlOX;

         int DlOY;

         int KolLX;

         int KolLY;

         SdvX=30;

         SdvY=30;

         DlX=700;

         DlY=370;

         OtstX=80;

         OtstY=30;

         DlOX=DlX-OtstX-50;

         DlOY=DlY-2*OtstY;

         KolLX=10;

         KolLY=10;

         double KoefX;

         double KoefY;

         int a; double d,dd; CString sss;

         if(GbNeedRepaint==TRUE) {

                   //Вычисление параметров функции (объект vFunc класса CMFunc)

                   Vichislenie();

                   //???????????????????????????????????????????????

                   pDCbuf->DeleteDC ();

                   pDCbuf->CreateCompatibleDC (pSrcDC);

                   CBitmap bitmap;

                   bitmap.CreateCompatibleBitmap(pSrcDC,DlX,DlY);

                   CBitmap* pbmp=pDCbuf->SelectObject(&bitmap);

                  

//Рисование графика-------------------------------------------------

                   //Цвета (разметки (линий) - cvet1, осей - cvet2, графика - cvet3)

                   CPen cvet1(PS_SOLID,1,RGB(100,100,50));

                   CPen cvet2(PS_SOLID,1,RGB(200,0,200));

                   CPen cvet3(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<KolLX;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<KolLY;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<(KolLX-1);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<(KolLY-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&&X2>=0) {

                            pDCbuf->MoveTo(OtstX-(int)(X1*KoefX),OtstY);

                            pDCbuf->LineTo(OtstX-(int)(X1*KoefX),OtstY+DlOY);

                            }

                   if(vFunc.MinY<=0&&vFunc.MaxY>=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<vFunc.KolT;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()        //Функция сохранения графика

{

         HRESULT hResult;

         CString strFilter;

         strFilter = "PNG image (*.png)|*.png||";

         CFileDialog dlg(FALSE,_T("png"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_EXPLORER,strFilter);

         hResult = (int)dlg.DoModal();

         if (hResult != IDOK) {MessageBox("Отменено пользователем","Предупреждение"); return;}

        

         CString strFileName;

         strFileName = dlg.m_ofn.lpstrFile;

         CImage imgOriginal;

         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 и следуйте инструкциям мастера. ............





Нет комментариев.



Оставить комментарий:

Ваше Имя:
Email:
Антибот:  
Ваш комментарий:  
 
     

Вечно с вами © MaterStudiorum.ru