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.

Блок-схема: знак завершения: Вход(n,a,m)


 

Блок-схема: знак завершения: Выход


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

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

Блок-схема: знак завершения: Вход(n,a,m)


 

Блок-схема: знак завершения: Выход


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

Блок-схема: знак завершения:            Конец Имя подпрограммы transpm.

Блок-схема: знак завершения: Вход(n,a)
Блок-схема: знак завершения: Выход (с)


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

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

Блок-схема: знак завершения: Вход (n,a,b)

Блок-схема: знак завершения: Выход (с)


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

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

 

Блок-схема: знак завершения: Выход (с)


Блок-схема: знак завершения: Вход (n,r,a)6) Подпрограмма сложения матриц

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


Блок-схема: знак завершения: Выход (с)


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

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

Блок-схема: знак завершения: Вход (n,a)

S:=0

 

S:=0

 
Блок-схема: знак завершения: Выход (z)


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

Блок-схема: знак завершения: Начало
Блок-схема: данные: Ввод n


Да

Нет

Блок-схема: решение: n=0

Блок-схема: данные: Вывод сообщения об ошибке
Блок-схема: типовой процесс: inputm ( n, a ,
Блок-схема: типовой процесс: inputm ( n, b ,
Блок-схема: типовой процесс: inputm ( n, c ,
Блок-схема: типовой процесс: transpm( n, b, u )
Блок-схема: типовой процесс: multconstm( n, 2, b, u )
Блок-схема: типовой процесс: multm( n, c, u, u )
Блок-схема: типовой процесс: outputmat( n, a,
Блок-схема: типовой процесс: outputmat( n, b,
Блок-схема: ссылка на другую страницу: C Блок-схема: ссылка на другую страницу: B
Блок-схема: ссылка на другую страницу: C Блок-схема: ссылка на другую страницу: B
Блок-схема: типовой процесс: output( n, u,

Блок-схема: знак завершения: Конец


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. Разработка схемы алгоритма и её описание

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

Блок-схема: знак завершения: Начало
Блок-схема: типовой процесс: Вычисление
определённого интеграла
Блок-схема: типовой процесс: Вывод результатов
Блок-схема: знак завершения: Конец


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

Блок-схема: знак завершения: Начало
Блок-схема: данные: Ввод c,d

n:=1000;y2:=0

 

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

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

 

 


 


Блок-схема: решение: x>bНет

Да


Нет

Блок-схема: решение: n>255000


Да

Блок-схема: данные: Вывод сообщения об срабатывании защиты от зацикливания и выход из программы.
Блок-схема: решение: abs(y1-y2)<e


Нет


Да

Блок-схема: типовой процесс: Вывод результатов
Блок-схема: знак завершения: Конец


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

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

 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)

 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.

Информация о файле
Название файла Turbo Pascal от пользователя z3rg
Дата добавления 11.1.2012, 20:51
Дата обновления 11.1.2012, 20:51
Тип файла Тип файла (zip - application/zip)
Скриншот Не доступно
Статистика
Размер файла 37.23 килобайт (Примерное время скачивания)
Просмотров 628
Скачиваний 92
Оценить файл