Разработка в среде Turbo Pascal программы преобразования двумерного массива

Алгоритм создания программы в среде Turbo Pascal для вычисления значения минимального элемента побочной диагонали обратной матрицы, решения линейного уравнения двумерного и одномерного массивов и вычисление значения матрицы с последующим тестированием.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.01.2014
Размер файла 257,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Альметьевский государственный

нефтяной институт

Кафедра информатики

Курсовая работа

По дисциплине «информатика»

Раздел: Алгоритмический язык PASCAL

На тему: Разработка в среде Turbo Pascal программы преобразования двумерного массива

Выполнил: студент группы 12-15

Бахулов М.Б.

проверил: К.т.н., доцент

Хакимзянов И.Н.

Альметьевск 2011

Оглавление

  • Постановка задачи 3
  • Описание алгоритма решения задачи графическим способом 4
  • Укрупненная схема алгоритма 4
  • Детализация укрупненной схемы алгоритма 4
  • Заполнение и вывод элементов двумерного массива 5
  • Транспонирование матрицы. 6
  • Нахождение определений для дополнений. 9
  • Нахождение определителя матрицы 10
  • Описание блоков укрупненной схемы алгоритма на языке Pascal 27
  • Вычисление дополнений 31
  • Вывод преобразованного массива 32
  • Листинг программы 32
  • Тестирование программы 40
  • Список использованной литературы: 41

Постановка задачи

Дан двумерный массив

А=

и одномерные массивы

В=и Y=.

1. Решить линейное уравнение

2. Найти и вывести на экран значение минимального элемента побочной диагонали обратной матрицы

3. Вычислить значение матрицы

Описание алгоритма решения задачи графическим способом

Укрупненная схема алгоритма

Вывод элементов двумерного массива

Размещено на http://www.allbest.ru/

Детализация укрупненной схемы алгоритма

В программе решаются следующие задачи:

1. Заполнение и вывод двумерного массива.

2. Нахождение матриц путем перемножения исходных.

3. Транспонирование матриц.

4. Нахождение обратной матрицы.

5. Поиск минимального элемента побочной диагонали обратной матрицы.

6. Вывод результатов.

Заполнение и вывод элементов двумерного массива

По условию, элементы массива, должны быть заполнены исходными данными, затем выведены на экран. Для вывода массива на экран воспользуемся циклом с параметром.

Размещено на http://www.allbest.ru/

С помощью цикла каждый элемент массива заполняется числами. С 1 строки 1 столбца по N-ю строку N-го столбца с шагом 1. Для переменной j с начальным значением 1, выполняется внутренний цикл со всеми значениями (с 1 по N), тем самым заполняется первая строка массива, затем значение переменной k становится k+1, т.к шаг равен одному, и снова выполняется внутренний цикл с первого значения по N, здесь заполнилась вторая строка массива. Когда переменная k достигает конечного значения, цикл полностью завершается и происходит переход к выполнению следующей задачи.

Аналогичным образом происходит ввод/вывод одномерного массива.

Размещено на http://www.allbest.ru/

Транспонирование матрицы

Для решения данной задачи используем цикл с параметром, во внутреннем цикле которого новому массиву at[k,j] присваиваем значение массива a[j,k]. Ниже представлен алгоритм транспонирования матрицы.

Размещено на http://www.allbest.ru/

Перемножение матриц

Для выполнения поставленной задачи воспользуемся циклом с параметром, во внутреннем цикле которого элементу массива h[i,j]:=0. После чего используем еще один цикл с параметром, в котором элементы столбца первой матрицы перемножаем на элементы строк другой матрицы.

Размещено на http://www.allbest.ru/

Перестановка строк с максимальным главным элементом

Для преобразования массива используем метод Гаусса. Это метод последовательного исключения переменных, когда с помощью элементарных преобразований система уравнений приводится к равносильной системе треугольного вида, из которого последовательно, начиная с последней (по номеру) переменной, находятся все остальные переменные.

Размещено на http://www.allbest.ru/

