Студопедия

КАТЕГОРИИ:

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

Разработка математического алгоритма.




Содержание

Задание…………………………………………………….….…3

Введение…………………………………………………...……4

1. Разработка алгоритма……………………………………5

1.1 Разработка математического алгоритма……….…….…5

1.2 Разработка схемы алгоритма…………………..……….10

2. Разработка программы……………………………….....14

3. Вычислительный эксперимент…………………………23

4. Руководство пользователя………………………….......26

5. Руководство программиста………………………….….29

Заключение…………………………………………………..…31

Список литературы…………………………………….………31

Задание

Разработать алгоритм и программу на языке С++ вычисления площади, ограниченной двумя кривыми, заданными вариантом индивидуального задания дляинтервала, определяемого пользователем в диалоговом режиме.Также в диалоговом окне предусмотреть поля ввода значений коэффициентов функций: a, b, c,d.Интерфейс программыразработать с использованием MFC. Предусмотреть проверку ввода данных на корректностьи графическое отображение заданных функций. Предусмотреть в программе вызов справки.

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

Вариант задания (A3B9C7D18E3) представлен на таблице 1.

Таблица 1 – Вариант индивидуального задания.

 

Основание системысчисления входных данных Основание системы счисления выходных данных Функция 1 Функция 2 Метод интегрирования
A B C D E
5 16 y= y=asin(bx)-ecos(dx) Симпсона

 

Введение

В ходе данной работы требуется выполнить вычисления площадей методом Симпсона. Метод Симпсона – это метод численного интегрирования, основанный на том, что на частичном промежуткедуга некоторой параболы в общем случае теснее прилегает кривой y = f(x), чем хорда,соединяющая концы дуги этой кривой (метод трапеций).

Формула Симпсона (также Ньютона-Симпсона) относится к приёмам численного интегрирования. Получила название в честь британского математикаТомаса Симпсона (1710—1761).
    Суть метода заключается в приближении графика функции на отрезке параболой. Метод Симпсона имеет алгебраический порядок точности 3.

Алгебраический порядок точности численного метода (порядок точности численного метода, степень точности численного метода, порядок точности, степень точности) — наибольшая степень полинома, для которой численный метод даёт точное решение задачи.
    Другое определение: говорят, что численный метод имеет порядок точности d, если его остаток равен нулю для любого полинома степени d, но не равен нулю для полинома степени d+1.

Численное интегрирование — вычисление значения определённого интеграла (как правило, приближённое). Под численным интегрированием понимают набор численных методов для нахождения значения определённого интеграла.

 

 



Разработка алгоритма

Разработка математического алгоритма.

Математический алгоритм представляет собой понятия и формулы, которые используются в работе, поэтому рационально будет его разделить на два подраздела. Первый подраздел включает себя алгоритм перевода из одной системы счисления (далее с.с.) в другую с.с..Второй подраздел включает в себя алгоритм нахождения площади, ограниченной двумя графиками и границами нахождения площади по оси 0x.

1.1.1 Алгоритм перевода из одной системы счисления в другую.

Исходя из варианта индивидуального задания было решено производить перевод вводимых данных из начальной с.с. с основанием 5 в систему с основанием 10, далее ответ, полученный в результате вычислений требуется вывести в с.с. с основанием 16. 

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

Рассмотрим пример перевода целого числа 334125:

334125=2*50+1*51+4*52+3*53+3*54=235710

 

Для перевода рациональных чисел требуется совместить перевод целой части и перевод части числа после запятой.

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

Рассмотрим пример перевода рационального числа0,2110в шестнадцатеричную систему счисления:

0, 2100 * 16
  3 3600 * 16
5 7600

Получается, что 0,2110 = 0,3616.

Часть переводимого числа после запятой переводится из 10 с.с. в другую при помощи последовательного умножения на основание последней с “собиранием целых частей”. Полученные при умножении целые части собираются, но не участвуют в следующих операциях. Умножаются только дробные. Если исходное число больше 1, то целая и дробная части переводятся отдельно, а потом “собираются”.

 

1.1.2 Площадь фигуры, ограниченной одним и более графиками.

1.1.2.1 Исследования функций.

Рассмотрим функции, ограничивающие площадь:

y= - показательная функция. На рисунке 1 представлены графики функции при различных показателях.

 

а)                                                б)

в)                                                 г)

 

Рисунок1 – Графики функции при различных показателях y=

 

Исходя из графиков функции можем сделать следующие выводы:

