Учебная работа. Курсовая работа: 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
… B2
N
— — — — — — — — —
BM
1
BM
2
… 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.
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,содержащий описанные подпрограммы.
UnitKursUn; {*** Начало модуля KursUn ***}
interface {*** Интерфейсная секция ***}
usescrt;
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,’ размером ‘,nactiveXn);
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;
{***************************************************************************}
{*** процедура суммирования матриц ***}
proceduresum_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;
{***************************************************************************}
{*** процедура формирования вектора из средних ***}
{*** арифметических значений частей столбцов ***}
proceduresred_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
Текущее Описание переменных и массивов:
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 абс(y1-y2)<e;
ClrScr;
writeln;
writeln(‘*******************************************************************’);
writeln(‘При с=’,c:3:2,’и d=’,d:3:2,’
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.
]]>