Изменение знака при перестановке строк матрицы

Для решения поставленной задачи используется оператор условия, и при проверке условия переменной присваивается значение «1» и «-1» соответственно.

Размещено на http://www.allbest.ru/

Изменение знака при перестановке строк при нахождении дополнений

Размещено на http://www.allbest.ru/

Нахождение определений для дополнений

Для нахождения определителя алгебраических дополнений используется тот же принцип что и для нахождения определителя матрицы. Данный метод описан ниже.

Размещено на http://www.allbest.ru/

Нахождение определителя матрицы

Определителем квадратной матрицы порядка n на n является сумма, содержащая n! слагаемых. Каждое слагаемое представляет собой произведение n элементов матрицы, причем в каждом произведении содержится элемент из каждой строки и из каждого столбца матрицы А. Перед k-ым слагаемым появляется коэффициент (-1), если элементы матрицы А в произведении упорядочены по номеру строки, а количество инверсий  в котороой перестановке множества номеров столбцов нечетно.

Определитель матрицы А обычно обозначается как Размещено на http://www.allbest.ru/

, также встречается обозначение det(A). Также можно услышать, что определитель называют детерминантом.

Итак,

.

Отсюда видно, что определителем матрицы первого порядка является элемент этой матрицы.

Размещено на http://www.allbest.ru/

Вычисление дополнений

Алгебраическим дополнением Аij элемента аij матрицы n-го порядка называется его минор, взятый со знаком, зависящий от номера строки и номера столбца:

то есть алгебраическое дополнение совпадает с минором, когда сумма номеров строки и столбца - четное число, и отличается от минора знаком, когда сумма номеров строки и столба - нечетное число.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Блок-схема алгоритма

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

программа Pascal двумерный массив

Разработка программы на языке Pascal

Любая программа состоит из заголовка программы, блока подключаемых модулей, блока описания констант и переменных, и тела программы, в котором используются различные операторы.

В модуле CRT реализованы специальные процедуры и функции для работы с текстовой информацией на дисплее, позволяющие: управлять текстовыми режимами, организовывать окна вывода на экран, настраивать цвета символов на экране, управлять курсором. Несмотря на то, что модуль CRT реализует шестнадцать процедур и четыре функции, его размер составляет не более 3К. Для подключения модуля достаточно указать зарезервированное слово USES и список подключаемых модулей в самом начале программы: USES CRT.

Имеет смысл всегда подключать модуль CRT, даже если его процедуры или функции не используются в программе. При подключении модуля CRT из цепочки вывода информации исключаются медленная функция MS-DOS и, как правило, подпрограмма БСВВ, вследствие чего значительно повышается скорость вывода информации на дисплей.

Описание переменных

Все переменные, используемые в программе, должны быть перечислены в разделе описания переменных VAR. Этот раздел состоит из предложений описания переменных. Размещается он между заголовком программы, подпрограммы или модуля и зарезервированным словом BEGIN, открывающем раздел операторов программы, подпрограммы или модуля.

В программе описаны следующие переменные:

n,k,j,i,p:integer;

a,at,b,c,e,h,d:Tmatr;

a1,y,a2,x,z,a2t:matr; det,det1:real

f:byte

Раздел описания переменных начинается со слова Begin.

В разделе операторов опишем действия, которые должна выполнить программа согласно выбранного алгоритма. Этот раздел заключен между словами begin и end. В программе может использоваться составной оператор begin end;

Подпрограмма-процедура предназначена для выполнения какой-то законченной последовательности действий. Любая процедура начинается с заголовка. В отличие от основной программы заголовок в процедуре обязателен. Он состоит из зарезервированного слова procedure, за которым следует идентификатор имени процедуры, а далее в круглых скобках - список формальных параметров:

procedure <имя процедуры>(<список формальных параметров>);

За заголовком могут идти такие же разделы, что и в основной программе.

В отличие от основной программы процедура завершается не точкой, а точкой с запятой. Подпрограмма-функция предназначена для вычисления какого-либо параметра, у этой подпрограммы два основных отличия от процедуры.

