n=6: DIM a(n, n)
'ввод данных
FOR i=1 TO n: FOR j=1 TO n: a(i, j)=10*i+j: NEXT j: NEXT i
FOR i = 1 TO n 'прямое транспонирования
FOR j = 1 TO i: SWAP a(i, j), a(j, i): NEXT
NEXT
'вывод матрицы
FOR i=1 TO n: FOR j=1 TO n: PRINT a(i, j);:NEXT:PRINT: NEXT
FOR i=1 TO n 'обратное транспонирование
FOR j=1 TO n-i: SWAP a(i, j),a(n+1-j, n+1-i): NEXT
NEXT
FOR i=1 TO n: FOR j=1 TO n: PRINT a(i, j);:NEXT:PRINT: NEXT 'вывод
I\J | |||||||||||||||||
Исходная матриц | Транспонирование относительно главной диагонали | Транспонирование относительно неглавной диагонали |
Рис. 2.5.2
Задача 14. Транспонирование матрицы относительно неглавной диагонали (). Здесь зависимость между индексами не столь прозрачна. Для того, что бы найти ее, следует начертить новый вид (рис.2.5.2 справа) матрицы, а также, возможно, таблицы исходных (Iи,Jи) и новых (Iн,Jн) индексов (рис. 2.5.3). Если выписать исходные и новые индексы (рис. 2.5.4), можно обратить внимание, что сумма Jи и Iн постоянна и равна N+1. Аналогично Iи+Jн=N+1. Отсюда можно выписать необходимые зависимости исходных и новых индексов A(I,J) « A(N+1–J,N+1–I).
IиJи | IнJн | IиJи | IнJн | IиJи | IнJн | IиJи | IнJн | Jи | Iн | Iи | Jн | |||||
Рис. 2.5.3 Рис. 2.5.4
В программу, изображенную выше, включен фрагмент, относящийся к обратному транспонированию. Как видим, программирование обработки массивов может быть достаточно сложным, требующем вспомогательных выкладок и сообразительности. В любом случае сначала следует отобразить наполнение матрицы до и после преобразований и только затем искать функции, связывающие индексы их элементов.
@ Задачи для самостоятельного решения.
1. Переместить элементы массива Х в массив Y таким образом, чтобы в нем сначала оказалась первая половина исходного массива X, а затем вторая половина.
X | ||||||
Y |
2. Переписать все элементы массива Х для 3<X(i)<10 в начало массива Y, подсчитать их количество и среднее арифметическое. В примере количество чисел, удовлетворяющих условию – 3. Среднее арифметическое – 18/3=6
4 | 8 | 6 | Х | |||
Y |
3. Найти в массиве Х все стоящие смежно элементы с одинаковыми значениями и напечатать их номера. В примере номера равных смежных элементов: 2,3 и 5,6
5 | 5 | 4 | 4 |
4. В квадратной матрице Х(N,N) реальной размерности N найти максимальный элемент. Вывести его значение и индексы (X(Imax,Jmax) и Imax, Jmax). Поменять местами элементы строки Imax и столбца Jmax, на пересечении которых он находится.
Вариант 4 Вариант 5 Вариант 6
5. В матрице Х(N,M) вычислить число положительных элементов в каждой строке и занести их в вектор A(N) и сумму отрицательных элементов в каждом столбце и занести их в вектор B(M). Результаты вывести следующим образом. Справа рядом с исходной матрицей выдать вектор А. Под матрицей вывести вектор В.
6. Поменять местами любые два столбца матрицы Х с номерами К и L.
7. Имеется двухмерный массив А длиной N строк (A(N,2)), в котором содержится информация о товаре в магазине. В каждой строке два элемента. Первый является ценой товара, второй – числом единиц этого товара. Составить программу вычисления стоимости всего товара S в магазине и средней цены единицы товара SR. Сделать проверочные выкладки для N=3. В качестве цены товара (в тыс. рублей) следует последовательно использовать цифры натурального ряда. Число единиц каждого товара взять произвольным.