Использование языков программирования высокого уровня для решения задач вычислительной математики
Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.05.2018 |
Размер файла | 381,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
|
Министерство образования и науки Российской Федерации |
|
федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Балтийский государственный технический университет «ВОЕНМЕХ» им. Д.Ф. Устинова» (БГТУ «ВОЕНМЕХ» им. Д.Ф. Устинова») |
||
Стандарт организации |
||
БГТУ.СМК-П-4.2-12 |
ПОЛОЖЕНИЕ ПО СОДЕРЖАНИЮ, ОФОРМЛЕНИЮ, ОРГАНИЗАИИ ВЫПОЛНЕНИЯ И ЗАЩИТЫ КУРСОВЫХ ПРОЕКТОВ И КУРСОВЫХ РАБОТ |
Должность |
Фамилия/ Подпись |
Дата |
|||
Разработал |
Начальник ОКО |
Соловьева Н.Л. |
|||
Согласовал |
Первый проректор-проректор по образовательной деятельности |
Бородавкин В.А. |
|||
Версия:2.0 |
КЭ:_________ |
УЭ №________ |
Стр. 1 из 20 |
КУРСОВАЯ РАБОТА
на тему
Использование языков программирования высокого уровня для решения задач вычислительной математики
Содержание
- Введение
- 1. Методы численного интегрирования, использующиеся в этой курсовой работе
- 2. Решение задания на языке высокого уровня C
- 3. Решение задания на языке высокого уровня Паскаль
- 4. Построение графического решения задачи в пакете Matlab
- Заключение
- Список используемой литературы
Введение
Постановка задачи: реализовать задачу вычислительной математики на двух языках программирования - Pascal и Си
Несмотря на простоту представленной математической задачи, она может служить прекрасным примером для обучения структурному программированию.
Структурное программирование основывается на 3-х основных составляющих:
1) Использование трех базовых структур - следования, ветвления и циклов
2) Модульное программирование (использования большого количества подпрограмм и модулей для разбития более сложной задачи на ряд простейших)
3) Нисходящее программирование - создание сначала основной функции, а потом последовательное присоединение к ней подпрограмм, стоящих по иерархии ниже по уровню.
В этой работе мы будем использовать все три составляющие - как разобьем программу на множество подпрограмм, так и будем использовать нисходящее программирование, для того чтобы улучшить согласованность подпрограмм между собой. Это позволит нам решить поставленную математическую задачу наиболее эффективно.
Постановка задачи
Найти значение интеграла , пользуясь методом трапеций, методом Симпсона и методом Ньютона для различных n (n=6, 12, 30). Сравнить с точным значением интеграла и оценить погрешности методов при указанных n. Изобразить график подынтегральной функции и заштриховать область, площадь которой равна значению интеграла.
Описание курсовой работы
Курсовая работа выполнена с учетом требований технологии структурного программирования. Программа предусматривает возможность ввода исходных данных с клавиатуры и чтение из файла, также программа осуществляет вывод результатов на экран и запись в файл. Диалоговое взаимодействие пользователя с программой реализуется через систему меню, что предоставляет пользователю последовательно выполнять различные действия.
1. Методы численного интегрирования, использующиеся в этой курсовой работе
Эти методы применяются для приближенного вычисления определенного интеграла вида: . Функция f(x) задана на отрезке [a, b]. Этот отрезок разбивается на n равных частей длины h=(b-a)/n.
Определенный интеграл представляет собой площадь, ограниченную кривой f(x), осью x и прямыми x=a и x=b. Приблизительно эта площадь представляется суммой площадей полос, основания которых одинаковы и равны h, а высоты равны значениям функции в точках разбиения. Обозначим точки разбиения x0=a, x1=a+h, x2= a+2h,…xn=b, а значения функции в этих точках соответственно yo=f(x0); y1=f(x1), y2=f(x2), … yn=f(xn).
Метод трапеций:
Метод Симпсона:
гдеn=2*m число разбиений отрезка [a, b], кратное двум.
Метод Ньютона:
гдеn=m*3- число разбиений отрезка [a, b], кратное трем
2. Решение задания на языке высокого уровня С
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define a -1
#define b 1
#define I 2.350402
int N;
void menu();
float y(float x);
intget_n();
float Simpson();
float Trap();
floatNewton();
intconsole_n();
intfile_n();
void output(float f, inti);
void console_I(float f, inti);
void file_i(float f, inti);
int main()
{
menu();
return 0;
}
void menu()
{
printf("\n %3.d\n", b);
printf(" I = S(e^x)dx\n");
printf(" %1.d\n\n", a);
printf("1. Solve by Simpson\n2. Solve by trapeze\n3. Solve by Newton\n4. Exit\n>> ");
int c;
float f;
scanf("%d", &c);
switch (c)
{
case 1 :
{
system("cls");
f = Simpson();
break;
}
case 2 :
{
system("cls");
f = Trap();
break;
}
case 3 :
{
system("cls");
f = Newton();
break;
}
case 4 :
{
system("cls");
exit(1);
break;
}
default :
{
system("cls");
menu();
}
}
output(f, c);
printf("Push any button to return to menu...");
getch();
system("cls");
menu();
}
void console_I(float f, inti)
{
system("cls");
if (i == 1)
printf("Solved by Simpson method: n = %d\n", N);
else if (i == 2)
printf("Solved by trapeze method: n = %d\n", N);
else
printf("Solved by Newton method: n = %d\n", N);
printf("\n %3.d\n", b);
printf(" I = S(e^x)dx = %f\n", f);
printf(" %1.d\n\n", a);
printf("Exact value: %f\n", I);
printf("Difference: %f\n", I - f);
}
void file_I(float f, inti)
{
FILE *t;
t = fopen("C:/Documents and Settings/User/Рабочийстол/Прога/Курсач/output_f.txt", "w");
if (i == 1)
fprintf(t, "Solved by Simpson method: n = %d\n", N);
else if (i == 2)
fprintf(t, "Solved by trapeze method: n = %d\n", N);
else
fprintf(t, "Solved by Newton method: n = %d\n", N);
fprintf(t, "\n %3.d\n", b);
fprintf(t, " I = S(e^x)dx = %f\n", f);
fprintf(t, " %1.d\n\n", a);
fprintf(t, "Exact value: %f\n", I);
fprintf(t, "Difference: %f\n", I - f);
fclose(t);
}
void output(float f, inti)
{
int c;
printf("Output I:\n1. File\n2. Console\n3. File&Console\n>> ");
scanf("%d", &c);
if (c == 1)
file_I(f, i);
else if (c == 2)
console_I(f, i);
else
{
console_I(f, i);
file_I(f, i);
}
}
float y(float x)
{
return expf(x);
}
intget_n()
{
int n, c;
printf("Input n:\n1. From file\n2. From console\n>> ");
scanf("%d", &c);
if (c == 1)
n = file_n();
else
n = console_n();
N = n;
return n;
}
intconsole_n()
{
system("cls");
int n;
printf("Enter n: ");
scanf("%d", &n);
return n;
}
intfile_n()
{
FILE *f;
int n;
f = fopen("C:/Documents and Settings/User/Рабочийстол/Прога/Курсач/input_n.txt", "r");
fscanf(f, "%d", &n);
fclose(f);
return n;
}
float Simpson()
{
float n;
n = get_n();
float h = (b - a) / n, sum = 0;
inti, p;
for (i = 1; i< n; i++)
{
if ((int)i % 2 == 0)
p = 2;
else
p = 4;
sum += p*y(a + h * i);
}
sum += y(a) + y(b);
sum *= (h/3);
return sum;
}
float Trap()
{
float n;
n = get_n();
float h = (b - a) / n, sum = 0;
inti;
for (i = 0; i< n; i++)
sum += y(a + i * h) + y(a + (i + 1) * h);
sum *= h / 2;
return sum;
}
float Newton()
{
float n;
n = get_n();
float h = (b - a) / n, sum1 = 0, sum2 = 0, sum;
inti;
for (i = 1; i< n; i++)
if ((int)i % 3 == 0)
sum1 += y(a + i * h);
else
sum2 += y(a + i * h);
sum = 3.0 / 8 * h * (y(a) + y(b) + 2 * sum1 + 3 * sum2);
returnsum;
}
Тестирование
Предварительно вычислив данный интеграл, мы имеем некое точное значение, с которым будем сравнивать результаты нашей программы.
Решим интеграл тремя разными способами, но при одном n, допустим n = 12.
Точное значение = 2.350402.
Решим методом Симпсона:
программирование matlab паскаль язык
Решим методом трапеций:
Решим методом Ньютона:
Судя по результатам, можно сделать вывод о том, что программа работает правильно.
3. Решение задания на языке высокого уровня Паскаль
Листинг программы
Модульmain:
programKursVar4;
uses menu;
begin
menu_1;
end.
Модульmenu:
unit menu;
Interface
procedure menu_1;
Implementation
uses crt, math, output;
procedure menu_1;
var c, n : integer;
f : real;
begin
clrscr;
writeln(' 1');
writeln(' I = S(e^x)dx');
writeln(' -1');
writeln('1. Solve by Simpson');
writeln('2. Solve by trapeze');
writeln('3. Solve by Newton');
write('>> ');
read(c);
case c of
1: begin
clrscr;
f := Simpson(n);
end;
2: begin
clrscr;
f := Trap(n);
end;
3: begin
clrscr;
f := Newton(n);
end;
4: begin
clrscr;
halt;
end;
else
begin
menu_1;
end;
end;
output_I(f, c, n);
writeln('Push any button to proceede to main menu...');
readln;
menu_1;
end;
end.
Модульmath:
unit math;
Interface
function Simpson(var n: integer): real;
function Trap(var n: integer): real;
function Newton(var n: integer): real;
function y(x: real): real;
Implementation
uses crt, input;
var a, b : integer;
function Simpson(var n: integer): real;
var h, sum : real;
i, p: integer;
begin
n := get_n;
a := -1; b := 1;
h := (b - a) / n;
sum := 0;
for i := 1 to n - 1 do
begin
if i mod 2 = 0 then
p := 2
else
p := 4;
sum := sum + p * y(a + h * i);
end;
sum := sum + y(a) + y(b);
sum := sum * (h / 3);
Simpson := sum;
end;
function Trap(var n: integer): real;
var h, sum : real;
i : integer;
begin
n := get_n;
a := -1; b := 1;
h := (b - a) / n;
sum := 0;
for i := 0 to n - 1 do
sum := sum + y(a + i * h) + y(a + (i + 1) * h);
sum := sum * (h / 2);
Trap := sum;
end;
function Newton(var n: integer): real;
var h, sum1, sum2, sum: real;
i : integer;
begin
n := get_n;
a := -1; b := 1;
h := (a - b) / n;
sum1 := 0; sum2 := 0;
for i := 0 to n - 1 do
if i mod 3 = 0 then
sum1 := sum1 + y(a + i * h)
else
sum2 := sum2 + y(a + i * h);
sum := 3 / 8 * h * (y(a) + y(b) + 2 * sum1 + 3 * sum2);
Newton := sum;
end;
function y(x : real): real;
begin
y := exp(x);
end;
end.
Модульinput:
unit input;
Interface
function get_n : integer;
function file_n : integer;
function console_n : integer;
Implementation
uses crt;
function get_n : integer;
var c : integer;
begin
clrscr;
writeln('Input N:');
writeln('1. From file');
writeln('2. From console');
write('>> ');
readln(c);
if c = 1 then
get_n := file_n
else
get_n := console_n;
end;
function file_n : integer;
var t : text;
n : integer;
begin
clrscr;
assign(t, 'input_n.txt');
reset(t);
read(t, n);
close(t);
clrscr;
file_n := n;
end;
function console_n : integer;
var n : integer;
begin
clrscr;
write('Input N: ');
readln(n);
delay(300);
clrscr;
console_n := n;
end;
end.
Модульoutput:
unit output;
Interface
procedure output_I(f : real; i, n : integer);
procedure file_I(f : real; i, n : integer);
procedure console_I(f : real; i, n : integer);
Implementation
uses crt;
procedure output_I(f : real; i, n : integer);
var c : integer;
begin
writeln('Output I:');
writeln('1. File');
writeln('2. Console');
writeln('3. File&Console');
write('>> ');
readln(c);
if c = 1 then
file_I(f, i, n)
else
if c = 2 then
console_I(f, i, n)
else
begin
file_I(f, i, n);
console_I(f, i, n);
end;
end;
procedure file_I(f : real; i, n : integer);
var t : text;
r : real;
begin
assign(t, 'output_f.txt');
rewrite(t);
if i = 1 then
writeln(t, 'Solved by Simpson method: n = ', n)
else
if i = 2 then
writeln(t, 'Solved by trapeze method: n = ', n)
else
writeln(t, 'Solved by Newton method n = ', n);
writeln(t, ' 1');
writeln(t, ' I = S(e^x)dx = ', f);
writeln(t, ' -1');
r := exp(1) - exp(-1);
writeln(t, 'Exact value: ', r);
r := f - r;
writeln(t, 'Difference: ', r);
close(t);
end;
procedure console_I(f : real; i, n : integer);
var r : real;
begin
clrscr;
if i = 1 then
writeln('Solved by Simpson method: n = ', n)
else
if i = 2 then
writeln('Solved by trapeze method: n = ', n)
else
writeln('Solved by Newton method n = ', n);
writeln(' 1');
writeln(' I = S(e^x)dx = ', f);
writeln(' -1');
r := exp(1) - exp(-1);
writeln('Exact value: ', r);
writeln('Difference: ', f - r);
end;
end.
Тестирование
Решим методом трапеций:
Решим методом Ньютона:
Решим методом Симпсона:
Судя по результатам, можно сделать вывод о том, что программа работает правильно.
4. Построение графического решения задачи в пакете Matlab
График MATLAB
MATLAB:
X= linspace(-2, 2);
Y = exp(X);
X1 = linspace(-1, 1);
Y1 = exp(X1);
%plot(X1, Y1);
plot(X, Y);
hold on;
area(X1, Y1, `FaceColor', `y');
grid on;
axis on;
title(` y = e^x');
xlabel(`X');
ylabel(`Y');
text(0, 0.5, `S');
Заключение
Краткие сведения о проделанной работе:
Была осуществлена задача вычислительной математики на двух языках: #Си и Pascal.
Данная задача может послужить ярким примером использования структурного программирования, так как включает в себя его основы:
использования следующих структур: следования, ветвлений и циклов; использование модульного программирования и использование нисходящего программирования.
Плюсы и минусы итоговой программы:
Плюсы:
1). Программа включает в себя такие структуры как: условные операторы, операторы множественного выбора, функции, процедуры, модули, файлы.
2). Занимает небольшой объем оперативной памяти.
3). Совмещена практически с любой операционной системой.
4). Может запускаться как с использованием среды, так и с помощью файла exe.
5). Цикл, который реализует повтор программы после вычисления, так как пользователь может захотеть сверить результаты расчетов с помощью разных методов вычисления интегралов.
Минусы:
1). Данная программа не имеет проверки ввода количества разбиений отрезка, как с клавиатуры, так и из файла.
2). Пользователь не имеет возможности выйти из программы до ее завершения.
В дальнейшем минусы могут быть исправлены, улучшив программу и сделав ее более функциональной и адаптированной.
Выводы о проделанной работе можно разделить на две группы - выводы о различии Си и Паскаля, и выводы об эффективности структурного программирования.
Различия Си и Паскаля. Эти языки крайне похожи, но имеют серьезные различия в синтаксисе. Так, например, в обоих языках есть подпрограммы ввода и вывода, но в Си это printf и scanf, а в Паскале write и read. Так со многими командами, но они имеют одинаковый смысл, что делает несложным перевод кода с одного языка на другой
Эффективность структурного программирования. Структурное программирование заметно упрощает процесс написания программы. Благодаря использованию подпрограмм упрощается исправление ошибок, допущенных в ходе написания программы. А нисходящее программирование снижает количество ошибок
Дальнейшее применение этой программы вполне возможно. Модули вычисления интегралов можно использовать в других, более сложных программах, что является серьезным преимуществом структурного программирования
Список литературы
1. Рапаков Г., Ржеуцкая С. TurboPascal для студентов и школьников/ БХВ-Петербург 2002
2. Березин, Б.И. Начальный курс С и С++ / Б.И. Березин, С.Б. Березин - М.: Диалог-МИФИ, 2005. - 248 с.
Размещено на Allbest.ru
Подобные документы
Классификация языков программирования. Использование циклических конструкций и выполнение итерационных процессов. Алгоритмические структуры циклов языков C, C++, Java, C#. Особенности современных языков программирования высокого уровня и их применение.
курсовая работа [345,6 K], добавлен 13.11.2009Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.
курсовая работа [400,6 K], добавлен 10.11.2016Изучение организации диалоговой программы и закрепления основных элементов программирования на языке Паскаль и Си (Delphi, C++ Builder). Описание представления информации в программах на языках высокого уровня. Сравнительная характеристика Delphi и C++.
курсовая работа [3,1 M], добавлен 27.02.2015Понятия структурного программирования и алгоритма решения задачи. Краткая история развития языков программирования от машинных до языков ассемблера и языков высокого уровня. Процедурное программирование на C#. Методы и программы для моделирования.
учебное пособие [1,7 M], добавлен 26.10.2010Сравнительный анализ наиболее распространенных языков, их классификация, описание достоинств и недостатков. Использование процедур, функции и подпрограмм в языках программирования высокого уровня. Разработка и реализация программы "Бортовой компьютер".
курсовая работа [329,8 K], добавлен 22.06.2014Особенности вывода на экран содержимого файла BAZA.txt. Анализ функций вывода информации о количестве каждой марки машин. Рассмотрение способов проектирования тестов программы методами черного ящика. Проблемы программирования на языке высокого уровня.
контрольная работа [1,6 M], добавлен 04.01.2015Изучение основных конструкций и способов написания программ на языке Паскаль. Обзор принципов работы и интерфейса написанной программы. Обработка и модификация двумерных массивов. Файловые структуры данных. Текстовые файлы. Элементы машинной графики.
курсовая работа [761,7 K], добавлен 11.03.2015Описание языков программирования высокого уровня. Стандартные структуры данных, обзор принципов структурного программирования. Построение математической модели и выбор структуры данных для решения задачи. Тестирование и отладка программного кода.
курсовая работа [1,3 M], добавлен 05.12.2020Основные этапы определения радиуса и центра окружности, проходящей через три различные точки заданного множества точек. Особенности построения алгоритма на языке программирования. Составление тестовых примеров для демонстрации возможностей программы.
контрольная работа [103,9 K], добавлен 21.08.2013Схема и основные параметры элементов цепи. Вывод системы дифференциальных уравнений. Реализация алгоритма на языке программирования высокого уровня Pascal. Решение дифференциальных уравнений в пакете MathCAD. Решение интерполяции в пакете Excel.
курсовая работа [375,4 K], добавлен 06.01.2011