Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


CGraph::CGraph (CRect r, UINT Pts)



{

rect = r; // Прямоугольник вывода в пикселах

// Ограничение числа точек

nPoints = Pts< =1000? Pts: 1000;

// Создание шрифтов

TextFont.CreatePointFont(80, " MS Sans Serif" );

TitleFont.CreatePointFont(120, " Times New Roman Cyr" );

PowerFont.CreatePointFont(80, " Arial" );

}

 

void CGraph:: ScaleX (TValues& x)

{

// Обработка массива абсцисс

UINT i;

for (i=0, dMaxX=x[0], dMinX=x[0]; i< nPoints; i++)

{ // Поиск (min, max)

dMinX = x[i]< dMinX? x[i]: dMinX;

dMaxX = x[i]> dMaxX? x[i]: dMaxX;

}

dSpanX = dMaxX - dMinX; // Размах

// Выбор шага из (0, 1) и экспоненты по основанию 10

Scale (dSpanX, iPowerX, dStepX);

// Вещественный (реальный) шаг

double step = dStepX*pow(10, iPowerX);

// Количество шагов плюс 1 или 2 шага (human factor)

nStepsX=(UINT)(dSpanX/step) + (dMinX? 2: 1);

// Целый шаг в пикселах

nStepX =(UINT) (dFracX * rect.Width() / nStepsX +.5);

// Начальный x (dStartX) должен быть кратен шагу

double d = dMinX/step;

dStartX = d? step * ceil (d-1.): 0.; // Human factor

MinX = (UINT) (dXLeft * rect.Width()); // Начальный x (пикселы)

MaxX = MinX + nStepsX * nStepX; // Конечный x (пикселы)

X = new UINT [nPoints]; // Массив абсцисс (пикселы)

// Заполняем массив абсцисс (пикселы)

for (i=0; i< nPoints; i++)

X[i] = MinX+(UINT)((x[i]-dStartX)*nStepX/step);

// Корректируем начальной значение (мантиссу)

dStartX /= pow (10, iPowerX);

}

 

void CGraph:: ScaleY (TValues& y)

{ // То же, но для оси ординат.

UINT i;

for (i=0, dMaxY=y[0], dMinY=y[0]; i< nPoints; i++)

{

dMinY = y[i]< dMinY? y[i]: dMinY;

dMaxY = y[i]> dMaxY? y[i]: dMaxY;

}

dSpanY = dMaxY-dMinY;

Scale (dSpanY, iPowerY, dStepY);

double step = dStepY*pow(10, iPowerY);

 

nStepsY= (UINT)(dSpanY/step) + (dMinY? 2: 1);

nStepY = (UINT) (dFracY * rect.Height() / nStepsY +.5);

// Не учитываем особенности восприятия (human factor)

dStartY = step * (ceil (dMaxY/step));

 

MinY = (UINT) (dYTop * rect.Height());

MaxY = MinY + nStepsY * nStepY;

Y = new UINT [nPoints];

for (i=0; i< nPoints; i++)

Y[i] = MinY+(UINT)((dStartY-y[i])*nStepY/step);

dStartY /= pow (10, iPowerY);

}

 

void CGraph:: Scale (double span, int& pow, double& step)

{

// Поиск мантиссы (шага) и экспоненты

pow=0; // Загоняем мантиссу в диапазон (1, 10)

if (0.< span & & span< 1.)

for (; span< 1.; span*=10., pow--)

; // Умножением на 10 или

else if (span> 10.) // делением на 10

for (; span> 10.; span/=10., pow++)

;

if (span< 1.1) // Выбор одного из стандартных

step=.1; // значений для шага

else if (span< 2.1)

step=.2;

else if (span< 2.6)

step=.25;

else if (span< 5.1)

step=.5;

Else

step=1.;

}

 

CGraph:: ~CGraph ()

{

delete [] X; // В деструкторе освобождаем память, занимаемую

delete [] Y; // целочисленными аналогами входных массивов

}

 

void CGraph:: DrawGrid (CDC* dc,

CString& Title, CString& Xlab, CString& Ylab,

TValues& xGr, TValues& yGr)

