русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

П Р И М Е Р Ы О Б Р А Б О Т КИ М А Т Р И Ц


Дата добавления: 2014-11-27; просмотров: 563; Нарушение авторских прав


 

Пример 1. Вычислить первую норму прямоугольной матрицы

,

Обозначим сумму модулей элементов первой строки , второй строки - и т.д.

. . . ;

Тогда

Порядок вычислений:

1. Для каждой строки матрицы сформировать элемент одномерного массива B как сумму модулей ее элементов.

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

 

ProgramNorma1;

Const Mmax = 20; Nmax = 15;

Type Matrix = array[1..Mmax,1..Nmax] of real;

Vector = array[1..Mmax] of real;

Var i,j,m,n : byte;

A1 : real;

A : Matrix;

B : Vector;

Begin

Ввод и печать m, n, A

For i:=1 tom do{ Формирование }

Begin{ массива B }

b[i]:=0;

Forj:=1 ton do

b[i]:=b[i]+abs(a[i,j]);

End;

A1:=b[1]; { Определение }

Fori:=2 tom do{ максимального }

Ifb[i]>A1 then{ элемента }

A1:=b[i]; { в массиве B }

Writeln('A1= ',A1:7:2);

End.

 

Пример 2. Транспонировать квадратную матрицу.

При транспонировании меняются местами строки и столбцы матрицы, т.е. происходит обмен значений элементов и (i, j = 1 .. n).

 

Program Trans;

ConstNmax = 25;

TypeMatrix = array[1..Nmax,1..Nmax] of real;

Var i,j,n : byte;

R : real;

A : Matrix;

Begin

Ввод и печать n, A

For i:=1 to n do

Forj:=1 ton do

Begin

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

End;

Печать A

End.

 

В этой программе дважды производится обмен каждой пары элементов (например, при i = 1, j = 5 обмениваются элементы и , при i = 5, j = 1 - элементы и ). Следовательно, после отработки программы матрица A сохраняет исходный вид.

В программе Trans наряду с другими элементами обмениваются также элементы главной диагонали: при i = 1, j = 1 - элементы и , при i = 2, j = 2 - элементы и и т.д. Последнее не влияет на корректность работы программы, но приводит к ненужным затратам машинного времени.



 

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

 

Выпишем отдельно индексы элементов над главной диагональю:

 

 

1,2 1,3 1,4 1,5 ... 1,n

2,3 2,4 2,5 ... 2,n

3,4 3,5 ... 3,n

.................................

(n-1),n

 

Первый индекс элемента изменяется от 1 до n-1, второй индекс - от i+1 до n, т.е.

i = 1 .. (n-1); j = (i+1) .. n .

 

Программа транспонирования после ее коррекции (фрагмент):

 

Fori:=1 ton-1do

Forj:=i+1 ton do

Begin

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

End;

 

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

 

Пример 3. Закономерность изменения индексов, использованная в примере 2, может быть такой же и в некоторых задачах по обработке одномерных массивов.

 

Условие задачи. На плоскости заданы точек своими координатами. Определить номера точек, наиболее удаленных друг от друга, после чего удалить их из массива точек.

 

Для отбора пары максимально удаленных точек необходимо сравнивать расстояния для следующих пар точек:

 

 

1 - 2 1 - 3 1 - 4 1 - 5 ... 1 - n

2 - 3 2 - 4 2 - 5 ... 2 - n

3 - 4 3 - 5 ... 3 - n

............................

(n-1) - n

 

Если обозначить номера пары точек через ( - ), то

= 1 .. ( -1); = ( +1) .. .

 

Вполне очевидно, что работа программы не изменится, если вместо расстояний рассматривать квадраты расстояний, но количество операций при этом заметно сокращается (не нужно вычислять в каждом цикле корень квадратный sqrt(d)).

 

ProgramDistance;

Const Nmax = 400;

TypeAr = array[1..Nmax] of real;

Var i,j,n,imax,jmax : integer;

d,dmax : real;

X,Y : Ar;

Begin

Ввод и печать n,X,Y

dmax:=0;

For i:=1 to n-1 do

For j:=i+1 to n do

Begin

d:=sqr(x[i]-x[j])+sqr(y[i]-y[j]);

If d>dmax then

Begin

dmax:=d; imax:=i; jmax:=j

End;

End;

dmax:=sqrt(dmax);

Writeln('imax= ',imax,' jmax= ',jmax,' dmax= ',

dmax:7:2);

Fori:=jmax ton-1 do

Begin

x[i]:=x[i+1]; y[i]:=y[i+1]

End;

Dec(n);

For i:=imax to n-1 do

Begin

x[i]:=x[i+1]; y[i]:=y[i+1]

End;

Dec(n);

Печать n, X, Y

End.

Так как и, следовательно, jmax > imax, то в первую очередь удаляется точка с индексом jmax. Если первой удалить точку imax, то вторая точка смещается влево, при этом во втором цикле была бы удалена точка с индексом jmax+1, что привело бы к неверной работе программы.

 

Пример 4. Умножение прямоугольных матриц.

 

;

Program Mult;

Const Mmax = 20; Nmax = 15;

Lmax = 25;

Vari,j,k,l,m,n : byte;

A : array[1..Mmax,1..Lmax] of real;

B : array[1..Lmax,1..Nmax] of real;

C : array[1..Mmax,1..Nmax] of real;

Begin

Ввод и печать m, n, l, A, B

For i:=1 to m do

Forj:=1 ton do

Begin

c[i,j]:=0;

For k:=1 to l do

c[i,j]:=c[i,j]+a[i,k]*b[k,j];

End;

Печать матрицы C

End.



<== предыдущая лекция | следующая лекция ==>
Вывод матрицы на экран. | П Р О Ц Е Д У Р Ы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.08 сек.