Программирование алгоритмов на примере численных методов

Автор работы: Пользователь скрыл имя, 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
Список используемых источников

Файлы: 1 файл

informatsionnye_tekhnologii.doc

— 615.00 Кб (Скачать файл)

  w:integer;                                 { объявление переменной: w тип целые}                

 begin                                         {начало тела программ

 clrscr;                                        {очистка экрана}

 repeat                                        {начало цикла «repeat - until»}

  writeln('1-polovin del, 2-kramer, 3 - integral'); {вывод сообщения в ‘  ‘  на экран}

  readln(w);                                                           {ввод значения переменной 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;                                               {объявление модуля 1}

interface                           

uses crt;                                                                    

procedure polovin;                                      {определение процедуры polovin }

implementation                                           {раздел реализации процедуры}

                                                     

 var                                 { объявление переменных типа действительные числа}

  a,b,e,x,c:real;                                                          

function f(x:real): real;                             { объявление функции f }

  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;                                           {значения  a или b }

    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;                                             {окончание процедуры polovin}

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;                           {определение функции op }

 var                                                        { объявление переменных функции op }

i,j,m: integer;

begin                                               {начало тела функции op}

  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]:4:2);

   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.

 


Информация о работе Программирование алгоритмов на примере численных методов