Файл: Классификация языков программирования высокого уровня ( Обзор актуальных технологий программирования ).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 01.04.2023

Просмотров: 253

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Выводы по 1 главе

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

К основным языкам программирования высокого уровня относятся: Фортран, Кобол, Алгол, Pascal, Java, C, C++, C#, Objective C, Smalltalk, Delphi.

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

2.1. Методы численного интегрирования

Постановка задачи

Найти значение интеграла, пользуясь методом трапеций, методом Симпсона и методом Ньютона для различных n (n=6, 12, 30). Сравнить с точным значением интеграла и оценить погрешности методов при указанных n. Изобразить график подынтегральной функции и заштриховать область, площадь которой равна значению интеграла.

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

Эти методы применяются для приближенного вычисления определенного интеграла вида: . Функция 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.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 паскаль язык

Решим методом трапеций:

Решим методом Ньютона:

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

2.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.

Тестирование

Решим методом трапеций:

Решим методом Ньютона:

Решим методом Симпсона:

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

Таким образом, в данной главе нами была осуществлена задача вычислительной математики на двух языках: #Си и Pascal.

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


использования следующих структур: следования, ветвлений и циклов; использование модульного программирования и использование нисходящего программирования.

Плюсы и минусы итоговой программы:

Плюсы:

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

2. Занимает небольшой объем оперативной памяти.

3. Совмещена практически с любой операционной системой.

4. Может запускаться как с использованием среды, так и с помощью файла exe.

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

Минусы:

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

Пользователь не имеет возможности выйти из программы до ее завершения.

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

Выводы по 2 главе

В данной главе нами мы использовали язык программирования Си и Паскаль (высокого уровня), для решения задач по вычислительной математики. В результате чего, пришли к выводу, что эти языки крайне похожи, но имеют серьезные различия в синтаксисе.

Так, например, в обоих языках есть подпрограммы ввода и вывода, но в Си это printf и scanf, а в Паскале write и read. Так со многими командами, но они имеют одинаковый смысл, что делает несложным перевод кода с одного языка на другой. Структурное программирование заметно упрощает процесс написания программы. Благодаря использованию подпрограмм упрощается исправление ошибок, допущенных в ходе написания программы. А нисходящее программирование снижает количество ошибок. Дальнейшее применение этой программы вполне возможно. Модули вычисления интегралов можно использовать в других, более сложных программах, что является серьезным преимуществом структурного программирования.

ЗАКЛЮЧЕНИЕ

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