- Первое отличие функции в ее заголовке. Он состоит из слова function, за которым следует имя функции, далее в круглых скобках - список формальных параметров, затем через двоеточие записывается тип функции - тип возвращаемого параметра. Функция может возвращать параметры следующих типов: любого порядкового, любого вещественного, стандартного типа string, любого указателя, в том числе и типа PChar.

- Второе отличие заключается в том, что в теле функции хотя бы раз имени функции должно быть присвоено значение. Если имя функции внутри ее описания используется в правой части оператора присваивания, то это означает, что функция вызывает себя рекурсивно. Для вызова функции из основной программы или другой подпрограммы следует в выражении, где необходимо использовать значение функции, указать имя функции со списком фактических параметров, которые должны совпадать по количеству и типам с формальными параметрами функции.

Описание блоков укрупненной схемы алгоритма на языке Pascal

Заполнение и вывод элементов двумерного массива

Для заполнения элементов массива воспользуемся процедурой Randomize. Randomize, инициализирует встроенный генератор случайных чисел, со случайным значением. Случайное значение выдает системный таймер. Оператор повтора, одно из ключевых слов которого является FOR часто называют оператором цикла с параметром, т.к число повторений задается переменной, которая на каждом шаге цикла автоматически изменяет свое значение ровно на единицу- поэтому ее называют счетчиком. Оператор повтора FOR применяется в случаях, когда число повторений заранее известно, он состоит из заголовка и тела цикла.

С помощью процедуры writeln описываем выводящееся на экран. Write- оператор, который используется для вывода информации на экран. Оператор WriteLn выполняет то же самое действие, но так как у него есть еще окончание Ln, то после вывода на экран нужного сообщения, он дополнительно переводит курсор на следующую строчку.

n:=5;

for k:=1 to n do

for j:=1 to n do

begin

write('a[',k,',',j,']=');

readln(a[k,j]);

end;

Здесь, write('a[',k,',',j,']=');readln(a[k,j]); заключены в составной оператор «begin , End », это сделано из-за того, что после оператора do можно использовать только один оператор.

Транспонирование матрицы

Используем цикл с параметром FOR. Во внутреннем цикле которого массиву at[k,j] присваивается значение массива a[j,k]. Таким образом, создается новый массив в котором столбцы являются строками и наоборот.

for k:= 1 to n do

for j:=1 to n do

at[k,j]:=a[j,k];

end;

Перемножение матриц

Для решения данной задачи воспользуемся циклом с параметром FOR, а также оператор условия IF и при выполнении условия если элемент массива a[i,j]<min, то переменной min:=a[i,j]. Таким образом, сравниваем все элементы массива. Аналогичным образом находим максимальный элемент массива.

min:=100;

for j:=1 to n do

for i:=1 to m do begin

if a[i,j]<min then begin

min:=a[i,j];

k:=i;end;

if a[i,j]>max then begin

max:=a[i,j];

h:=i;end;end;

Перестановка строк с максимальным главным элементом

Для преобразования массива используем циклом с параметром FOR, также используется оператор условия if then else, перестановка элементов осуществляется при помощи буферной переменной z, которой присваивается значение элементов массива.

begin

z:=abs(a[k,k]);

i:=k;

p:=0;

for j:=k+1 to n do

begin

if abs(a[j,k])>z then

begin

z:=abs(a[j,k]);

i:=j;

p:=p+1;

end;

end;

if i>k then

for j:=k to n do

begin

z:=a[i,j];

a[i,j]:=a[k,j];

a[k,j]:=z;

end;

Нахождение определителя матрицы

Запускаем цикл с параметром For для нахождения нулевых элементов главной диагонали после чего осуществляе перестановку элементов. Далее перемножаем все элементы главной диагонали. Затем при помощи оператора условия if then else, проверяем, что если определитель равен 0 то обратной матрицы не существует. После чего осуществляем операции с матрицей.

begin