Функция симметрична относительно оси 0y, так как переменная в степени показателя функции во второй степени (х^2) и имеет минимум(максимум) при x = 0 и значении показателя а> 0 (а< 0), что мы можем наблюдать на рис.1 а) и б). При значении показателяа = 0 и а = 1 функция равна а при любом значении x (рис.1 в) и г)). Если показательа отрицателен – график функции будет отзеркален относительно оси 0х. От степени показателя зависит скорость изменения функции - чем больше степень, тем интенсивнее график устремляется вверх(вниз). Минус в степени превращает график а> 0 (а< 0) в график а<0 (а> 0) без минуса в степени.

 

y=asin(bx)-ecos(dx) - тригонометрическая функция, закономерности которой можно наблюдать на рисунке 6.

 

а)                                     б)                             в)

г)                                     д)                             е)

Рисунок2 – Графики функции при различных показателях y=asin(bx)-ecos(dx).

 

Исходя из графиков функции можем сделать следующие выводы:

На рис.2а) и б)коэффициент аравен 1 и -1, из чего можем сделать вывод что график “отражается” относительно оси 0у. На графиках в) и г)коэффициентаравен 10 и 100, из чего можем сделать вывод что а определяет максимальную амплитуду графика. На графиках д)и е) мы можем наблюдать влияние коэффициентов перед x при синусе и косинусе.

Так как у функции y= при увеличении коэффициента а  имеется тенденция к увеличению скорости роста, ее диапазон вычисления по оси будет ограничен небольшими числами, так как при больших вычисляемое значение слишком велико. Функция y=asin(bx)-ecos(dx) имеет “повторяемость” на всем интервале, поэтому ограничение интервала по оси с этой функцией не связано.

 

При написании программы будут учтены вышеперечисленные закономерности.

 

1.1.2.2 Математическое вычисление площади фигуры.

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

Разделим введенный пользователем диапазон [A;B] на заданное четное количество отрезков N.

Длина данного отрезка , точками деления будут x0=A, x1, x2,
…xn-2, xn-1, xn=B, а y0, y1, y2, …yn-2­, yn-1, yn – соответствующие значения подынтегральных функций на отрезке [A;B].

Применяя малую формулу Симпсона найдем площади криволинейных трапеций для каждой пары получившихся отрезков:

 

……………………………

 
(1)


Тогда

(2)
Заметим, что во всех выражениях I1,I2, …In/2первый множитель равен :

………………

Сделав замену по формулам (2), вынося общий множитель за скобку и группируя слагаемые в (1) получаем «большую» формулу Симпсона, которая имеет вид:

 

(3)

Конечный вид формулы можно записать следующим образом:

(4)

где , , , .

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

(5)

 

, гдеm(х)= (первая функция, дана по заданию)иg(х)=asin(bx)-ecos(dx)(вторая функция, дана по заданию) – значения функций в точке х, ограничивающих искомую площадь.

 



Разработка схемы алгоритма

 Схема алгоритма программы представлена на рисунке 3.

 


Рисунок 3 – Схема алгоритма программы.

СхемыалгоритмовфункцийnotationTest() иintinputConvert(int R)     представлены на рисунке 4.

СхемаалгоритмафункцииmainCalculation() представлена на рисунке 5.

 

а)                                                              б)

 

Рисунок 4 – Схемы алгоритмов проверки числа на принадлежность нужной с.с.(а)и перевода из n- ной с.с. в десятеричную(б).

 

 

 

Рисунок 5 – Схема алгоритма функции основных вычислений.

 

Схемыалгоритмовфункцийdoublefunc1(doublex) иdoublefunc2(doublex)представлены на рисунке 6.

 

а)                                                  б)

 

Рисунок 6 – Схемыалгоритмоввычисления значений функций m(х)= (а)ифункции g(х)=asin(bx)-ecos(dx)(б).

 


Разработка программы

Программа разрабатывается в среде разработки VisualStudioCommunity 2017.

2.1 Библиотеки и заголовочные файлы.

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

MFCkursovaya Musatov1.h- главный файл заголовка для приложения. Добавляется средой разработки при создании проекта.

MFCkursovaya Musatov1Dlg.h – файл заголовка. Добавляется средой разработки при создании проекта.

afxdialogex.h–эточастьбиблиотекиMicrosoftFoundationClassesC ++.Добавляется средой разработки при создании проекта.

ПакетMicrosoftFoundationClasses — библиотеканаязыкеC++, разработаннаяMicrosoftипризваннаяоблегчитьразработкуGUI-приложенийдляMicrosoftWindowsпутёмиспользованиябогатогонаборабиблиотечныхклассов.

