Автор работы: Пользователь скрыл имя, 12 Января 2015 в 17:13, курсовая работа
В настоящее время резко возрос интерес к языкам высокого уровня благодаря возможности использования в научных исследованиях, в технике и экономике вычислительных машин, выполняющих построение некоторых величин в точном соответствии с указанным алгоритмом. Эта возможность привлекательна по той причине, что явления процессы, которые изучают в рамках упомянутых исследований, часто удается описать с помощью понятий математики – функций, систем уравнений, неравенств и для получения конкретных сведений об изучаемых явлениях и процессах надо провести некоторые действия над математическими объектами
Введение
2
1 Постановка задачи
3
2 Математическое описание метода
4
2.1 Метод половинного деления
4
2.2 Метод Крамера
4
2.3 Метод прямоугольников
6
3 Блок-схема программы
7
3.1 Блок-схема модуля1 (процедура polovin )
8
3.2 Блок-схема модуля 2 (процедура kramer)
9
3.2.1 Блок-схема модуля 2 (функция det, op)
10
3.3 Блок-схема модуля 3 (процедура pr)
11
4 Описание стандартных функций
12
5 Описание не стандартных функций
14
5.1 Модуль 1 (процедура polovin)
14
5.2 Модуль 2 (процедура kramer)
14
5.2.1 Модуль 2 (функция op)
15
5.3 Модуль 3 (процедура pr)
16
6 Описание интерфейса
17
7 Численный пример
18
Заключение
27
Список используемых источников
w:integer;
begin
clrscr;
repeat
writeln('1-polovin del, 2-kramer, 3 - integral'); {вывод сообщения в ‘ ‘ на экран}
readln(w);
if w=1 then polovin;
if w=2 then kramer;
if w=3 then pr;
until (w=1) or (w=2) or (w=3);
readkey;
end.
unit modul1;
interface
uses crt;
procedure polovin;
implementation {раздел реализации процедуры}
var { объявление переменных типа действительные числа}
a,b,e,x,c:real;
function f(x:real): real;
begin
f:= x*x-2ln(x+2)
end;
procedure polovin;
begin
clrscr;
write('a= ');
readln(a);
write('b= ');
readln(b);
write('e= ');
readln(e);
c:=(a+b)/2;
while abs(b-a)>e do { начало цикла «while», проверка условия}
begin
if f(a)*f(c)<0 then b:=c { проверка условия «f(a)*f(c)<0» и присвоение}
else a:=c;
c:=(a+b)/2
end; { конец цикла «while»}
x:=(a+b)/2;
writeln('x= ',x:4:2); {Вывод значения x}
writeln('f(x)= ',f(x):4:4); {Вывод значения f(x)}
readln;
end;
end.
unit modul2; {объявление модуля}
interface
uses crt;
const n=3; {определение постоянной n=3 }
type matr=array[1..3,1..5] of real; {определение типа matr}
procedure kramer; {определение процедуры kramer }
implementation
procedure kramer; {раздел реализации процедуры}
var
a:matr;
i,j,m,k:integer;
s1,s2,d,opred,det: real;
b,x,v,popr:array[1..n] of real;
function op(a:matr):real;
var
i,j,m: integer;
begin
for i:=1 to 3 do
for j:=1 to 2 do begin
a[i,j+n]:=a[i,j];
writeln ('a[',i,',',j+n,']= ',a[i,j+n]:4:2); {добавление к матрице 2 и 3 столбца }
end;
s1:=0;
for m:=0 to 2 do begin
d:=1;
for i:=1 to n do
d:=d*a[i,i+m]; {нахождение
произведения элементов
s1:=s1+d; {сумма
произведений элементов
end;
s2:=0;
for m:=6 downto 4 do
begin
d:=1;
for i:=1 to n do
d:=d*a[i,m-i]; {нахождение произведения элементов побочных диагоналей}
s2:=s2+d; {сумма
произведений элементов
end;
op:=s1-s2; {расчёт определителя матрицы}
end;
{ конец тела функции}
begin
{начало тела процедуры}
for i:=1 to n do
begin
for j:=1 to n do
begin
write('vvedite a[',i:2,',',j:2,']= '); {ввод значений элементов матрицы А}
readln(a[i,j]);
end;
write('vvedite b[',i:2,']= '); {ввод значений элементов матрицы В}
readln(b[i]);
end;
det:=op(a); {вызов функции op для расчёта главного определителя матрицы}
writeln('det= ', det:4:2);
for i:=1 to n do begin
for j:=1 to n do begin
v[j]:=a[j,i]; {присвоение временной переменной значений столбца}
a[j,i]:=b[j]; {присвоение значению столбца значений матрицы- столбца В}
end;
popr[i]:=op(a); {вызов функции op для расчёта побочных определителей }
writeln('popr',i:1,'=',popr[i]
for j:=1 to n do
a[j,i]:=v[j]; {возврат значений i-го столбца}
end;
writeln;
for i:=1 to n do
begin
x[i]:=popr[i]/det;
writeln('x',i:1,'=',x[i]:4:2);
end;
end;
end.
unit modul3; {объявление модуля 3}
interface
uses crt;
procedure pr;
implementation {раздел реализации процедуры}
procedure pr; {определение процедуры pr }
var
a,b,n,i:integer;
s,p,h,x:real;
begin
clrscr;
writeln('vvedite a'); {ввод начального значения отрезка}
readln(a);
writeln('vvedite b');
{ввод конечного значения
readln(b);
writeln('vvedite n');
{ввод количества отрезков}
readln(n);
h:=(b-a)/n;
s:=0;
for i:=1 to n-1 do {суммируем значения функции на x1...xn}
begin x:=a+(i+0.5)*h;
{вычисляем значение х на
s:= s+(x*x-2ln(x+2)) {значение функции от данного х}
end;
s:=s*h;
writeln(s:4:4);
readkey;
end;
end.
Информация о работе Программирование алгоритмов на примере численных методов