det:=1.0;f:=0;

for k:=1 to n do

begin

if a[k,k]=0 then per(k,n,a,p);

det:=znak(p)*det*a[k,k];

if abs(det)<t then

begin

f:=1;

writeln('Обратной матрицы нет!');

readln;

exit;

end;

for j:=k+1 to n do

begin

r:=a[j,k]/a[k,k];

for i:=k to n do

a[j,i]:=a[j,i]-r*a[k,i];

end;

end;

end;

Вычисление дополнений

При помощи цикла с параметром FOR, а также при помощи буферной переменной z, осуществляем перестановку строк и столбцов После чего производится подсчет определителей алгебраических дополнений и определяется их значение.

begin

for i:=1 to n do

for m:=1 to n do

begin

for j:= 1 to n do {перестановка строк}

begin

z:=b[i,j];

for k:=i downto 2 do

d[k,j]:=b[k-1,j];

for k:=i+1 to n do

d[k,j]:=b[k,j];

d[1,j]:=z;

end;

for k:=1 to n do {перестановка столбцов}

begin

z:=d[k,m];

for j:=m downto 2 do

c[k,j]:=d[k,j-1];

for j:=m+1 to n do

c[k,j]:=d[k,j];

c[k,1]:=z;

end;

Вывод преобразованного массива

После создания нового массива выводим преобразованный массив стандартным способом, через цикл повтора FOR и процедуры WRITELN:

begin

for j:=1 to n do

write(a[k,j]:7:2);

writeln;

end;end;

Листинг программы

uses crt;

const t=0.000001;{ограничиваем числа, близкие к нолю, на них делить}

type Tmatr=array[1..5,1..5]of real;

matr=array[1..5] of real;

procedure Per(n,k:integer;a:Tmatr;var p:integer);{перестановка строк с макс. главным элементом}

var z:real;

j,i:integer;

begin

z:=abs(a[k,k]);

i:=k;

p:=0;

for j:=k+1 to n do

begin

if abs(a[j,k])>z then

begin

z:=abs(a[j,k]);

i:=j;

p:=p+1;

end;

end;

if i>k then

for j:=k to n do

begin

z:=a[i,j];

a[i,j]:=a[k,j];

a[k,j]:=z;

end;

end;

function znak(p:integer):integer;{изменение знака при перестановке строк матрицы}

begin

if p mod 2=0 then

znak:=1 else znak:=-1;

end;

function znak1(i,m:integer):integer;{изменение знака при перестановке строк при нахождении дополнений}

begin

if (i+m) mod 2=0 then

znak1:=1 else znak1:=-1;

end;

procedure min(a:tmatr;var n:integer); {нахлождение минимального элемента матрицы}

var i,j:integer;m:real;

begin

m:=a[1,4];

for i:=1 to n do

for j:=1 to n do

if i+j=n+1 then

if a[i,j]<m then

m:=a[i,j];

writeln(' минимальный элемент M ',m:4:2);

end;

procedure opr(n,p:integer;a:Tmatr;var det:real;var f:byte); {нахождение определителя матрицы}

var k,i,j:integer;

r:real;

begin

det:=1.0;f:=0;

for k:=1 to n do

begin

if a[k,k]=0 then per(k,n,a,p);

det:=znak(p)*det*a[k,k];

if abs(det)<t then

begin

f:=1;

writeln('Обратной матрицы нет!');

readln;

exit;

end;

for j:=k+1 to n do

begin

r:=a[j,k]/a[k,k];

for i:=k to n do

a[j,i]:=a[j,i]-r*a[k,i];

end;

procedure opr1(n,p:integer;d:Tmatr;var det1:real);{нахождение определений для дополнений}

var k,i,j:integer;

r:real;

begin

det1:=1.0;

for k:=2 to n do

begin

if d[k,k]=0 then per(n,k,d,p);

det1:=znak(p)*det1*d[k,k];

for j:=k+1 to n do

begin

r:=d[j,k]/d[k,k];

for i:=k to n do

