Использование языков программирования высокого уровня для решения задач вычислительной математики

Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.