math.h–заголовочный файл стандартной библиотеки языка программирования С, разработанный для выполнения простых математических операций. Добавлен для выполнения простых математических операций, таких как возведение в степень для выполнения задачи перевода из с.с. с основанием 5 в десятеричную в функции intinputConvert(int R).

iostream – заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C++.

stdio.h– заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода. Добавлен для использования функции sprintf_s(…).

 

 

2.2 Использованные функции.

Функции, использованные и созданные в ходе разработки программы приведены в таблице 2.

 

Таблица 2 – Функции и их описания.

Функция Описание
1 double pow(double number, double degree);   Стандартная функция из библиотеки math.h. Возвращает значение типа double при входных значениях числа, возводимого в степень (doublenumber), и степени (doubledegree).
2 double abs(double number); Стандартная функция из библиотеки math.h. Возвращает модуль типа double от входного значения doublenumber.
3 sprintf_s(char s[n],const char format [,argument] ... );   Стандартнаяфункциязаписи форматированных данных в строку.chars[n] – буфер, в который производится запись.constcharformat – строка управления форматом.  [, argument] – необязательные аргументы для форматирования.
4 MessageBox(char s[n]); Функция в MFC для вывода диалоговых сообщений. Выводит char s[n] в новом окне программы.  
5 voidzeroAll(); Процедура обнуления переменных, участвующих в вычислениях.
6 double func1(double x); Функция расчета значения *первой функции от х. (см. схемы алгоритма программы).
7 double func2(double x); Функция расчета значения *второй функции от х. (см. схемы алгоритма программы).
8 doublecalc(double x); Функция вычисления разницы между значениями *первой и *второй функциями от х.
9 voidmainCalculation(); Процедура основных вычислений методом Симпсона.
10 voidnotationTest(int n); Функция проверки правильности ввода в пятеричной с.с..
11 voidnotationTester(); Процедура запускающая проверку правильности ввода (voidnotationTest(int n)) для всех введенных пользователем переменных.
12 intinputConvert(int R); Функция перевода из 5-ричной с.с. в 10-ричную. Выдает значение типа intпри входном значении intR.
13 voidinputConvertor(); Процедура запускающая перевода из 5-ричной с.с. в 10-ричную (intinputConvert(int R)) для всех введенных пользователем переменных.
14 booloverflowTest(double S); Функция проверки ответа на переполнение. Влияет на флаг ошибки boolnotaTest.

2.3 Переменные.

Основные переменные и их описания приведены в таблице 3.

 

Таблица 3 – Основные переменные и их описания.

Переменные Описание
1 floatA, B, a, b, c , a2, b2, d;    Переменные, хранящие введенные пользователем данные.
2 intAf, Bf, Cf, Af2, Bf2, Df; Переменные, хранящие данные из a, b, c , a2, b2, d для дальнейших вычислений.
3 doubleYedge, Yeven, Yodd; Переменные, в которых в дальнейшем накапливается сумма значений результирующей функций в крайних точках (Yedge), четных(Yeven) и нечетных(Yodd) для вычисления результата (площади) формуле Симпсона.
4 doubleS; Переменная, накапливающая в себе ответ (площадь).
5 doubledegree, x;floatdelta;         Переменные, хранящие перманентные значения для вычислений.
6 doublestep = 0.001; Шаг. Определят на какие отрезки условно делится исследуемый для расчета участок. Требуется для формулы Симпсона.
7 floatstartX, endX; Хранят веденные данные о начале и конце промежутка вычисления площади.
8 boolnotaTest; Флагошибкиввода
9 chars[2000]; Массив символов. Используется для вывода сообщений с помощью MessageBox(char s[n]) (см. таблицу 2).

 

В функциях, содержащихся в программе есть локальные переменные, которые приведены в таблице 4. Описания функций приведены в таблице 2.

 

Таблица 4 – Локальные переменные и их описания.

Переменые (функция) Описание
1 double y3; (double func1(double x)) Переменная, хранящая возвращаемое значение.
2 double y2; double exp(1); (double func2(double x)) у2 – хранит возвращаемое значение. ехр(1) – экспонента.
3 inti, An, Sn = 0, an = 5;         intinput[5]= {0,0,0,0,0};         (intinputConvert(int R))         аn - основание системы счисления этого числа. input[n] - n - разрядность R -переводимого числа. Аn – промежуточная переменная. Sn – возвращаемое значение.

 

2.4 Обмен данными между функциями.

После того, как данные извлечены из переменных ввода пользователя (№1 и №7 в таблице 3), они помещаются в “глобальные” переменные для дальнейших вычислений. Далее функции имеют к ним доступ и используют их напрямую. Также некоторые функции имеют собственные локальные переменные (таблица 4).

Код программы представлен на рисунке 7.

 

// MFCkursovaya Musatov1Dlg.cpp: файл реализации

#include"stdafx.h"

#include"MFCkursovaya Musatov1.h"

#include"MFCkursovaya Musatov1Dlg.h"

#include"afxdialogex.h"

 

#include<math.h>

#include<iostream>

#include<stdio.h>

 

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

 

// Диалоговое окно CAboutDlg используется для описания сведений о приложении

classCAboutDlg :publicCDialogEx

{

public:

  CAboutDlg();

 

// Данныедиалоговогоокна

#ifdef AFX_DESIGN_TIME

  enum{ IDD = IDD_ABOUTBOX };

#endif

  protected:

  virtualvoidDoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV

 

// Реализация

protected:

  DECLARE_MESSAGE_MAP()

};

 

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)

{ }

voidCAboutDlg::DoDataExchange(CDataExchange* pDX)

{ CDialogEx::DoDataExchange(pDX);    }

 

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)

END_MESSAGE_MAP()

 

// ДиалоговоеокноCMFCkursovayaMusatov1Dlg

CMFCkursovayaMusatov1Dlg::CMFCkursovayaMusatov1Dlg(CWnd* pParent/*=NULL*/)

  : CDialog(IDD_MFCKURSOVAYAMUSATOV1_DIALOG, pParent)

  , A(0)

  , B(0)

  , a(0)

  , b(0)

  , c(0)

  , d(0)

  , a2(0)

 

Рисунок 7 – Текстпрограммы.

  , b2(0)

  , Aff(0)

  , Bff(0)

  , А(0)

{

  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

voidCMFCkursovayaMusatov1Dlg::DoDataExchange(CDataExchange* pDX)

{

  CDialog::DoDataExchange(pDX);

  DDX_Text(pDX, IDC_EDIT4, a);

  DDV_MinMaxInt(pDX, a, 0, 10);

  DDX_Text(pDX, IDC_EDIT5, b);

  DDV_MinMaxInt(pDX, b, 0, 10);

  DDX_Text(pDX, IDC_EDIT6, c);

  DDV_MinMaxInt(pDX, c, 0, 10);

  DDX_Text(pDX, IDC_EDIT7, d);

  DDV_MinMaxInt(pDX, d, 0, 100);

  DDX_Text(pDX, IDC_EDIT8, a2);

  DDV_MinMaxInt(pDX, a2, 0, 100);

  DDX_Text(pDX, IDC_EDIT9, b2);

  DDV_MinMaxInt(pDX, b2, 0, 100);

  DDX_Text(pDX, IDC_EDIT10, Aff);

  DDX_Text(pDX, IDC_EDIT11, Bff);

}

BEGIN_MESSAGE_MAP(CMFCkursovayaMusatov1Dlg, CDialog)

  ON_WM_SYSCOMMAND()

  ON_WM_PAINT()

  ON_WM_QUERYDRAGICON()

  ON_BN_CLICKED(IDOK, &CMFCkursovayaMusatov1Dlg::OnBnClickedOk)

  ON_BN_CLICKED(IDCANCEL, &CMFCkursovayaMusatov1Dlg::OnBnClickedCancel)

  ON_EN_CHANGE(IDC_EDIT2, &CMFCkursovayaMusatov1Dlg::OnEnChangeEdit2)

  ON_BN_CLICKED(IDCANCEL2, &CMFCkursovayaMusatov1Dlg::OnBnClickedCancel2)

END_MESSAGE_MAP()

// ОбработчикисообщенийCMFCkursovayaMusatov1Dlg

BOOLCMFCkursovayaMusatov1Dlg::OnInitDialog()

{

  CDialog::OnInitDialog();

 

  // Добавлениепункта "Опрограмме..." всистемноеменю.

 

  // IDM_ABOUTBOX должен быть в пределах системной команды.

  ASSERT((IDM_ABOUTBOX& 0xFFF0) == IDM_ABOUTBOX);

  ASSERT(IDM_ABOUTBOX< 0xF000);

 

  CMenu* pSysMenu = GetSystemMenu(FALSE);

  if (pSysMenu != NULL)

  {

        BOOLbNameValid;

        CStringstrAboutMenu;

        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

        ASSERT(bNameValid);

        if(!strAboutMenu.IsEmpty())

        {

               pSysMenu->AppendMenu(MF_SEPARATOR);

               pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

        }

  }

  // Задает значок для этого диалогового окна. Среда делает это автоматически,

  // если главное окно приложения не является диалоговым

  SetIcon(m_hIcon, TRUE);            // Крупныйзначок

  SetIcon(m_hIcon, FALSE);     // Мелкийзначок

 

Рисунок 7 – Продолжение.

  returnTRUE; // возврат значения TRUE, если фокус не передан элементу управления

}

 

voidCMFCkursovayaMusatov1Dlg::OnSysCommand(UINTnID, LPARAMlParam)

{

  if ((nID& 0xFFF0) == IDM_ABOUTBOX)

  {

        CAboutDlgdlgAbout;

        dlgAbout.DoModal();

  }

  else

  {

        CDialog::OnSysCommand(nID, lParam);

  }

}

 

// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,

// чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,

// это автоматически выполняется рабочей областью.

 

voidCMFCkursovayaMusatov1Dlg::OnPaint()

{

  if (IsIconic())

  {

        CPaintDCdc(this); // контекст устройства для рисования

 

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

 

        // Выравнивание значка по центру клиентского прямоугольника

        intcxIcon = GetSystemMetrics(SM_CXICON);

        intcyIcon = GetSystemMetrics(SM_CYICON);

        CRectrect;

        GetClientRect(&rect);

        int x = (rect.Width() - cxIcon + 1) / 2;

        int y = (rect.Height() - cyIcon + 1) / 2;

 

        // Нарисуйтезначок

        dc.DrawIcon(x, y, m_hIcon);

  }

  else

  {

        CDialog::OnPaint();

  }

}

 

// Система вызывает эту функцию для получения отображения курсора при перемещении

// свернутого окна.

HCURSORCMFCkursovayaMusatov1Dlg::OnQueryDragIcon()

{

  returnstatic_cast<HCURSOR>(m_hIcon);

}

 

 

voidCMFCkursovayaMusatov1Dlg::OnBnClickedCancel()

{

  // TODO: добавьтесвойкодобработчикауведомлений

  CDialog::OnCancel();

}

 

Рисунок 7 – Продолжение.

 

 

voidCMFCkursovayaMusatov1Dlg::OnEnChangeEdit2()

{

  // TODO: Если это элемент управления RICHEDIT, то элемент управления не будет

  // send this notification unless you override the CDialog::OnInitDialog()

  // function and call CRichEditCtrl().SetEventMask()

  // with the ENM_CHANGE flag ORed into the mask.

  // TODO: Добавьте код элемента управления

}

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

 

intAf, Bf, Cf, Af2, Bf2, Df;

doubleYedge = 0, Yeven = 0, Yodd = 0, S = 0, degree, x, step = 0.001;

floatstartX, endX, delta;

boolnotaTest = 0;

chars[2000];

 

voidzeroAll() {              // процедураобнуленияпеременных, участвующихввычислениях

  startX = 0, endX = 0, Af = 0, Bf = 0, Cf = 0, Af2 = 0, Bf2 = 0, Df = 0, delta = 0;

  Yedge = 0, Yeven = 0, Yodd = 0, S = 0, degree = 0, x = 0, step = 0.001;

  notaTest = 0;

}

////////////////////////////////////////////////////////////

 

double func1(doublex) {      // рассчет значения *первой функции от х

  double y3;

  degree = Bf * x*x + Cf;

  if ((degree > (-0.001)) && (degree< 0.001)) { y3 = 1; }

  else {

        y3 = pow(Af, degree);

  }

  return y3;

}

 

double func2(doublex) {      // рассчет значения *второй функции от х

  double y2;

  doubleexp(1);

  y2 = Af2 * (sin(Bf2*x)) + exp * (cos(Df*x));

  return y2;

}

 

doublecalc(doublex) {              // вычисление разницы между значениями *1 и *2 ф-циями в х

  return abs(func1(x) - func2(x));

}

 

voidmainCalculation()              // основные вычисления методом Симпсона

{

  Yedge = abs(calc(startX) - calc(endX));

  delta = abs(startX - endX);

  for (inti = 1; i< (delta / step); i++) {

        x += step;

        if (i % 2 == 0) {

               Yeven += calc(x);

        }

        else {

               Yodd += calc(x);

        }

  }

  S = (step / 3)*(Yedge + 4 * Yodd + 2 * Yeven);

}

 

Рисунок 7 – Продолжение.

 

////////////////////////////////////////////////////////////

 

voidnotationTest(intn) {     // проверка правильности ввода в пятеричной сс

  for (inti = 0; (i< 8); i++) {

    if ((n % 10) > 4) {

               notaTest = 1;

        }

        n /= 10;

  };

}

 

voidnotationTester() {

  notationTest(abs(startX));

  notationTest(abs(endX));

  notationTest(abs(Af));

  notationTest(abs(Bf));

  notationTest(abs(Cf));

  notationTest(abs(Af2));

  notationTest(abs(Bf2));

  notationTest(abs(Df));

}

////////////////////////////////////////////////////////////

 

intinputConvert(intR) // функцияпереводаизn-ричнойссв 10 ричную *ДЛЯЦЕЛЫХЧИСЕЛ

{

  inti, An, Sn = 0, an = 5;    // Объявлениепеременных: аn - основаниесистемысчисленияэтогочисла

  intinput[5] = {0,0,0,0,0};   // input[n] - n - разрядность R -переводимого числа

 

  for (i = 0; i<= 3; i++) {

        input[i] = R % 10;

        R /= 10;

        An = pow(an, i);

        Sn += input[i] * An;

  };

  return Sn;

}

 

voidinputConvertor() {

  startX = inputConvert(startX);

  endX = inputConvert(endX);

  Af = inputConvert(Af);

  Bf = inputConvert(Bf);

  Cf = inputConvert(Cf);

  Af2 = inputConvert(Af2);

  Bf2 = inputConvert(Bf2);

  Df = inputConvert(Df);

}

////////////////////////////////////////////////////////////

 

booloverflowTest(doubleS) {// максвозмзнач long longint = 9 223 372 036 854 775 807

  if (S> 8999999999999999999) { returntrue; }

}

voidCMFCkursovayaMusatov1Dlg::OnBnClickedOk()

{

  zeroAll();

  UpdateData(TRUE);

  startX = Aff;  // заносим значения введенные пользователем

  endX = Bff;           // в глобальные переменные для дальнейших преобразований

 

Рисунок 7 – Продолжение.

 

      

Af = a;

  Bf = b;

  Cf = c;

  Af2 = a2;

  Bf2 = b2;

  Df = d;

  notationTester();

if (notaTest == 0) {         // проверка правильности cc ввода

        inputConvertor();     // перевод из 5-ричной сс в 10 ричную; //*закомментить для ввода в десятичной и отрубить проверку ввода

        mainCalculation();    // основные вычисления

        if (overflowTest(S)==true) { // проверка [переполнения площади]*

// провал - переполнение

               sprintf_s(s, "ERROR:\nЗначение площади слишком велико или равно бесконечности.\nПостарайтесь выбрать вводимые значения согласно разделу 'Рекомендации по выбору вводимых значений и причины ошибок' .\nБольше информации вы можете найти в справке.");

}

        else {

               longlongint Sf = longlongint(S);

               sprintf_s(s, "Длявведенныхданныхполученаплощадь S.\nDec:\t%lf\nHex:\t%llx h ", S, Sf);  // Длястроки - %s, дляллинт %lld

        };

  } else {

        sprintf_s(s, "ERROR:\nНеверный параметр ввода.\nВведите значения согласно указанным требованиям.\nБольше информации вы можете найти в справке.");

  };

MessageBox(s);

  zeroAll();

  //CDialog::OnOK();

}

 

 

voidCMFCkursovayaMusatov1Dlg::OnBnClickedCancel2()

{

  sprintf_s(s, "Вданныймоментразделнаходитсявразработке, прошупрощениязанеудобство.");

  MessageBox(s);

}

 

Рисунок 7 – Продолжение.

 

      

      

            

      

 

3. Вычислительный эксперимент

 

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

Окно программы представлено на рисунке 8.

На рисунках 9,10 и 11 представлены вычислительные эксперименты. Введенные значения для вычислительных экспериментов 1-3 представлены в таблице 5.

 

Таблица 5 – Вводные данные и выводы для вычислительных экспериментов.

№ В.Э.

Границы расчета

Данные для функции 1

Данные для функции 2

Ответ, h

А В а b c a b d
1 0 0 0 0 0 0 0 0 0
2 -1 2 2 1 2 10 4 3 224
3 0 2 3 2 0 4 1 4 31a
4 -1 1 5 2 0 4 1 4 eror
5 -4 2 3 2 0 4 1 4 eror

 

На рисунках 12 и 13 (вычислительные эксперименты 4 и 5) представлены выводы программы при некоторых возможных ошибках* (см. руководство пользователя*, см. руководство программиста*).

 

Рисунок 8 – Окно программы.

При нажатии на кнопку “Рекомендации по выбору вводимых значений и причины ошибок” в отдельном окне выводится сообщение с краткими сведениями о программе и рекомендации по ее использованию.

Рисунок 9 – Вычислительный эксперимент 1.

Рисунок 10 – Вычислительный эксперимент 2.

 

Рисунок 11 – Вычислительный эксперимент 3.

 

Рисунок 12 – Вычислительный эксперимент 4. Ошибка ввода.

 

Рисунок 13 – Вычислительный эксперимент 5. Ошибка переполнения.

 

Руководство пользователя.

4.1 Введение.

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

4.1.1 Области применения:

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

4.1.2 Краткое описание возможностей:

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

4.1.3 Уровень подготовки пользователя:

Пользователь должен иметь опыт работы с ОС MS Windows (7/8/10), а также обладать следующими знаниями:
- знать соответствующую предметную область;

- знать основы математики;

Квалификация пользователя должна позволять осуществлять анализ данных.

4.1.4Перечень эксплуатационной документации, с которой необходимо ознакомиться пользователю:

- Руководство пользователя.

 

4.2 Назначение и условия применения программного продукта:

Данный продукт предназначен для расчета площадей методом Симпсона.

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

*Примечание: в программе предусмотрена проверка системы счисления, но она способна определить только попытку ввода чисел большей чем требуется системы счисления. Т.е. при вводе числа в системе счисления с основанием от 2 до 4 программа воспримет число как пятеричное, что несомненно исказит результаты вычислений.

 

4.3 Подготовка к работе.

Для запуска может потребоваться обновление пакета .netframework.
В пакет дистрибутива входит приложение формата .exe и текстовый файл REDME(возможные расширения: .txt/ .doc/ .docx) с руководством пользователя, руководством программиста и контактами разработчика. 

 

4.4 Описание операций.

С описанием операций можно ознакомиться на таблице 6.

Таблица 6 – Операции и их описания.

Название операции Действие
1 Рассчитать (Вызываетvoid CMFCkursovayaMusatov1Dlg::OnBnClickedOk()) Выполняет целевую функцию приложения – исходя из значений введенных пользователем рассчитывает площадь ограниченную графиками двух функций.
2 Рекомендации по выбору вводимых значений и причины ошибок (Вызываетvoid CMFCkursovayaMusatov1Dlg::OnBnClickedCancel2()) Выводит информацию, содержащую в себе рекомендации по выбору вводимых значений и причины ошибок, позволяющую предотвратить последние.
3 Выход (Вызываетvoid CMFCkursovayaMusatov1Dlg::OnBnClickedCancel()) Прекращает работу программы и закрывает её окно.

 

Условия, при соблюдении которых возможно выполнение операции:

1. Компьютер пользователя подключен к сети питания.

2. К компьютеру подключены необходимые устройства ввода и вывода.

 

 

4.5 Аварийные ситуации.

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

Таблица 7 – Ошибки и их описания.

Название ошибки Текст ошибки Варианты устранения
1 Ошибка ввода ERROR: Неверный параметр ввода. Введите значения согласно указанным требованиям. Больше информации вы можете найти в справке. Проверьте правильность введенных вами значений. Не должно быть превышений диапазонов или цифр больше чем ’4’.
2 Ошибка переполнения ERROR: Значение площади слишком велико или равно бесконечности. Постарайтесь выбрать вводимые значения согласно разделу 'Рекомендации по выбору вводимых значений и причины ошибок'. Больше информации вы можете найти в справке. Ошибка возникает при слишком больших значениях площади. Для устранения необходимо разделить требуемый диапазон на несколько более коротких и рассчитать их отдельно.

 

4.6 Рекомендации по освоению.

Запустите программу и проведите несколько пробных расчетов. Также вы можете повторить любой из примеров, показанных на рисунках 10-13.

 

 



Руководство программиста.

5.1 Назначение и условия применения программ

Расчет площади ограниченной графиками функций в указанных пользователем диапазонах с указанными пользователем коэффициентами методом парабол (Симпсона).

 

5.2 Требования к системе

32-разрядный (x86) или 64-разрядный (x64) процессор* с тактовой частотой 1 ГГц или выше. 1 ГБ (для 32-разрядного процессора) или 2 ГБ (для 64-разрядного процессора) ОЗУ.

 

5.3 Средства контроля правильности выполнения

В программу встроена стандартная система контроля и исправления ошибок и самовосстанавливаемости для MFC приложений с WinAPI.

Помимо этого встроена небольшая система предотвращения ошибок при использовании программы, которая приведена в таблице 8.

 

Таблица 8 – Предотвращение ошибок. назначение и реагирование.

Название ошибки Назначение Действие
1 Ошибка ввода Предотвращение вычислений, которые заведомо приведут к ошибочному ответу, при вводе пользователем некорректных значений. *Алгоритм не предполагает решения ситуации ввода данных меньшей чем требуется с.с.. Выход из вычислительного блока программы с сообщением об ошибке.
2 Ошибка переполнения Предотвращение вычислений, которые привели к ошибочному ответу/возможному неверному отображению ответа/, при вводе пользователем данных для рассчета, вычисления с использованием которых привели к переполнению переменной, в которой хранится ответ. Выход из вычислительного блока программы с сообщением об ошибке.

 

5.4 Входные и выходные данные

Входные данные – целые числа в системе счисления с основанием 5. Входные переменные записываются в переменные типа int.

Далее происходят преобразования входных данных в систему счисления с основанием 10 для дальнейших операций стандартными инструментами среды разработки над ними. Для преобразования создана intinputConvert(intR), код которой можно рассмотреть на рис.7 а алгоритм выполнения на рис. 2 б).

