АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Работа с матрицами

Читайте также:
  1. T-FACTORY HRM - управление персоналом и работами
  2. V. САМОСТОЯТЕЛЬНАЯ РАБОТА
  3. Window - работа с окнами.
  4. Аналитическая работа при выборе и обосновании стратегии развития предприятии
  5. Б) работа врачей поликлиники (амбулатории), диспансера, консультации
  6. В 72-х дневном цикле подвиг длится 8 суток, из которых 2 суток – голод, а 6 – очистительные процедуры и работа над собой. В 12-ти летнем цикле подвиг длится 1 год.
  7. В работах В. Джеймса
  8. В) профилактическая работа
  9. Виртуальная работа силы. Идеальные связи
  10. Власть и норма в работах Фуко
  11. Влияние на организм термически обработанной пищи
  12. Влияние работающего на точность изготовляемых деталей.

Пример 1. Пусть задана матрица

Для заданной матрицы рассмотрим несколько задач.

Задача 1. Подсчитать в каждом столбце количество элементов, имеющих отрицательное значение.

Исходные данные: массив А(4,3) вещественного типа.

Искомые данные: вектор К(3) целого типа, элементы которого могут принимать значения от 0 до 4.

Используемые обозначения: Aij – элемент матрицы, где i – номер строки, j – номер столбца. Кj – количество отрицательных элементов в j-ом столбце матрицы.

При таких обозначениях следует взять i за параметр внутреннего цикла, j –

за параметр внешнего цикла. Элементы каждого столбца матрицы следует рассматривать как вектор, к которому можно применить типовой алгоритм: определение количества элементов массива, удовлетворяющих некоторому условию: если A[i,j] < 0, то Kj = Kj + 1, иначе Kj = Kj.

На первом этапе решение выглядит как структура следования (рис. 6):

 
 


 

 

 
 
Рис. 6. Структура следования

 


По методу нисходящего проектирования алгоритма выполняем детализацию выделенных этапов.

1.Детализация блока ввода матрицы (рис. 7).

{ алгоритм ввода элементов матрицы }

 

For i:=1 to 4 do

 

For J:=1 to 3 do

begin

Writeln(' Ввод элемента A[', i,',',j,']=');

Readln(A[i,j]);

Еnd;

 

Рис. 7. Блок-схема
2.Детализация блока вывода матрицы аналогична блоку ввода, потому сразу приведен текст программ-

мы.

 

for i:=1 to 4 do

begin

for j:=1 to 3 do

write(a[i,j]:8:2);

writeln; { переход на новую строку}

end;

 

3. Детализация блока 3 (рис. 8).

 

For J:=1 to 3 do

Begin { тело внешнего цикла }

K[j]:=0;

For i:=1 to 4 do

{ тело цикла по i}

If A[i,j]<0 then

K[j]:=k[j]+1;

 

End; {конец цикла по J}

 

.

 

 

 
 
Рис. 8. Блок-схема блока 3
 
 

 


4. Детализация блока 4. Вывод элементов вектора К.

 

Writeln('Вектор К')

For i:=1 to 3 do write(k[i]:3); writeln;

 

Полный текст программы:

 

Program Matric1;

Type

Matr=array[1..4,1..3] of real;

Vect=array[1..3] of integer;



Var

A:matr;

K:vect;

I,j:integer;

Begin

For i:=1 to 4 do

For J:=1 to 3 do begin

Writeln(' Ввод элемента A[', i, ',', j, ']=' );

Readln(A[i,j]); End;

for i:=1 to 4 do begin

for j:=1 to 3 do write(a[i,j]:8:2);

writeln; { переход на новую строку}

end;

For J:=1 to 3 do

Begin { тело внешнего цикла }

K[j]:=0;

For i:=1 to 4 do {тело цикла по i}

If A[i,j]<0 then K[j]:=k[j]+1;

End; {конец цикла по J}

Writeln('Вектор К')

For i:=1 to 3 do write(k[i]:3);

writeln;

End.

 

Задача 2. Поменять местами первую и последнюю строки матрицы А. Здесь понадобится рабочая переменная R.

 

for j: = 1 to 3 do

Begin

R: = a[1,j]; A[1,j]: = [4,j]; A[4,j]: = R;

End;

 

Пример 2. Вычислить скалярное произведение матрицы на вектор.

Демонстрируемые приемы: наглядный ввод матрицы, описание двумерного массива, представляющего матрицу как массив массивов.

 

Program SCAL_PROIZ;

Const ln=10; lm=10;

Type

rv = 1..ln; rm = 1..lm; { описание типов - отрезков}

tv = array[rv] of real;

tm = array[rm] of tv;

Var

matr : tm;

vect : tv;

m,n,i,j:integer;

s:real;

Begin

writeln(' ВЫЧИСЛЯЕТСЯ СКАЛЯРНОЕ ПРОИЗВЕДЕНИЕ МАТРИЦЫ НА ВЕКТОР');

writeln('порядок матрицы: m*n, длина вектора: n, ограничения: 0<m,

n<=10');

write('введите m='); readln(m);

write('введите n='); readln(n);

writeln('матрица вводится построчно, по одному элементу');

for i:=1 to m do begin

writeln('-вводите элементы строки ',i);

for j:=1 to n do begin

write('MT[',i,',',j,']='); readln(matr[i,j])

end;

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

for i:=1 to m do begin

for j:=1 to n do write(matr[i,j]:8:2);

writeln end;

writeln('вводите элементы вектора');

for j:=1 to n do readln(vect[j]);

writeln('исходный вектор:');

for j:=1 to n do write(vect[j]:8:2);

writeln;

For i:=1 to m do

Begin s:=0;

For j:=1 to n do s:=s+matr[i,j]*vect[j];

Rezv[i]:=s

‡агрузка...

End;

writeln('результирующий вектор:');

for i:=1 to m do write(rezv[i]:8:2); writeln;

readln

end.

 

Пример 3. Транспонирование квадратной матрицы A[n,n]. Приведем фрагмент записи алгоритма.

 

for i: = 1 to n do

for j:=i + 1 to n do

{ элементы главной диагонали не переставляются J>i}

Begin

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

End

 

Пример 4. Рекомендуется распечатывать все исходные и промежуточные результаты по формированию и обработке массивов.

При отладке и тестировании программ иногда приходится многократно вводить элементы массивов с клавиатуры. Можно создать текстовый файл с исходными данными, а в программе использовать оператор ввода данных из файла.

Пусть задан массив А(n) вещественных чисел, n не более 20. Значения этих элементов подготовлены в файле с названием ISX.DAT. Файл расположен в текущем каталоге. Порядок размещения данных:

- в первой строке – целое число N, текущая длина массива;

- во второй строке значения элементов A1, A2, ..., An, разделенные хотя бы одним пробелом.

Например, тест А(5)=(-3.7,0, -85, 2, 12.4) в файле isx.dat имеет вид:

1 строка: 5

2 строка: -3.7 0 -85 2 12.4

 

Файл с данными можно создать в среде Паскаля.

Программа ввода массива из файла:

 

Type

VECTOR = array[1..20] of single;

Var

A: VECTOR;

N, I: Byte;

F: text {текстовый файл для ввода данных из файла }

Begin

Assign (F,'ISX. DAT'); { Указали файл данных}

RESET(f); { открываем файл}

READLn (f,N); { читаем из файла N }

for i: = 1 to N Do

READ (f,A[I]); { читаем значение A[i] из файла}

Close(f); {закрытие файла }

….

End.

 


Варианты заданий к лабораторной работе


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |


Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.011 сек.)