{

// Рисуем координатную сетку и надписи

dc-> SelectObject(& TextFont); // Основной шрифт

TEXTMETRIC tm; // Метрики шрифта

dc-> GetTextMetrics (& tm);

 

ScaleX (xGr); // Масштабируем абсциссы

ScaleY(yGr); // Масштабируем ординаты

 

UINT x, y, i, // Рабочие переменные

LW=tm.tmMaxCharWidth, // Средняя ширина буквы

LH=tm.tmHeight, // Средняя высота буквы

h2=LH/2, h4=LH/4, // Доли ширины (для подстройки)

w2=LW/2, w4=LW/4, // Доли высоты

ww=LW+LW, hh=LH+LH, // Удвоенные ширина и высота

xy=MinX-ww, // X-координата шкалы оси Y

yx=MaxY+h2, // Y-координата шкалы оси X

xh=MaxX+ww, // X-координата заголовка оси X

yh=MinY-hh; // Y-координата заголовка оси Y

double d; // Рабочие переменные

CString s;

 

dc-> SetBkMode(TRANSPARENT); // Фон текста — прозрачный

dc-> SetTextAlign(TA_CENTER); // Выравнивание — по центру

 

for (i=0, x=MinX, d=dStartX; // Разметка оси X

i< =nStepsX;

x+=nStepX, d+=dStepX, i++)

{

dc-> MoveTo(x, MinY);

dc-> LineTo (x, MaxY); // Изображение оси X

s.Format(" %3.1f", d);

dc-> TextOut (x, yx, s); // Оцифровка шкалы оси X

}

 

for (i=0, y=MinY, d=dStartY; // Разметка оси Y

i< =nStepsY;

y+=nStepY, d-=dStepY, i++)

{

dc-> MoveTo(MinX, y);

dc-> LineTo(MaxX, y);

s.Format(" %5.1f", d);

dc-> TextOut(xy, y-h2, s);

}

// Вывод диапазона изменения ординат

s.Format(" Range = (%.3g, %.3g)", dMinY, dMaxY);

dc-> TextOut((MinX+MaxX)/2, yh+h2, s);

// Вывод наименований осей

dc-> TextOut (MinX+w2, yh-h2, Ylab);

dc-> TextOut (xh+w2, yx, Xlab);

// Выбираем более мелкий шрифт

dc-> SetTextColor (RGB(0, 0, 255));

dc-> SelectObject(& PowerFont);

// Рамочка вокруг экспоненты оси Y

dc-> RoundRect(xy-w2-w2, yh-LH, xy+LW+w2, yh+LH, h2, h2);

dc-> TextOut(xy, yh-h4, " 10" );

// Рамочка вокруг экспоненты оси X

dc-> RoundRect(xh-w2-w2, yx-hh-h2, xh+LH+w4, yx-h2, h2, h2);

dc-> TextOut(xh, yx-hh+h4, " 10" );

// Вывод экспонент осей Y и X

s.Format(" %d", iPowerY);

dc-> TextOut(xy+w2+w4, yh-LH, s);

s.Format(" %d", iPowerX);

dc-> TextOut(xh+w2+w4, MaxY-hh, s);

// Выбираем крупный шрифт и выводим заголовок всего графика

dc-> SelectObject(& TitleFont);

dc-> TextOut((MinX+MaxX)/2, yh-ww, Title);

}

// Изображение кривой Y (X)

void CGraph:: DrawFunc (CDC* dc)

{

// Ставим перо в первую точку

dc-> MoveTo(X[0], Y[0]);

// и соединяем последовательно все точки

for (UINT i=0; i < nPoints; i++)

dc-> LineTo (X[i], Y[i]);

}

 

Далее рассмотрим, как описываются экспортируемые функции. Добавим в файл Graph2D.cpp следующий код, описывающий четыре функции, которые мы будем использовать в приложении:

 

extern " C" __declspec(dllexport)

double Aperiodic(double x, TData* p)

{

// Апериодический переходный процесс

// Постоянные времени и коэффициент усиления

double T1=p-> d1, T2=p-> d2, K=p-> d3;

// Выделяется случай равенства собственных чисел

double TT=T1-T2;

return TT? K * (exp(-x/T1) - exp(-x/T2))/TT

: K * x * exp(-x/T1)/(T1*T1);

}

extern " C" __declspec(dllexport)

double Oscillating(double x, TData* p)

{

// Колебательный переходный процесс

double T=p-> d1, Ksi=p-> d2, K=p-> d3;

// T — постоянная времени, Ksi — постоянная затухания

double d = sqrt(1.-Ksi*Ksi);

return K * exp(-Ksi*x/T) * sin (d*x/T) / (T*d);

}

extern " C" __declspec(dllexport)

double Gauss(double x, TData* p)

{

// Нормальный закон распределения плотности вероятностей

// M — математическое ожидание, Sigma — дисперсия

double M=p-> d1, Sigma=p-> d2;

x = (x-M)/Sigma;

return exp(-x*x/2.)/(Sigma*sqrt(6.2831853718));

}

 

extern " C" __declspec(dllexport)

double Poisson(double x, TData* p)

{

// Дискретное распределение Пуассона

// M — математическое ожидание

double M=p-> d1;

double mk, m = M;

ULONG i, k;

if (x< 0 || M==0)

return 0.;

k = unsigned(x); // k - беззнаковый x

for (i=2, mk=m; i< =k; i++) // mk = M^k/k!

mk *= m/i;

return mk*exp(-m);

}

Откомпилируем и скомпонуем приложение. В результате в папке Debug будут созданы два файла: Graph.dll и Graph.lib.

На следующем этапе разработаем клиентское приложение, в которое мы и вставим разработанную библиотеку. Для этого создадим новый проект под именем Test, который основан на обычной стартовой программе с SDI-интерфейсом. После того как AppWizard выполнит эту задачу, уберите из меню и панели инструментов все команды чтения и записи в файл, а также команду Recent Files. Затем выберите команду Project -> Settings, раскройте вкладку Link и введите строку Graph.lib в поле Object/library modules. Далее скопируйте из папки предыдущего проекта в папку настоящего файл Graph, h (только интерфейс класса) и подключите его к проекту. Не забудьте также скопировать два файла Graph.dll и Graph.lib из папки Debug приложения Graph в папку с новым проектом. Вставим директивы подключения файлов заголовков и прототипы импортируемых классов.

1. В файл stdafx.h:

// stdafx.h: include file for standard system include files,

// or project specific include files that are used frequently, but

// are changed infrequently

//

.

.

.

 

#include < afxwin.h> // MFC core and standard components

#include < afxext.h> // MFC extensions

#include < afxdisp.h> // MFC Automation classes

#include < afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls

 

#include < afxtempl.h> // Шаблоны Collection

#include < math.h> // Математические функции

#include < time.h> // Функции управления временем

.

.

.

2. В файл TestView.cpp

// TestView.cpp: implementation of the CTestView class

//

 

#include " stdafx.h"

#include " Test.h"

 

#include " TestDoc.h"

#include " TestView.h"

 

#include " Graph2D.h" // Заголовок подключаемой DLL

.

.

.

 

3. В файл TestDoc.h

// TestDoc.h: interface of the CTestDoc class

//

#if! defined(AFX_TESTDOC_H__6E75B7CB_D6B9_11D5_B5B3_F00CBE90EA6C__INCLUDED_)

#define AFX_TESTDOC_H__6E75B7CB_D6B9_11D5_B5B3_F00CBE90EA6C__INCLUDED_

 

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

 

#include " Graph2D.h" // Заголовок подключаемой DLL

 

extern " C" __declspec(dllimport)

double Aperiodic(double, TData*);

 

extern " C" __declspec(dllimport)

double Oscillating(double, TData*);

 

extern " C" __declspec(dllimport)

double Gauss(double, TData*);

 

extern " C" __declspec(dllimport)

double Poisson (double, TData*);

 

// Обобщенный тип импортируемых функций, то есть

// тип указателей на любую из них

typedef double (*TFunc)(double, TData*);

 

class CTestDoc: public CDocument

{

protected: // create from serialization only

CTestDoc();

DECLARE_DYNCREATE(CTestDoc)

 

// Attributes

public:

 

// Operations

public:

 

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CTestDoc)

public:

virtual BOOL OnNewDocument();

virtual void Serialize(CArchive& ar);

virtual void DeleteContents();

