Подпрограмма вывода матриц.




Имя подпрограммы: outputmat.

 

           
   
 
   
 
 

 

 


 

                 
   
 
   
 
   
 
 
 
   
 
   

 


3) Подпрограмма транспонирования матриц

Имя подпрограммы transpm.

                   
   
 
   
 
 
 
   
 
 
 
   
 
   
 
   

 


4) Подпрограмма умножения матриц

Имя подпрограммы: multm.

                       
   
 
   
 
 
 
   
 
   
 
   
 
 
 
   
 
   

 

 


5) Подпрограмма умножения матрицы на число

Имя подпрограммы: multconstm.

               
 
 
   
 
 
 
   
 
   

 

 


6) Подпрограмма сложения матриц

Имя подпрограммы: sum_m.


                 
   
 
 
 
   
 
 
 
   
 
   

 


7) Подпрограмма формирования вектора из средних арифметических значений элементов столбцов.

Имя подпрограммы: sred_arifm.

 

                   
   
 
   
 
   
S:=0
 
   
 
 
 
   
 
   
S:=0
 
   
 
 
 
   
 
   

 


Полный алгоритм решения задачи.

 

           
   
 
   
 
 
 
   

 

 


Да
Нет

                                       
     
 
 
 
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
     
 
     
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   

 


3. Инструкция по использованию разработанной программы

 

Определим исходные данные.

 

Матрица А: Матрица В: Матрица С:

 

 

Описание переменных и массивов:

Исходные сведения   Описание в программе
Обозначение Назначение Идентификатор, размерность Атрибуты
i, j, k Индексные переменные i, j, k Integer
n Размерность матриц n Word
A, B, C, U, Vect Матрицы исходных данных и результата a(10,10), b(10,10), c(10,10), u(10,10), vect(10)   Array of real
  a, b, c, z Матрицы, используемые в подпрограммах a(10,10), b(10,10), c(10,10), z(10)   Array of real
  R,S Переменная, используемая в подпрограмме   r   Real
  m Переменная, используемая в подпрограмме   m   Char
         

 

4. Проверка правильности функционирования программы.

 

Введём исходные данные.

Программа выводит для контроля входные данные:

 

Матрица А: Матрица В: Матрица С:

 

 

Вывод результирующей матрицы:

 


Вывод матрицы Vect:

 

 

5.Текст программы и её описание.

 

В процессе получения результирующей матрицы реализованы следующие действия с массивами:

-транспонирование квадратных матриц произвольной размерности;

-умножение квадратных матриц произвольной размерности;

-сложение квадратных матриц произвольной размерности;

-умножение на число квадратных матриц произвольной размерности;

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

 

Окончательный вариант программы:

 

Модуль KursUn,содержащий описанные подпрограммы.

 

Unit KursUn; {*** Начало модуля KursUn ***}

 

interface {*** Интерфейсная секция ***}

uses crt;

type

matrix= array [1..10,1..10] of real;

vector= array [1..10] of real;

var

i,j,k:integer;

n:word;

procedure outputmat (n:word; a:matrix; m:char);

procedure inputm (n:word; var a:matrix;m:char);

procedure sred_arifm (n:word; a:matrix;var z:vector);

procedure transpm (n:word; a:matrix; var c:matrix);

procedure sum_m (n:word; a,b:matrix; var c:matrix);

procedure multm (n:word; a,b:matrix; var c:matrix);

procedure multconstm (n:word; r:real; a:matrix;var c:matrix);

 

implementation {*** ИСПОЛНЯЕМАЯ ЧАСТЬ ***}

{***************************************************************************}

{*** процедура ввода матриц ***}

procedure inputm;

begin

clrscr;

writeln;

writeln(' Введите матрицу ',m,' размером ',n,'*',n);

for i:=1 to n do

for j:=1 to n do

begin

write(' ',m,'[',i,',',j,']=');

readln(a[i,j]);

end;

end;

{***************************************************************************}

{*** процедура вывода матриц ***}

procedure outputmat;

begin

writeln;

writeln(' Матрица ',m,'.');

writeln;

for i:=1 to n do

begin

write(' ');

for j:=1 to n do

write(' ',a[i,j]:3:1);

writeln;

end;

end;

{***************************************************************************}

{*** процедура транспонирования матрицы ***}

procedure transpm;

begin

for i:=1 to n do

for j:=1 to n do

c[j,i]:=a[i,j];

end;

{***************************************************************************}

{*** процедура умножения матрицы на число ***}

procedure multconstm;

begin

for i:=1 to n do

for j:=1 to n do