d[j,i]:=d[j,i]-r*d[k,i];

end;

Procedure Peresch(n,p:integer;var b:Tmatr;det1:real;var e:Tmatr);{вычисление дополнений}

var i,m,k,j:integer;

z:real;

d,c:Tmatr;

begin

for i:=1 to n do

for m:=1 to n do

begin

for j:= 1 to n do {перестановка строк}

begin

z:=b[i,j];

for k:=i downto 2 do

d[k,j]:=b[k-1,j];

for k:=i+1 to n do

d[k,j]:=b[k,j];

d[1,j]:=z;

end;

for k:=1 to n do {перестановка столбцов}

begin

z:=d[k,m];

for j:=m downto 2 do

c[k,j]:=d[k,j-1];

for j:=m+1 to n do

c[k,j]:=d[k,j];

c[k,1]:=z;

end;

Opr1(n,p,c,det1);{вычисление определителей}

e[i,m]:=det1*znak1(i,m);{вычисление дополнений}

end;

end;

procedure Transp(a:Tmatr; n:integer;var at:Tmatr); {транспонирование матрицы}

var k,j:integer;

begin

for k:= 1 to n do

for j:=1 to n do

at[k,j]:=a[j,k];

end;

procedure Vyvod(var a:Tmatr; n:integer);{вывод матриц на экран}

var k,j:integer;

begin

for k:=1 to n do

begin

for j:=1 to n do

write(a[k,j]:7:2);

writeln;

end;

end;

procedure Urav(a:tmatr; var b,c,h:tmatr;i,j,k,n: byte);

begin

for i:=1 to n do begin

for j:=1 to n do begin

B[i,j]:=A[j,i];

end;end;

for i:=1 to n do

for j:=1 to n do begin

h[i,j]:=0;

for k:=1 to n do

h[i,j]:=h[i,j]+A[i,k]*a[k,j]

end;

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]+h[i,k]*B[k,j]

end;

end;

var n,k,j,i,p:integer;{n-размер матрицы,k-счетчик по строкам,j-счетчик по столбцам,p-счетчик перестановок}

a,at,b,c,e,h,d:Tmatr;{a-исходные, at-транспонированная, b-матрица дополнений, e-обратная, с-проверка}

a1,y,a2,x,z,a2t:matr; {a1,у-исходные}

det,det1:real;{det-определитель исходной матрицы,det1-определители-дополнения}

f:byte;{признак несуществования обратной матрицы}

begin

clrscr;

n:=5;

for k:=1 to n do

for j:=1 to n do

begin

write('a[',k,',',j,']=');

readln(a[k,j]);

end;

for j:=1 to n do

begin

write('B[',j,']=');

readln(a1[j]);

end;

for j:=1 to n do

begin

write('Y[',j,']=');

readln(a2[j]);

end;

clrscr;

writeln('Исходная матрица:');

Vyvod(a,n);

urav(a,b,c,h,i,j,k,n);

Opr(n,p,c,det,f); {считаем определитель}

if f=1 then exit;

Transp(c,n,b); {транспонируем матрицу}

Peresch(n,p,b,det1,e); {считаем дополнения}

writeln('Obratnaja matrica:');

for k:=1 to n do

for j:=1 to n do

e[k,j]:=e[k,j]/det; {создаем обратную матрицу}

Vyvod(e,n);

min(e,n); {считаем минимальный элемент}

for i:=1 to n do begin

x[i]:=0;

for k:=1 to n do

x[i]:=x[i]+e[i,k]*a1[k];

end;

for j:=1 to n do

write(x[j]:7:2);

for i:=1 to n do begin

for j:=1 to n do begin

B[i,j]:=A[j,i];

end;end;

writeln;

for i:=1 to n do

for j:=1 to n do

z[i]:=z[i]+b[i,j]*x[j];

for i:=1 to n do

for j:=1 to n do

z[i]:=a2[j]*x[i];

writeln(' Значение матрицы Z ');

for j:=1 to n do

write(z[j]:7:2);