Выходные данные требуется переводить в с.с. с основанием 16. Для перевода используется стандартная функция форматирования из библиотеки stdio.h.

 

5.5 Созданные функции и их описания.

Созданные функции и их описания представлены в таблице 9.

 

Таблица 9 – Функции и их описания.

Функция Описание
1 voidzeroAll(); Процедура обнуления переменных, участвующих в вычислениях.
2 double func1(double x); Функция расчета значения *первой функции от х. (см. схемы алгоритма программы).
3 double func2(double x); Функция расчета значения *второй функции от х. (см. схемы алгоритма программы).
4 doublecalc(double x); Функция вычисления разницы между значениями *первой и *второй функциями от х.
5 voidmainCalculation(); Процедура основных вычислений методом Симпсона.
6 voidnotationTest(int n); Функция проверки правильности ввода в пятеричной с.с..
7 voidnotationTester(); Процедура запускающая проверку правильности ввода (voidnotationTest(int n)) для всех введенных пользователем переменных.
8 intinputConvert(int R); Функция перевода из 5-ричной с.с. в 10-ричную. Выдает значение типа intпри входном значении intR.
9 voidinputConvertor(); Процедура запускающая перевода из 5-ричной с.с. в 10-ричную (intinputConvert(int R)) для всех введенных пользователем переменных.
10 booloverflowTest(double S); Функция проверки ответа на переполнение. Влияет на флаг ошибки boolnotaTest.

 

 