//}}AFX_VIRTUAL

 

// Implementation

public:

TValues xGr, yGr; // Массивы абсцисс и ординат

UINT NPoints; // Количество точек

TFunc pFunc[4]; // Массив указателей на функции

TFunc pCurFunc; // Адрес текущей (выбранной) функции

CString sFunc[4]; // Массив заголовков графиков функций

CString sCurFunc; // Заголовок текущего графика функции

double Time; // Диапазон изменения координаты X

UINT nFunc; // Количество функций (==4)

TData data; // Обобщенные параметры функций

void Calc(); // Метод вычисляющий Y (X)

.

.

.

Идея демонстрации возможностей библиотечного класса CGraph состоит в том, что при каждом нажатии кнопки New (то есть вызове OnNewDocinnent) будет случайным образом выбрана одна из четырех импортированных функций, таким же образом выбраны ее параметры, вычислены значения функции и с помощью импортируемого класса построен график. Если оставить произвол в выборе параметров, то могут возникнуть исключительные ситуации, поэтому мы ограничиваем этот произвол так, чтобы обеспечить надежность вычислений и показать поведение функций в их наиболее характерном виде. Так как генератор случайных чисел будет использоваться достаточно интенсивно, определим макроподстановку, упрощающую управление ГСЧ. Введем ее в начало файла TestDoc.cpp. Введите также коды конструктора Документа и функции OnNewDocument.

 

// CTestDoc construction/destruction

 

// Вычисляет вещественное случайное число в диапазоне (min, max)

#define getrand(min, max) \

(min)+double(rand())*((max)-(min))/32767

 

CTestDoc:: CTestDoc()

{

// Начальная одноразовая инициализация

nFunc = 4;

sFunc[0]=" Aperiodic Response"; // Заголовки графиков

sFunc[1]=" Oscillating Response";

sFunc[2]=" Gauss Distribution";

sFunc[3]=" Poisson Distribution";

pFunc[0] = Aperiodic; // Адреса функций

pFunc[1] = Oscillating;

pFunc[2] = Gauss;

pFunc[3] = Poisson;

data.d1 = 0.1; // Надежные параметры

data.d2 = 0.1;

data.d3 = 1.;

}

 

BOOL CTestDoc:: OnNewDocument()

{

if (! CDocument:: OnNewDocument())

return FALSE;

 

// TODO: add reinitialization code here

// (SDI documents will reuse this document)

NPoints = 300; // Начальное предложение

xGr.SetSize (NPoints); // Отводим память

yGr.SetSize (NPoints);

Time=getrand(5., 15.); // Случайный интервал времени

int i = rand()%4; // Случайный номер функции

sCurFunc = sFunc[i]; // Ее заголовок

pCurFunc = pFunc[i]; // Ее адрес

Switch (i)

{

// В зависимости от выбранной функции

case 0: // Определяем выгодный диапазон параметров

data.d1 = getrand(1e-2, 1.); // Параметры

data.d2 = getrand(1e-2, 1.); // для апериодического

data.d3 = getrand(1., 100.); // переходного процесса

break;

case 1: // То же, но для

data.d1 = getrand(1e-1, 0.5); // колебательного

data.d2 = getrand(1e-3,.9); // переходного процесса

data.d3 = getrand(1., 100.);

break;

case 2:

data.d1 = getrand(1e-2, 9.); // для Гауссова

data.d2 = getrand(1e-2,.9); // распределения

break;

case 3:

data.d1 = getrand(1., 9.); // для Пуассоновского

break; // распределения

}

// В режиме отладки вы увидите этот вывод в окне Output-Debug

TRACE(" \n%s d1=%g d2=%g d3=%g", sCurFunc, data.d1, data.d2, data.d3);

 

return TRUE;

}

Переопределим в классе CTectView виртуальную функцию DeleteContents() для того, чтобы при создании каждого нового документа освобождать память, отведенную для массивов. Создадим также новую вспомогательную функцию Са1с, вычисляющую все точки функции во временном интервале (мы считаем, что по оси Х отложено время, хотя это лишь ассоциация). Обратите внимание на то, что выбранная (импортированная) функция вызывается с помощью указателя на нее. Структура TData:: data используется как универсальное средство для передачи выбранных параметров в любую функцию.

// CTestDoc commands

 

void CTestDoc:: DeleteContents()

{

xGr.RemoveAll(); // Освобождаем память,

yGr.RemoveAll(); // занимаемую массивами

CDocument:: DeleteContents();

}

 

Void CTestDoc:: Calc()

{

UINT i;

double x, dx = Time/(NPoints-1); // Временной шаг

 

for (i=0, x=0.; i< NPoints; i++, x+=dx)

{

// Заполнение массива

xGr[i] = x;

// Вызов импортированной функции по ее адресу

yGr[i] = pCurFunc(x, & data);

}

}

В классе CTestView необходимо внести изменения в функцию OnDraw для того, чтобы увидеть выбранный в Документе график на экране. Кроме того, если мы хотим на принтере получить изображение графика в тех же пропорциях, что и на экране, то следует переопределить виртуальную функцию ОпРгерагеОС, как мы это делали при реализации рисующего приложения. Но сначала введем в число данных класса два объекта класса, управляющего пером Windows. Одно перо будет использоваться для рисования координатной сетки, другое - для рисования кривой зависимости. Добавим код в файл CTestView.h

// Implementation

public:

CPen BlackPen, BluePen; // Черное и синее перья

.

.

.

Изменим конструктор Вида, переопределим OnPrepareDC и изменим коды OnDraw:

// CTestView construction/destruction

 

CTestView:: CTestView(): // Инициализируем перья

BlackPen(PS_SOLID, 1, RGB(0, 0, 0)),

BluePen (PS_SOLID, 2, RGB(0, 0, 255))

{

// TODO: add construction code here

}

 

void CTestView:: OnDraw(CDC* pDC)

{

CTestDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

// Вычисляем точки графика

pDoc-> Calc();

// Выясняем размеры массивов

UINT size = (pDoc-> xGr).GetSize();

CRect r;

GetClientRect(r); // Выясняем размеры окна Вид

// Создаем объект импортированного класса

CGraph graph(r, size);

// Выбираем черное перо, запоминая текущее

CPen* pOldPen = pDC-> SelectObject (& BlackPen);

// Задаем надписи для осей

CString Xlab(" t" ), Ylab(" y" );

// Просим изобразить сетку

graph.DrawGrid (pDC, pDoc-> sCurFunc,

Xlab, Ylab, pDoc-> xGr, pDoc-> yGr);

// Открепляем перо Windows от объекта класса

BlackPen.Detach();

// Выбираем синее перо

pDC-> SelectObject (& BluePen);

// Просим изобразить кривую графика

graph.DrawFunc (pDC);

// Реставрируем перо Windows

pDC-> SelectObject (pOldPen);

}

 

void CTestView:: OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)

{

CView:: OnPrepareDC(pDC, pInfo); // Вызов родительской версии

// Установка режима отображения координат

pDC-> SetMapMode(MM_ANISOTROPIC);

// Знаменатель коэффициента увеличения

pDC-> SetWindowExt(100, 100);

// Числитель коэффициента увеличения

pDC-> SetViewportExt(pDC-> GetDeviceCaps(LOGPIXELSX),

pDC-> GetDeviceCaps(LOGPIXELSY));

}

Приложение готово. Запустите его. При открытии окна сразу должен появиться какой-то график. Периодически нажимайте кнопку New. Убедитесь, что при этом изменяется вид кривой.

ОФОРМЛЕНИЕ ПОЯСНИТЕЛЬНОЙ ЗАПИСКИ

Пояснительная записка к курсовой работе должна содержать:

- титульный лист;

- задание на курсовое проектирование;

- аннотацию;

- описание (спецификации) модулей программы;

· описание программы;

· исходный текст разрабатываемых модулей;

- результаты испытаний (с выводом графика функции);

- выводы.

В аннотации приводится краткое изложение содержание пояснительной записки. Текст программы может быть оформлен как приложение к пояснительной записке. Пример оформления пояснительной записки приведен в приложении 2. В приложении 1 приведен пример задания на курсовой проект.


СПИСОК ЛИТЕРАТУРЫ

 

1. Б.Страуструп. Язык программирования Си++. М.: Радио и связь, 1991 г.

2. Д.Е.Намиот. Основные особенности языка программирования С++. М.: Память, 1991 г.

3. В.В.Подбельский. Язык Си++. М.: Финансы и статистика, 1996 г.

4. С.Холзнер. Visual C++6: Учебный курс. С.-Пб.: Питер, 2000 г.

5. А.Черносвитов. Visual C++6 и MFC. С.-Пб.: Питер, 2000 г.

6. Д.Круглински, С.Уингоу, Д.Шефферд. Программирование на Microsoft Visual C++ для профессионалов. С.-Пб.: Питер, 2000 г.

7. Б.Карпов, Т.Баранова. С++. Специальный справочник. С.-Пб.: Питер, 2001 г

8. Г.Джонстон Учитесь программировать: Пер. с англ. – М.: Финансы и статистика, 1989.

9.Единая система программной документации (сборник стандартов). – М.: Издательство стандартов, 1988.

10. Д.Ван.Тассел. Стиль, разработка, эффективность, отладка и испытание программ: Пер. с англ. – 2-е изд., испр. – М.: Мир, 1985.


Приложение 1

Пример задания на курсовую работу

 

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

" Камчатский государственный университет имени Витуса Беринга"

 

 

КАФЕДРА ИНФОРМАТИКИ

 

 

  У Т В Е Р Ж Д А Ю Зав. кафедры информатики   к.т.н._____________И.А.Кашутина   «___»___________20__ г.

 

ЗАДАНИЕ

К курсовой работе

студенту группы _______ __ курса физико-математического факультета

Иванову Ивану Сергеевичу

Тема работы: Разработка в операционной системе Windows на основе интерфейса Single Document программы отображения графика функции y=a*xb*ec*x

Исходные данные:

Интерфейс разрабатываемого программного обеспечения: Single Document, отображаемая функция: y=a*xb*ec*x, коэффициенты a, b и c вводятся в интерфейсе программы, среда разработки: Microsoft Visual C++.

Требования к содержанию:

Курсовая работа выполняется студентом университета в следующем объёме:

Разрабатывается исходный код программного обеспечения и пояснительная записка, которая должна состоять из следующих разделов:

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

1.1. Функциональное назначение - классы решаемых задач и/или назначение программы и сведения о функциональных ограничениях на ее применение.

1.2. Технические характеристики - постановка задачи на разработку программы, описание применяемых математических методов и, при необходимости, описание допущений и ограничений, связанных с выбранным математическим аппаратом; описание и обоснование выбора состава технических и программных средств на основании проведенных расчетов и/или анализов, распределение носителей данных, которые использует программа.

1.3. Описание логической структуры - используемые методы; алгоритм программы; структура программы с описанием функций составных частей и связи между ними; описание используемых классов, их свойств и методов; связи программы с другими программами. Описание логической структуры программы выполняют с учетом текста программы на исходном языке.

1.4. Используемые технические средства - типы ЭВМ и устройств, которые используются при работе программы.

1.5. Вызов и загрузка - способы вызова программы с соответствующего носителя данных; входные точки в программу. Допускается здесь указывать адреса загрузки, сведения об использовании оперативной памяти, объем программы.

1.6. Входные данные - характер, организация и предварительная подготовка входных данных, формат, описание и способ кодирования входных данных.

1.7. Выходные данные - характер и организация выходных данных; формат, описание и способ кодирования выходных данных.

1.8. Программа и методика испытаний - содержит требования, подлежащие проверке при испытаниях программы, а также порядок и методы их контроля. Описание тестовых примеров.

1.9. Источники, использованные при разработке - перечень научно-технических публикаций, нормативно-технических документов и других научно-технических материалов, на которые есть ссылки в основном тексте.

Заключение - описание результатов работы, достоинств и недостатков разработанного программного обеспечения.

В зависимости от особенностей программы допускается вводить дополнительные разделы или объединять отдельные разделы.

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

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

Исходный код разработанного программного продукта и документация к программе поставляется на дискетах.

Рекомендуемая литература

1. Марапулец Ю.В. Системное программирование в WIN API. П.-Камчатский: КамГУ им. В.Беринга, 2011. – 233 с.

2. Гордеев А.В. Операционные системы. С.-Пб.: Питер, 2006. - 415 с.

3. Соломон Д., Русинович М. Внутреннее устройство Windows 2005. С.-Пб.: Питер, 2004 г. - 746 с.

4. Финогенов К.Г. Win32. Основы программирования. М.: Диалог-МИФИ, 2004. - 416 с.

5. Рихтер Д. Windows. Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows. С.-Пб.: Питер, 2005. - 624 с.

6. Д.Круглински, С.Уингоу, Д.Шефферд. Программирование на Microsoft Visual C++ для профессионалов. С.-Пб.: Питер, 2004 г.

7. Щупак Ю.А. Win32 API. Эффективная разработка приложений. С.-Пб.: Питер, 2007.-572с.

8. С.Холзнер. Visual C++: Учебный курс. С.-Пб.: Питер, 2004 г.

9. А.Черносвитов. Visual C++ и MFC. С.-Пб.: Питер, 2005 г.

 

Требования к оформлению пояснительной записки

Пояснительная записка оформляется в соответствии с требованиями кафедры информатики к курсовым проектам (работам).

 

Требования к этапам и срокам выполнения

Курсовой проект (работа) выполняется по этапам и в сроки указанные в календарном плане

 

Задание выдано «___» ______________20__ г.

Срок сдачи проекта «___» ______________20__ г.

 

 

Руководитель проекта

Профессор кафедры информатики,

к.т.н., доцент Марапулец Ю.В.

«___»____________20__ г.

 

Задание принял к исполнению

Студент гр. _______ ________________________________________

«___»____________20__ г.

 


Приложение 2

Пример оформления пояснительной записки

 

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

" Камчатский государственный университет имени Витуса Беринга"

 

20__-20__ учебный год

КАФЕДРА ИНФОРМАТИКИ

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

Тема: «Разработка программного обеспечения для отображения

графика функции y=a*sin(bx) в операционной системе Windows»

по дисциплине: «Системное программирование»

 

  Выполнил студент группы ____       Иванов И.И.
  Работа защищена   «___»_______2009 г   с оценкой___________
    Руководитель: Профессор кафедры Информатики Кандидат технических наук, доцент     Марапулец Ю.В.

 

г. Петропавловск-Камчатский


Аннотация

 

Пояснительная записка к курсовой работе состоит из введения, 9 разделов, заключения и содержит 17 страниц, 4 рисунка и 3 таблицы.

Работа посвящена описанию процесса проектирования и разработки программы отображения графика функции y=a*sin(bx). В приложении содержится текст программы на исходном языке программирования, пояснительная записка и рабочая версия разработанного программного продукта представлена в электронном виде на диске.


Содержание:

 

Введение.

1. Функциональное назначение.

2. Технические характеристики.

3. Описание логической структуры.

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

5. Вызов и загрузка.

6. Входные данные.

7. Выходные данные.

8. Программа и методика испытаний.

9. Источники, использованные при разработке.

Заключение


Введение

Наименование курсовой работы «Разработка программного обеспечения для отображения графика функции y=a*sin(bx) в операционной системе Windows».

Разработка программного продукта ведется на основании задания для курсового проектирования по дисциплине «Системное программирование» студента 4 курса группы ПМИ-063 Камчатского Государственного университета им. Витуса Беринга.

Организация, утвердившая документ: Кафедра Информатики ФГОУ ВПО КамГУ им.В.Беринга. Дата утверждения: " ___" _________ 20__ г.

Функциональное назначение

Программное обеспечение предназначено для отображения графика функции y=a*sin(bx).

Функциональные ограничения:

- переменная A должна лежать в диапазоне от 1 до 60

- переменная B должна лежать в диапазоне от 1 до 30

Технические характеристики

Программный продукт должен отображать график функции построенный по двум переменным. Программа строится на основе мастера MFC AppWizard с форматом окна “Multiple document”

В данной программе используется график функции y=a*sin(bx) с ограничением по оси Y, поэтому диапазон входных данных ограничен:

- переменная A должна лежать в диапазоне от 1 до 60

- переменная B должна лежать в диапазоне от 1 до 30


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-29; Просмотров: 856; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.274 с.)
Главная | Случайная страница | Обратная связь