">
Информатика ![]() | |||||||||||||||||||||||||||||||||||||||||
Похожие работы:
| |||||||||||||||||||||||||||||||||||||||||
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования "МАТИ" - РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ университет им. К.Э. Циолковского Факультет №3 Кафедра "ИТ" Курсовая работа по дисциплине «Алгоритмические языки и программирование». Тема: Программа вычисления определенного интеграла методом двойного пересчета по формуле Симпсона. Оценка:______ Дата:________ Москва 2012 Содержание 1.Постановка задачи3 2.Формальная постановка задачи4 3.Метод решения5 4.Внешняя спецификация6 5.Разработка алгоритма7 5.1.Словесный:7 5.2.Блок-схема:8 7.КОД ПРОГРАММЫ9 8.Тестирование14 9.Заключение15 1.Постановка задачи Составить программу вычисления определенного интеграла методом двойного пересчета по формуле Симпсона для функции y=exp(x*x). 2.Формальная постановка задачи Задача: вычислить определенный интеграл методом двойного пересчета по формуле Симпсона. y=exp(x*x). Дано: y=exp(x*x). 3.Метод решения 1.Математический метод решения: Для вычисления интеграла методом двойного пересчёта по формуле Симпсона для y=exp(x*x). Проводится ввод пределов интегрирования и подстановка их в формулу Симпсона:
где величина шага, а границы отрезков. 2.Словесный метод: Разделим все на ряд этапов: В начале программы вводится отрезок интегрирования [a,b],и точность значения интеграла; затем задаём цикл в котором производится расчёт значения интеграла для перехода к полной формуле Симпсона; по окончании цикла расчёта значений , эти значения передаются в тело программы где проводится расчёт значения интеграла по точной формуле Симпсона; далее происходит расчёт погрешности по формуле (S-S’)/15, где S’ точное значение интеграла, S- значение рассчитываемое по краткой формуле; после на экран выводится значение интеграла по формуле Симпсона и полученная погрешность погрешность.
4.Внешняя спецификация Назначение: Рассчитать значение интеграла, вывести на экран значение и погрешность расчёта. Входные данные: nignij, verhnij, tochnost – нижний, верхний пределы и точность соответственно. Выходные данные: Programmy raschyota opredelyonogo integrala metodom 2-go pereschyota po formule Simpsona dlya funktsii y=exp(x*x). Vvedite kontsi integrirovaniya Vvedite nizhnij predel: Vvedite verkhnij predel: Vvedite tochnost’: < Znachenie integrala:>= Аномалии входных данных Совпадение границ интегрирования nignij=verhnij -значение интеграла равно 0; точность равная нулю или отрицательная выводится ошибка «Oshibka!Tochnost bolshe 0 menshe 1». 5.Разработка алгоритма 1.Словесный: При запуске программы на экране выводится "Programmy raschyota opredelyonogo integrala metodom 2-go pereschyota po formule Simpsona dlya funktsii y=exp(x*x).". Следом выводится надпись: "Vvedite kontsi integrirovaniya", далее на экран выводится"Vvedite nizhnij predel:",после чего пользователю требуетсся ввести значение нижнего предела интегрирования. Далее выводится надпись:"Vvedite verkhnij predel: ",после чего пользователь вводит значение верхнего предела интегрирования.Аналогичные действия для ввода точности интегрирования "Vvedite tochnost’: ".После ввода данных на экран выводится надпись "Znachenie integrala: " и значение расчитаное в программе,далее выводится "Pogreshnost ravna: " и соответственно значение погрешности. 2.Блок-схема: 7. КОД ПРОГРАММЫ #include #include #include #include #include #include #include #include // исходная функция long double FunkIskh(double k) { long double func; func=exp(k*k); return func; } //тело программы void main() { //задаём переменные int i,n; char str[10]; long double nignij, verhnij, Pogr, tochnost, ZnachNachToch, ZnachKonToch, s, PolnSimp, KorotSimp,SHag,x1,x2; cout << "Programmy raschyota opredelyonogo integrala metodom 2-go pereschyota po formule Simpsona dlya funktsii y=exp(x*x).
"; cout << "Vvedite kontsi integrirovaniya
"; cout << "Vvedite nizhnij predel: "; nignij=proverka2(str); cout << "
Vvedite verkhnij predel: "; do {//цикл проверки условися verhnij=proverka2(str); if(verhnij } while(verhnij do {//цикл проверки условия tochnost=proverka2(str); if(0>tochnost || tochnost>1 ) cout<< "Oshibka!Tochnost bolshe 0 menshe 1
"; } while(0>tochnost || tochnost>1); ZnachNachToch=FunkIskh(nignij); ZnachKonToch=FunkIskh(verhnij); s=ZnachNachToch-ZnachKonToch; KorotSimp= (verhnij-nignij)*(ZnachNachToch+ZnachKonToch+4*FunkIskh((nignij+verhnij)/2))/6; n=2; do { //цикл проверки соответствия условию с расчетами SHag=(verhnij-nignij)/n; x1=nignij+SHag/2; x2=nignij+SHag; PolnSimp=s; for(i=1;i<=n;i++) //цикл расчётов точного значения интеграла { PolnSimp=PolnSimp+4*FunkIskh(x1)+ 2*FunkIskh(x2); x1+=SHag; x2+=SHag; }; PolnSimp*=SHag/6; Pogr=fabs(KorotSimp-PolnSimp)/15; KorotSimp=PolnSimp; n=n*2; } while(Pogr>=tochnost);//вывод на экран значения интеграла и погрешности cout << "Znachenie integrala: "<< PolnSimp; cout << "
Pogreshnost ravna: " << Pogr ; } В программе использовался вспомогательный код проверки(защиты ввода): Proverka.h int proverka1(char *mas) { const MaxSizeStr=10; int i,minus=0,minusindex=0,point=0,letters=0,punct=0,error=0,resint; char n,str[MaxSizeStr],minussign,pointsign; minussign=-; pointsign=. do { minus=0; minusindex=0; point=0; letters=0; punct=0; error=0; do { cin >> str; n=strlen(str); if (n>MaxSizeStr) cout << "error! vvedennoe chislo slishkom dlinnoe!
povtorite vvod!
"; } while(n>MaxSizeStr); for (i=0;i if (str[i]==minussign && i==0) { minus=minus+1; minusindex=1; } if (str[i]==minussign && i!=0) { minus=minus+1; minusindex=2; } if (str[i]==pointsign) { point=point+1; } if (isalpha(str[i])!=0) { letters=letters+1; } if (ispunct(str[i])!=0 && str[i]!=pointsign && str[i]!=minussign) { punct=punct+1; } } //проверка if (minus>1) { cout << "error! nepravilnoe kolichestvo minusov
"; error=error+1; } if (minusindex==2) { cout << "error! nepravilnoe pologenie minusa
"; error=error+1; } if (point>0) { cout << "error! vvedennoye chislo ne zeloe
"; error=error+1; } if (letters>0) { cout << "error! obnarugeni odna ili neskolko bukv
"; error=error+1; } if (punct>0) { cout << "error! obnarugen odin ili neskolko postoronnikh znakov punktuazii
"; error=error+1; } if (error>0) { cout << "povtorite vvod!
"; cout << "errors:" << error << "
"; } } while(error>0);//цикл ввода будет повторяться до тех пор, пока не будет ошибок //результаты resint=atoi(str); return resint; } double proverka2(char *mas)//проверка для вещественных чисел { const MaxSizeStr=10; double resdouble; int i,minus=0,minusindex=0,point=0,pointerrors=0,letters=0,punct=0,error=0; char n,str[MaxSizeStr],minussign,pointsign; minussign=-; pointsign=.; do { minus=0; minusindex=0; point=0; pointerrors=0; letters=0; punct=0; error=0; do { cin >> str; n=strlen(str); if (n>MaxSizeStr) cout << "error! vvedennoe chislo slishkom dlinnoe!
povtorite vvod!
"; } while(n>MaxSizeStr); for (i=0;i if (str[i]==minussign && i==0) { minus=minus+1; minusindex=1; } if (str[i]==minussign && i!=0) { minus=minus+1; minusindex=2; } if (str[i]==pointsign && i==0) { point=point+1; pointerrors=1; } if (str[i]==pointsign && i!=0 && i!=n-1) { point=point+1; } if (str[i]==pointsign && i==n-1) { point=point+1; pointerrors=1; } if (isalpha(str[i])!=0) { letters=letters+1; } if (ispunct(str[i])!=0 && str[i]!=pointsign && str[i]!=minussign) { punct=punct+1; } } //проверка if (minus>1) { cout << "error! nepravilnoe kolichestvo minusov
"; error=error+1; } if (minusindex==2) { cout << "error! nepravilnoe pologenie minusa
"; error=error+1; } if (point>1) { cout << "error! nepravilnoe kolichestvo tochek
"; error=error+1; } if (pointerrors==1) { cout << "error! nepravilnoe pologenie tochki
"; error=error+1; } if (letters>0) { cout << "error! obnarugeni odna ili neskolko bukv
"; error=error+1; } if (punct>0) { cout << "error! obnarugen odin ili neskolko postoronnikh znakov punktuazii
"; error=error+1; } if (error>0) { cout << "povtorite vvod!
"; cout << "errors:" << error << "
"; } } while(error>0); //результаты resdouble=atof(str); return resdouble;//возвращаем значение переменной в место вызова функции } 8.Тестирование Для проведения тестирования была выбрана Стратегия “Черный ящик”.№
Название теста
Исходные данные
Результат
Эталонный результат
1.
Проверка совпадения концов интегрирования
nignij =0 verhnij=0 tochnost’=2
Poln Simp=0
Poln Simp=0
2
Проверка точности
nignij =2 verhnij=4 tochnost’=0.1
PolnSimp=1,1493e+006 Pogr=0,0064329
PolnSimp=1,1493e+006 Pogr=0,0064329
3
Проверка ввода
nignij=кен verhnij= tochnost’=
error! obnarugen odin ili neskolko postoronnikh znakov punktuazii povtorite vvod! errors:1
error! obnarugen odin ili neskolko postoronnikh znakov punktuazii povtorite vvod! errors:1
4
Проверка ввода
nignij=5 verhnij=кен tochnost’=
Oshibka!Tochnost bolshe 0 menshe 1
Oshibka!Tochnost bolshe 0 menshe 1
5
Проверка ввода
nignij=7 verhnij=9 tochnost=ghf
error! obnarugen odin ili neskolko bukv povtorite vvod! errors:1
error! obnarugen odin ili neskolko bukv povtorite vvod! errors:1
6
Проверка знаков + - * /
nignij=45-45 verhnij= tochnost’=
error! nepravilnoe pologenie minusa povtorite vvod! errors:1
error! nepravilnoe pologenie minusa povtorite vvod! errors:1
7
Проверка знаков пунктуации
nignij=45 verhnij= tochnost’=
error! nepravilnoe pologenie tochek punktuazii povtorite vvod! errors:1
error! nepravilnoe pologenie tochek punktuazii povtorite vvod! errors:1
9.Заключение Данная программа рассчитывает определённый интеграл в границах [a,b] для функции y=exp(x*x),выводит на значение погрешности расчёта интеграла. Удобство сопровождения текста программы обеспечивается правильным оформлением, а также достаточным количеством комментариев, которые позволяют быстрее ориентироваться в её коде. Пояснительная записка содержит всю необходимую информацию о модулях, подпрограммах, структурах данных, а так же методах тестирования. Существует возможность корректного исполнения исходных кодов с другими версиями среды разработки С++. Разработанная программа, по моему мнению, полностью соответствует поставленной задаче. В программе используется вспомогательный код проверки, который более чем в три раза превышает объем самой программы вычисления. Он способствует сведению к минимуму вероятности некорректного завершения программы, за счет проверки правильности исходных вводимых данных. Надежность программы была проверена по стратегии черного ящика и полученные результаты вычисления были полностью идентичны эталонному значению. |
© 2010–2021 Эссе.рф: Библиотека учебных материалов |