НЕКОТОРЫЕ ЗАДАЧИ РАБОТЫ С МАТРИЦАМИ




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

Пример 6.1. В матрице A размером 10? 8, вычислить суммы элементов всех строк с четными номерами и произведения элементов всех столбцов с нечетными номерами.

Для уяснения смысла задачи составим схему индексирования элементов матрицы:


Из приведенной схемы легко усматривается, что индексы строк i изменяются в пределах от 1 до 10, индексы столбцов j – от 1 до 8. Очевидно также, что если искомые строковые суммы обозначить S то они образуют одномерный массив (вектор) Si, где i=2,4,6,8,10. Аналогично столбцовые произведения P образуют вектор Pj, где j=1,3,5,7. С учетом этих обозначений решение задачи может быть выполнено следующей программой (в которой пробный вариант исходной матрицы А формируется с помощью функции Random и выводится):

program Matr1;

Type mat= array [1..10,1..8] of real;

vec=[1..10] of real;

Var a:mat; s,p:vec; i,j:integer;

Begin

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

for i:=1 to 10 do

Begin

for j:=1 to 8 do

Begin

a[i,j]:=19.9*Random;

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

end;

writeln;

end;

writeln('Строчные суммы');

i:=2;

while (i<=10) do

Begin

s[i]:=0;

for j:=1 to 8 do s[i]:=s[i]+a[i,j];

write(s[i]:10:3); i:=i+2;

end;

writeln('Столбцовые произведения');

j:=1;

while (j<=7) do

Begin

p[j]:=1;

for i:=1 to 10 do p[j]:=p[j]*a[i,j];

writeln(p[j]:15:3); j:=j+2;

end;

end.

Пример 6.2. В некоторых задачах математики приходится вычислять сумму элементов квадратной матрицы, стоящих на ее главной диагонали. Главной называется диагональ, идущая из левого верхнего в правый нижний угол. Такая сумма носит название следа матрицы. Пусть заданная матрица А является квадратной с размером 8? 8. Тогда если обозначить искомую сумму Sled и обратить внимание на то, что у элементов главной диагонали оба индекса одинаковы, т.е. i=j, задача вычисления указанной суммы решится двумя строками:

writeln('След матрицы');

sled:=0;

for i:=1 to 8 do Sled:=Sled+a[i,i];

writeln('Sled=',Sled);

Пример 6.3. В матрице А произвольного размера m? n найти и вывести (строкой) строку с наибольшим произведением, а также (вывести столбцом) столбец с наименьшей суммой всех своих элементов. Обозначим строковые произведения pi (i=1..m), наибольшее из них Pmax, а его порядковый номер k. Аналогично: столбцовые суммы sj (j=1..n), наименьшая из них Smin, а ее индекс l. Задача, очевидно, сводится к вычислению элементов массивов p и s, нахождению в первом из них наибольшего элемента, а во втором наименьшего с одновременными определениями их индексов k и l, после чего k–я строка должна быть выведена в строку, а l–й столбец столбцом. Эта задача в предположении, что массивы A, P, S надлежащим образом описаны и первый из них введен, а два других сформированы (как это делается, см. пример 6.1), может быть реализована следующим фрагментом (при m=8, n=10):

k:=1; Pmax:=p[k];

for i:=1 to 8 do

Begin

if p[i]>=Pmax then

Begin

Pmax:=p[i]; k:=i;

end;

end;

writeln('Строка с Pmax');

for j:=1 to 10 do write(a[k,j]); writeln;

l:=1; Smin:=s[l];

writeln('Столбец с Smin');

for j:=1 to 10 do

Begin

if s[j]<=Smin then

Begin

Smin:=s[j]; l:=j;

end;

end;

for i:=1 to 8 do writeln(a[i,l]);

Пример 6.4. Дана матрица А(m? n). Составить вектор B из наибольших элементов каждой строки и вектор С из наименьших элементов каждого столбца. Алгоритм решения данной задачи состоит, очевидно, в том, чтобы в каждой i–й строке (i=1..m) найти ее наибольший элемент и присвоить его значение элементу bi вектора B. Аналогично, в каждом j–м столбце (j=1..n) требуется найти его наименьший элемент и присвоить его значение элементу cj вектора С. Соответствующий фрагмент программы (при m=8, n=10) с выводом полученных векторов:

for i:=1 to 8 do

Begin

max:=a[i,1];

for j:=1 to 10 do

Begin

if a[i,j]>max then max:=a[i,j];

end;

b[i]:=max;

end;

for j:=1 to 10 do

Begin

min:=a[1,j];

for i:=1 to 8 do

Begin

if a[i,j]<min then min:=a[i,j];

end;

c[j]:=min;

end;

writeln('Вектор В');

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

writeln('Вектор C');

for j:=1 to 10 do write(c[j]:6:2);

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

КОНТРОЛЬНЫЕ ВОПРОСЫИ УПРАЖНЕНИЯ

1. Дайте определение массива. Приведите примеры.

2. Что такое одномерный и двумерный массив? Чем определяется размерность массива?

3. Что такое индексы элементов массивов и каковы правила их записи? Приведите примеры.

4. Какова цель описания массивов в программе?

5. Два способа описания массивов.

6. Описание массивов в разделе Type. Приведите пример.

7. Описание массивов в разделе Var. Приведите пример.

8. Приведите пример ввода одномерного массива с использованием константы типа? массив?.

9. Приведите пример ввода матрицы с использованием константы типа? массив?.

10. Запишите в текущий каталог файл из 20 данных чисел ai. Имя файла выберите сами.

11. Запишите в корневой каталог диска С под именем f1.dat файл из 30 вещественных чисел zk; программное имя файла tpr1.

12. Создайте пробный массив из 85 целых чисел в диапазоне от0 до 25 с использованием функции sin или cos.

13. Создайте произвольный одномерный массив из 60 вещественных чисел в интервале (–25,25) с использованием функции Random.

14. Напишите фрагмент программы вывода массива tk (k=1? 30) по 5 чисел в строке.

15. Напишите фрагмент программы вывода матрицы В размером 8x6.

16. Напишите фрагмент программы создания массива значений функции
на отрезке –3< x< 3 с шагом D x=0.15.

17. Для массива xi (i=1, 26) найдите сумму, а для массива rk (k=1, 12) – произведение всех элементов.

18. Найдите сумму всех элементов матрицы М размером 8x 6.

19. Даны два массива ai и bi (i=1, 22). Вычислить их скалярное произведение.

20. В массиве sk (k=1, n) подсчитать количество чисел больших 5.

21. В массиве xj (j=1, 150) выбрать числа, попадающие в интервал (–1,1) и сформировать из них массив yi.

22. Для матрицы D(8,10) запишите общий вид элементов 4–й строки и 6–го столбца.

23. В массиве ak (k=1, 40) найдите наименьший элемент, а в массиве bi (i=1, 60) – наибольший.

24. Для массива ri (i=1, 15) найдите средне арифметическое и среднее геометрическое.

25. Для массива zk (k=1, 20) найдите среднее квадратическое и среднее гармоническое.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: