Реферат: 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
A21A22 … A2N
— — — — — — — - —
AM1AM2 … AMN
Если m=n, то матрицаназывается квадратной, n-порядок.
Произведением 2-хпрямоугольных матриц
А11 А12 …А1N
A=A21A22 … A2N
- — — — — — — - —
AM1AM2 … AMN
B11 B12… B1N
B=B21B22 … B2N
- — — — — — — — —
BM1 BM2 … BMN
называется матрица
C11 C12 … C1N
C=C21C22 … C2N
- — — — — — — - —
CM1CM2 … CMN
у которой элемент Сij, стоящий на пересечении i-ой строки и j-ого столбца, равен сумме произведений соответствующихэлементов i-ой строки первой матрицы А и j-того столбца 2-ой матрицы В.
Суммой 2-х прямоугольныхматриц А=(аi<sub/>j) и В=(вi<sub/>j) одинаковых размеров (m х n) называется матрица С=(сi<sub/>j) тех же размеров, элементы которой равны суммам cответствующих элементов даннойматрицы.
2.Разработкасхемы алгоритма и её описание
По результатам анализазадания можно составить укрупненную схему алгоритма последовательной структуры:
/>
/> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> />
Проведём детализацию блоков.1) Подпрограмма ввода матриц.
Имя подпрограммы: inputm.
/> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> />/> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> /> /> /> /> />
2) Подпрограмма вывода матриц.
Имя подпрограммы: outputmat.
/>
/> /> /> /> /> <td/> /> /> /> />/> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> /> /> /> /> />
3) Подпрограмматранспонирования матриц
/> Имя подпрограммы transpm.
/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />4) Подпрограмма умноженияматриц
Имя подпрограммы: multm.
/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> />5) Подпрограмма умноженияматрицы на число
Имя подпрограммы: multconstm.
/>
/> /> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> /> /> /> /> />/>6) Подпрограмма сложения матриц
Имя подпрограммы: sum_m.
/> /> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> /> /> /> /> />
7) Подпрограмма формированиявектора из средних арифметических значений элементов столбцов.
Имя подпрограммы: sred_arifm.
/> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> />S:=0
/> /> /> /> /> /> /> /> /> /> /> /> /> />S:=0
/> /> /> /> /> /> /> /> /> /> /> /> /> <td/> />Полный алгоритм решениязадачи.
/> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> /> /> /> /> />Да Нет
/>
/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> <td/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> <td/> /> /> /> /> /> /> /> />3. Инструкцияпо использованию разработанной программы
Определим исходныеданные.
Матрица А: Матрица В: МатрицаС:
/> /> />
Описание переменных имассивов:
Исходные сведения Описание в программе Обозначение НазначениеИдентификатор,
размерность
Атрибуты i, j, k Индексные переменные i, j, k Integer nРазмерность
матриц
n WordA, 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{*** Интерфейсная секция ***}
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;varz: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;varc:matrix);
implementation {*** ИСПОЛНЯЕМАЯЧАСТЬ***}
{***************************************************************************}
{*** процедуравводаматриц***}
procedure inputm;
begin
clrscr;
writeln;
writeln(' Введите матрицу ',m,'размером ',n,'*',n);
fori:=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;
{***************************************************************************}
{***процедура транспонирования матрицы ***}
proceduretranspm;
begin
for i:=1 to n do
for j:=1 to n do
c[j,i]:=a[i,j];
end;
{***************************************************************************}
{***процедура умножения матрицы на число ***}
proceduremultconstm;
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);
ifn=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. Разработкасхемы алгоритма и её описание
По результатам анализазадания можно составить укрупненную схему алгоритма последовательной структуры:
/> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> />Полный алгоритм:
/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> />n:=1000;y2:=0
/> /> /> /> <td/>h:= (b-a)/n; y1:=y2;
y2:=0; x:=a+h;
/> /> /> /> /> /> /> /> <td/> />
/>Нет Да
/>
/> /> /> /> /> /> /> /> /> />Нет
/>/>
Да
/>
/> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> />Нет
/>
Да
/>
/> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> />Инструкция поиспользованию разработанной программы
Определим исходныеданные.
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.