end.

Тестирование программы

Список использованной литературы

1. Немнюгин С. А. TURBO PASCAL. Учебник. - СПб.: «Питер», 2000.

2. Иванов А. Ф, Потапова О. Н, Салихова Г.Л, Основы алгоритмического языка Pascal. Учебное пособие. - Альметьевск.: типография АГНИ, 2007.

3. Иванов А. Ф, Потапова О. Н, Салихова Г.Л, Информатика Раздел: Word для начинающих. Учебно-методическое пособие-Альметьевск. : типография АГНИ, 2003.

4. Зеленяк О.П, Практикум программирования на Turbo Pascal. Задачи, алгоритмы и решения- СПб.: «ДиаСофтЮП, ДМК Пресс», 2007.

5. Марченко А. И, Марченко Л. А, Программирование в среде Turbo Pascal 7.0. Базовый курс.: М.: «Век+», 2003.

Размещено на Allbest.ru


Подобные документы

  • GetMatrDop как процедура определяет значение элемента транспонированной матрицы дополнений. Знакомство с этапами разработки в среде Turbo Pascal программы сортировки элементов, находящихся на главной диагонали матрицы. Особенности тестирования программы.

    курсовая работа [780,4 K], добавлен 20.11.2014

  • Решения задачи графическим и программным способами. Описание алгоритма решения графическим способом, укрупненная схема алгоритма. Ввод элементов двумерного массива, вывод преобразованного массива, разработка программы на языке pascal, листинг программы.

    курсовая работа [115,5 K], добавлен 22.05.2010

  • Описание алгоритма решения задачи по вычислению суммы элементов строк матрицы с использованием графического способа. Детализация укрупненной схемы алгоритма и разработка программы для решения задачи в среде Turbo Pascal. Листинг и тестирование программы.

    курсовая работа [446,0 K], добавлен 19.06.2014

  • Особенности поиска среднеарифметического значения элементов массива. Общая характеристика проблем разработки в среде Turbo Pascal программы упорядочивания массива по возрастанию. Рассмотрение основных этапов разработки программы на языке PASCAL.

    курсовая работа [896,7 K], добавлен 18.05.2014

  • Основы работы на языке высокого уровня Turbo Pascal. Основное оборудование и программное обеспечение. Операторы, необходимы для работы в графической среде Turbo Pascal. Запуск графического режима. Текст программы в графической среде Turbo Pascal.

    лабораторная работа [12,7 K], добавлен 14.05.2011

  • Разработка программ на языке Turbo Pascal на основе использования массивов данных. Особенности хранения данных, способы объявления переменных, действия над элементами массивов, их ввод и вывод. Практическое применение одномерных и многомерных массивов.

    методичка [17,8 K], добавлен 25.11.2010

  • Разработка алгоритма поставленной задачи по обработке числовой информации в среде Turbo Pascal 7.0 с базовым языком программирования Pascal, отладка программы, реализующей разработанный алгоритм. Описание структуры программы, ее вспомогательных процедур.

    курсовая работа [668,0 K], добавлен 25.02.2010

  • Программирование нестандартных функций. Матрицы и операции над ними. Решение нелинейных уравнений и численное интегрирование. Оптимизация функции и численное дифференцирование. Аппроксимация функции: методы решения, описание программы, результаты.

    курсовая работа [70,5 K], добавлен 12.08.2011

  • Разработана программа решения двух задач на языке программирования Turbo Pascal. Спецификация задания. Описание входных и выходных данных. Математическая постановка задачи. Алгоритм ее решения. Описание и блок-схема программы. Результаты тестирования.

    курсовая работа [275,8 K], добавлен 28.06.2008

  • Программирование и структура программы на языке Turbo Pascal и MS Visual C++6.0. Вычисление площади круга. Реализация программы в системе Turbo Pascal и MS VISUAL C++6.0 для Windows. Структура окна ТРW. Сохранение текста программы в файле на диске.

    лабораторная работа [3,7 M], добавлен 22.03.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.