Учебная работа. Курсовая работа: Turbo Pascal

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Курсовая работа: 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.

]]>