begin
clrscr;
writeln;
writeln(' Введите матрицу ',m,' размером ',n,'*',n);
for i:=1 to n do
for j:=1 to n do
write(' ',m,'[',i,',',j,']=');
readln(a[i,j]);
end;
{***************************************************************************}
{*** процедура вывода матриц ***}
procedure outputmat;
writeln(' Матрица ',m,'.');
write(' ');
write(' ',a[i,j]:3:1);
{*** процедура транспонирования матрицы ***}
procedure transpm;
c[j,i]:=a[i,j];
{*** процедура умножения матрицы на число ***}
procedure multconstm;
c[i,j]:=a[i,j]*r
{*** процедура суммирования матриц ***}
procedure sum_m;
c[i,j]:=a[i,j]+b[i,j];
{*** процедура умножения матриц ***}
procedure multm;
c[i,j]:=0;
for k:=1 to n do
c[i,j]:=c[i,j]+a[i,k]*b[k,j];
{*** процедура формирования вектора из средних ***}
{*** арифметических значений элементов столбцов ***}
procedure sred_arifm;
var
S:real;
S:=0;
S:=S+a[j,i];
z[i]:=S/n;
end. {*** Конец модуля KursUn ***}
Основная программа.
Program Kursach1;
Uses KursUn , Crt;
Var
a,b,c,u : matrix;
vect : vector;
ClrScr; textcolor(LightCyan);
writeln(' г===============================================================¬');
writeln(' ¦ Эта программа вычисляет матричное выражение ¦');
writeln(' ¦ ¦');
writeln(' ¦ T ¦');
writeln(' ¦ U=C*( A+2*B ) ¦');
writeln(' L===============================================================-');
write(' Введите размерности матриц: '); readln(n);
if n=0 then {*** проверка размерности матрицы ***}
ClrScr; textcolor(red);
writeln(' Такая размерность не допустима!!!');
readkey;
exit;
ClrScr;
inputm(n,a,'A'); {*** ввод матрицы A ***}
inputm(n,b,'B'); {*** ввод матрицы B ***}
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). ***}
writeln(' ****************** Исходные значения ********************');
outputmat(n, a, 'A'); {*** вывод матрицы A ***}
outputmat(n, b, 'B'); {*** вывод матрицы B ***}
outputmat(n, c, 'C'); {*** вывод матрицы C ***}
writeln(' ***** Для продолжения нажмите любую клавишу *****');
outputmat(n, u, 'U'); {*** вывод результата: матрицы U ***}
writeln(' *******************************************************');
writeln(' * Вектор из средних арифметических значений элементов *');
writeln(' * столбцов результирующей матрицы. *');
sred_arifm(n, u, vect);
writeln; write(' ');
write(' ',vect[i]:5:2);
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. Разработка схемы алгоритма и её описание
По результатам анализа задания можно составить укрупненную схему алгоритма последовательной структуры:
Полный алгоритм:
Нет
Да
Инструкция по использованию разработанной программы
Определим исходные данные.
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
e
Погрешность
eps
y1, y2
Значения определённого интеграла при числах разбиений n и 2*n
h
Шаг интегрирования (определяется по формуле h=(b-a)/n)
x
Текущее значение аргумента
n
Количество разбиений отрезка [a;b]
Longint
Описание переменных и массивов:
4. Проверка правильности функционирования программы.
Введём определённые ранее исходные данные.
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
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;
a,b,c,d,e,y1,y2,h,x:real;
n:longint;
clrscr; textcolor(11);
writeln(' ¦ Эта программа вычисляет определённый интеграл от функции ¦');
writeln(' ¦ x ¦');
writeln(' ¦ f(x)= ------------- ¦');
writeln(' ¦ (x^4+d*x^2+c) ¦');
writeln(' ¦ на отрезке [a,b] с погрешностью e. ¦');
write(' Введите левую границу интервала: '); readln(a);
write(' Введите правую границу интервала: '); readln(b);
write(' Введите погрешность вычислений: '); readln(e);
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;
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
ClrScr; textcolor(red); writeln;
writeln(' **** Сработала защита от зацикливания ****');
readkey; exit;
until abs(y1-y2)<e;
writeln('*******************************************************************');
writeln('При с=',c:3:2,'и d=',d:3:2,'значение определённого интеграла',y2:5:3);
writeln(' с точностью до ',e:6:5 );
writeln(' Количество разбиений отрезка [',a:3:2,';',b:3:2,']: ',n div 2 );
Список литературы
1. Методические указания по выполнению курсовой работы «Алгоритмические языки и программирование»
№1525, Рязань: РРТИ, 1988.
2. Методические указания «Модульное программирование на Турбо Паскале» №3037,В.С.Новичков, Н. И. Парфилова, А. Н. Пылькин, Рязань: РГРТА, 2000.
3. «Программирование на языке ПАСКАЛЬ», Г. Л. Семашко, А. И. Салтыков, Москва «Наука», 1988.
4. «Программирование на языке ПАСКАЛЬ», О. Н. Перминов, «Радио и связь», 1988.
Страницы: 1, 2