ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
НЕКОТОРЫЕ ЗАДАЧИ РАБОТЫ С МАТРИЦАМИПри всех операциях с матрицами необходимо внимательно следить за индексами элементов, над которыми выполняются те или иные действия, а для этого всегда следует составлять схему индексирования элементов матриц, аналогичную приведенной в разделе 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) найдите среднее квадратическое и среднее гармоническое. Не нашли, что искали? Воспользуйтесь поиском:
|