c[i,j]:=a[i,j]*r

end;

{***************************************************************************}

{*** процедура суммирования матриц ***}

procedure sum_m;

begin

for i:=1 to n do

for j:=1 to n do

c[i,j]:=a[i,j]+b[i,j];

end;

{***************************************************************************}

{*** процедура умножения матриц ***}

procedure multm;

begin

for i:=1 to n do

for j:=1 to n do

begin

c[i,j]:=0;

for k:=1 to n do

c[i,j]:=c[i,j]+a[i,k]*b[k,j];

end;

end;

{***************************************************************************}

{*** процедура формирования вектора из средних ***}

{*** арифметических значений элементов столбцов ***}

procedure sred_arifm;

var

S:real;

begin

S:=0;

for i:=1 to n do

begin

for j:=1 to n do

S:=S+a[j,i];

z[i]:=S/n;

S:=0;

end;

end;

{***************************************************************************}

end. {*** Конец модуля KursUn ***}

 

Основная программа.

Program Kursach1;

Uses KursUn, Crt;

Var

a,b,c,u: matrix;

vect: vector;

begin

ClrScr; textcolor(LightCyan);

writeln;

writeln(' ╔═══════════════════════════════════════════════════════════════╗');

writeln(' ║ Эта программа вычисляет матричное выражение ║');

writeln(' ║ ║');

writeln(' ║ T ║');

writeln(' ║ U=C*(A+2*B) ║');

writeln(' ║ ║');

writeln(' ╚═══════════════════════════════════════════════════════════════╝');

writeln;

write(' Введите размерности матриц: '); readln(n);

if n=0 then {*** проверка размерности матрицы ***}

begin

ClrScr; textcolor(red);

writeln;

writeln(' Такая размерность не допустима!!!');

readkey;

exit;

end;

ClrScr;

inputm(n,a,'A'); {*** ввод матрицы A ***}

ClrScr;

inputm(n,b,'B'); {*** ввод матрицы B ***}

ClrScr;

inputm(n,c,'C'); {*** ввод матрицы C ***}

transpm(n,b,u); {*** транспонирование матрицы B. ***}

multconstm(n,2,u,u); {*** умножения матрицы на 2. ***}

sum_m(n,a,u,u); {*** суммирование матриц A+2*BT. ***} multm(n,c,u,u); {*** умножение матриц С и (A+2*BT). ***}

ClrScr;

writeln;

writeln(' ****************** Исходные значения ********************');

outputmat(n, a, 'A'); {*** вывод матрицы A ***}

outputmat(n, b, 'B'); {*** вывод матрицы B ***}

outputmat(n, c, 'C'); {*** вывод матрицы C ***}

writeln;

writeln(' ***** Для продолжения нажмите любую клавишу *****');

readkey;

outputmat(n, u, 'U'); {*** вывод результата: матрицы U ***}

writeln;

writeln(' ***** Для продолжения нажмите любую клавишу *****');

readkey;

ClrScr;

writeln;

writeln(' *******************************************************');

writeln(' * Вектор из средних арифметических значений элементов *');

writeln(' * столбцов результирующей матрицы. *');

writeln(' *******************************************************');

sred_arifm(n, u, vect);

writeln; write(' ');

for i:=1 to n do

write(' ',vect[i]:5:2);

writeln;

readkey;

end.

 

Задание 2

1. Анализ задания и математическая постановка задачи

При решении поставленной задачи необходимо выполнить следующие действия:

1. Ввод исходных данных.

2. Нахождение значения определённого интеграла с использованием метода прямоугольников.

3. Вывод результатов.

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

Принцип метода прямоугольников состоит в том, что исходный отрезок разбивается на достаточно малые части:

 

a= x1< x2< x3<…< xn-1< xn=b; h= xk-xk-1;

 

площадь каждой такой части (прямоугольника): Sk=h*f(xk);

соответственно площадь всей фигуры, образованной из n-1 таких прямоугольников: S= S1+S2+…+ Sn-2+ Sn-1.Величина S является приближённым значением определённого интеграла, она приближается к истинному значению при увеличении числа n.

Погрешность данного метода определяется абсолютным значением разности приближённых значений определённого интеграла при различных n. Если эта разность меньше требуемой погрешности, то необходимая точность достигнута, и дальнейшее увеличение n не требуется.

 

2. Разработка схемы алгоритма и её описание

 

По результатам анализа задания можно составить укрупненную схему алгоритма последовательной структуры:

 

           
   
 
   
 
 
 
 
 
   
 
 
 
   
 
   

 

 