Заключение

В ходе выполнения курсовой работы мы научились разрабатывать алгоритмы и программы с помощью среды разработки MS VisualStudio 2017, разработали интерфейс программы, которая вычисляет площадь, ограниченную графиками двух функций, для интервала, который задается пользователем, c использованием классов MFC с возможностями диалогового ввода входных данных и вывода результата в требуемых системах счисления. Также были изучены стандарты РД 50-34.698-90 и ГОСТ 19.504-79 ЕСПД, в соответствии с которыми были написаны руководства пользователя и программиста.

 

Список литературы:

1. ГОСТ 19.504-79 ЕСПД. Руководство программиста. - Требования к содержанию и оформлению. - Москва: Изд-во Стандартинформ, 2010. – 2 с.

2. РД 50-34.698-90. Руководство пользователя автоматизированной системы. Требования к содержанию документов. – Москва: ИПК Издательство стандартов, 2008. – 26 с.

3. КараваевЮ.Л..Методические указания к выполнению лабораторных работ по дисциплине «Информатика».– Ижевск,2013. – 53 с.

4. Библиотека MSDN (MicrosoftDeveloperNetwork) [Электронный ресурс]: библиотека официальной технической документации для разработчиков под ОС Microsoft Windows– Статья “Диапазоны типов данных”. – Режим доступа: https://msdn.microsoft.com/ru-ru/library/s3f49ktz.aspx, свободный.

5. Библиотека MSDN (MicrosoftDeveloperNetwork)[Электронный ресурс]:библиотека официальной технической документации для разработчиков под ОС Microsoft Windows– Статья “Критические изменения в Visual C++ 2015”. – Режим доступа: https://msdn.microsoft.com/ru-ru/library/bb531344.aspx, свободный.

6. Персональный сайт Владимира Соковикова[Электронный ресурс]: сайт - перевод на русский язык некоторых материалов Платформы SDK - Windows API. – Статья “Функция sprintf и swprintf.”. – Режим доступа: http://vsokovikov.narod.ru/New_MSDN_API/Add_func_runtime_C/fn_sprintf.htm, свободный.

7. Хабрахабр [Электронный ресурс]: Платформа для информационного обмена между участниками пользовательского сообщества. – Статья “Что такое TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR.”. – Режим доступа: https://habrahabr.ru/post/164193/, свободный.










Последнее изменение этой страницы: 2018-04-12; просмотров: 229.

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