Turbo Pascal
Погрешность данного метода определяется абсолютным значением разности приближённых значений определённого интеграла при различных n. Если эта разность меньше требуемой погрешности, то необходимая точность достигнута, и дальнейшее увеличение n не требуется. При численном интегрировании вместо кривой подынтегральной функции используют заменяющие (аппроксимирующие) её кривые или ломаные линии, для… Читать ещё >
Turbo Pascal (реферат, курсовая, диплом, контрольная)
Рязанская государственная радиотехническая академия
Кафедра Вычислительной и Прикладной математики
Пояснительная записка
К курсовой работе
по дисциплине
«Алгоритмические языки и программирование»
Рязань 2006
Задание на курсовую работу.
1. Анализ задания и математическая постановка задачи.
2. Разработка схемы алгоритма и её описание.
3. Инструкция по использованию разработанной программы.
4. Проверка правильности функционирования программы.
5. Текст программы и её описание.
РЯЗАНСКАЯ РАДИОТЕХНИЧЕСКАЯ АКАДЕМИЯ ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ И ПРИКЛАДНОЙ МАТЕМАТИКИ Задание
на курсовую работу по дисциплине
«Алгоритмические языки и программирование»
Студенту Хамидулину А. Р. группы 041.
Задание 1. Составить программу вычисления матрицы P=f (A, B, C)
f (A, B, C) — матричное выражение. A, B, C — исходные матрицы, Размер и значение элементов, которых набираются произвольно.
f (A, B, C)=C (A+2B)T.
Сформировать вектор из средних арифметических значений элементов столбцов.
Задание 2. Составить программу вычисления определённого интеграла с погрешностью, не превышающей заданную величину е. Для проверки программы интегрирования вычислить определённый интеграл с заданной точностью.
Интеграл вычислить с помощью формулы прямоугольников.
Пределы интегрирования: a=1; b=2.
Значения коэффициентов:
c= 1,9; 2,05; 2,1; 2,2.
d= 3; 3,05; 3,1.
Погрешность е: 10-4.
Дата выдачи задания:
Дата выполнения задания:
Преподаватель:
Баринов В.В.
Современные средства вычислительной техники и ЭВМ позволяют существенным образом повысить эффективность деятельности инженеров при решении различных задач. При этом наиболее существенным вопросом является организация взаимодействия пользователя со средствами ЭВМ. В настоящей курсовой работе для этих целей использовался диалоговый режим, что позволило существенным образом упростить процесс отладки и работы с программой. В качестве языка программирования выбран изучаемый на занятиях по дисциплине «Алгоритмические языки и программирование» язык программирования «Паскаль». К достоинствам языка следует отнести такие его характеристики, как модульность, универсальность, удобство работы с массивами и т. д.
Задание 1
1. Анализ задания и математическая постановка задачи При решении поставленной задачи необходимо выполнить следующие действия:
1. Ввести значения элементов матриц A, B, C.
2. Напечатать значения элементов исходных матриц.
3. Провести транспонирование матрицы B, т. е. вычислить матрицу U=BT.
4. Умножить матрицу ВТ на 2, т. е. вычислить матрицу U=2*ВТ.
5. Сложить матрицы A и 2*ВТ, т. е. вычислить матрицу U=A+2*ВТ.
6. Умножить матрицы С и (A+2*BТ), т. е. вычислить матрицу
U=C*(A+2*BT).
7. Вывести матрицу U.
8. Сформировать вектор VECT из средних арифметических значений элементов столбцов.
9. Вывести вектор VECT .
Печать целесообразно реализовать с помощью подпрограммы (процедуры общего вида). Пункты 1−8 целесообразно также оформить в виде подпрограмм.
Матрицей будем называть таблицу чисел:
А11 А12 … А1N
A21 A22 … A2N
— - - - - - - - ;
AM1 AM2 … AMN
Если m=n, то матрица называется квадратной, n-порядок.
Произведением 2-х прямоугольных матриц
А11 А12 … А1N
A=A21 A22 … A2N
— - - - - - - - ;
AM1 AM2 … AMN
B11 B12 … B1N
B=B21 B22 … B2N
— - - - - - - - ;
BM1 BM2 … BMN
называется матрица
C11 C12 … C1N
C=C21 C22 … C2N
— - - - - - - - ;
CM1 CM2 … CMN
у которой элемент Сij, стоящий на пересечении i-ой строки и j-ого столбца, равен сумме произведений соответствующих элементов i-ой строки первой матрицы, А и j-того столбца 2-ой матрицы В.
Суммой 2-х прямоугольных матриц А=(аi j) и В=(вi j) одинаковых размеров (m х n) называется матрица С=(сi j) тех же размеров, элементы которой равны суммам cответствующих элементов данной матрицы.
2.Разработка схемы алгоритма и её описание По результатам анализа задания можно составить укрупненную схему алгоритма последовательной структуры:
Проведём детализацию блоков.
1) Подпрограмма ввода матриц.
Имя подпрограммы : inputm.
2) Подпрограмма вывода матриц.
Имя подпрограммы: outputmat.
3) Подпрограмма транспонирования матриц
Имя подпрограммы transpm.
4) Подпрограмма умножения матриц
Имя подпрограммы: multm.
5) Подпрограмма умножения матрицы на число
Имя подпрограммы: multconstm.
6) Подпрограмма сложения матриц
Имя подпрограммы: sum_m.
7) Подпрограмма формирования вектора из средних арифметических значений элементов столбцов.
Имя подпрограммы: sred_arifm.
Полный алгоритм решения задачи.
Да | |
Нет | |
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 (' L===============================================================-');
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. Разработка схемы алгоритма и её описание По результатам анализа задания можно составить укрупненную схему алгоритма последовательной структуры:
Полный алгоритм:
Нет | |
Да | |
Нет | |
Да | |
Нет | |
Да | |
Инструкция по использованию разработанной программы Определим исходные данные.
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,10
Количество разбиений отрезка [1,00;2,00]: 4000
c=2,05; d=3,05
При c=2,05 и d=3,05 значение определённого интеграла
0,110 с точностью до 0,10
Количество разбиений отрезка [1,00;2,00]: 4000
c=2,2; d=3,1
При c=2,20 и d=3,10 значение определённого интеграла
0,108 с точностью до 0,10
Количество разбиений отрезка [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 (' ¦ (x4+d*x2+c) ¦');
writeln (' ¦ ¦');
writeln (' ¦ на отрезке [a, b] с погрешностью e. ¦');
writeln (' L===============================================================-');
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>255 000 then
begin
ClrScr; textcolor (red); writeln;
writeln (' **** Сработала защита от зацикливания ****');
readkey; exit;
end;
until abs (y1-y2)
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.