Полный алгоритм:

 

                 
   
 
   
 
   
 
   
 
   
n:=1000;y2:=0
 
 
 
   
h:= (b-a)/n; y1:=y2; y2:=0; x:=a+h;

 

 


 

       
 
 
   

 

 


Нет

 

 

Да

       
   
 
 

 

 


Нет

 
 

 


Да

           
 
 
   
 
   

 

 


Нет

 


Да

           
 
 
   
 
   

 

 


Инструкция по использованию разработанной программы

Определим исходные данные.

 

a=1; b=2; e=0.0001;

c= 1,9; 2,05; 2,1; 2,2.

d= 3; 3,05; 3,1.

Исходные сведения   Описание в программе
Обозначение Назначение Идентификатор Атрибуты
A, B Пределы интегрирования a, b Real
C,D Параметры c, d Real
e Погрешность eps Real
y1, y2 Значения определённого интеграла при числах разбиений n и 2*n y1, y2 Real
h Шаг интегрирования (определяется по формуле h=(b-a)/n) h Real
x Текущее значение аргумента x Real
n Количество разбиений отрезка [a;b] n Longint

 

Описание переменных и массивов:

 

4. Проверка правильности функционирования программы.

Введём определённые ранее исходные данные.

 

a=1; b=2; e=0.0001;

c=1,9; d=3;

 

При c=1,90 и d=3,00 значение определённого интеграла

0,113 с точностью до 0,00010

Количество разбиений отрезка [1,00;2,00]: 4000

 

c=2,05; d=3,05

 

При c=2,05 и d=3,05 значение определённого интеграла

0,110 с точностью до 0,00010

Количество разбиений отрезка [1,00;2,00]: 4000

c=2,2; d=3,1

 

При c=2,20 и d=3,10 значение определённого интеграла

0,108 с точностью до 0,00010

Количество разбиений отрезка [0,00;2,00]: 4000

Для проверки программы интегрирования вычислим определённый интеграл с заданной точностью.

 

a=0; b=3.14; eps=0.0001.

Определённый интеграл =2.

5.Текст программы

Program kursach2;

uses crt;

var

a,b,c,d,e,y1,y2,h,x:real;

n:longint;

begin

clrscr; textcolor(11);

writeln(' ╔═══════════════════════════════════════════════════════════════╗');

writeln(' ║ Эта программа вычисляет определённый интеграл от функции ║');

writeln(' ║ ║');

writeln(' ║ x ║');

writeln(' ║ f(x)= ------------- ║');

writeln(' ║ (x^4+d*x^2+c) ║');

writeln(' ║ ║');

writeln(' ║ на отрезке [a,b] с погрешностью e. ║');

writeln(' ╚═══════════════════════════════════════════════════════════════╝');

writeln;

write(' Введите левую границу интервала: '); readln(a);

write(' Введите правую границу интервала: '); readln(b);

write(' Введите погрешность вычислений: '); readln(e);

clrscr;

writeln(' *****************************************');

write(' Введите значения c: '); read(c);

write(' Введите значения d: '); read(d);

n:=2000; y2:=0;

repeat

h:=(b-a)/n; y1:=y2;

y2:=0; x:=a+h;

repeat

y2:=y2+h*x/(x*x*x*x+d*x*x+c);

{y2:=y2+h*sin(x);}

x:=x+h;

until x>b;

n:=2*n;

if n>255000 then

begin

ClrScr; textcolor(red); writeln;

writeln(' **** Сработала защита от зацикливания ****');

readkey; exit;

end;

until abs(y1-y2)<e;

ClrScr;

writeln;

writeln('*******************************************************************');

writeln('При с=',c:3:2,'и d=',d:3:2,'значение определённого интеграла',y2:5:3);

writeln(' с точностью до ',e:6:5);

writeln;

writeln(' Количество разбиений отрезка [',a:3:2,';',b:3:2,']: ',n div 2);

writeln('*******************************************************************');

readkey;

end.


Список литературы

 

1. Методические указания по выполнению курсовой работы «Алгоритмические языки и программирование»

№1525, Рязань: РРТИ, 1988.

2. Методические указания «Модульное программирование на Турбо Паскале» №3037,В.С.Новичков, Н. И. Парфилова, А. Н. Пылькин, Рязань: РГРТА, 2000.

3. «Программирование на языке ПАСКАЛЬ», Г. Л. Семашко, А. И. Салтыков, Москва «Наука», 1988.

4. «Программирование на языке ПАСКАЛЬ», О. Н. Перминов, «Радио и связь», 1988.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: