Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум ЭВМ ответы.doc
Скачиваний:
3
Добавлен:
07.05.2019
Размер:
309.25 Кб
Скачать

Квадратные матрицы. Работа с диагональными элементами.

В квадратной матрице количество строк и столбцов - одинаково и равно n. Любая матрица имеет элементы главной и побочной диагонали. Диагональные элементы главной диагонали : a[0][0];a[1][1];a[2][2];….;a[n-1][n-1]. Элементами побочной диагонали являются : a[0][n-1];a[1][n-2];a[2][n-3];…;a[n-2][1];a[n-1][0].

В качестве примера рассмотрим задачу формирования квадратной матрицы порядка n случайными числами и нахождения произведения элементов главной диагонали и суммы элементов ниже побочной диагонали.

Отметим элементы главной диагонали для нахождения их произведения.

 

i\j

0

1

2

n-2

n-1

0

A[0][0]

A[0][1]

A[0][2]

 

 

A[0][n-1]

1

A[1][0]

A[1][1]

A[1][2]

 

 

 

2

A[2][0]

A[2][1]

A[2][2]

 

 

 

 

 

 

A[i][j]

 

 

n-2

 

 

 

 

. . .

 

n-1

A[n-1][0]

 

 

 

 

A[n-1][n-1]

 

И элементы ниже побочной диагонали для поиска их суммы.

i\j

0

1

2

n-2

n-1

0

A[0][0]

A[0][1]

A[0][2]

 

 

A[0][n-1]

1

A[1][0]

A[1][1]

A[1][2]

 

 

. . .

2

A[2][0]

A[2][1]

A[2][2]

 

. . .

. . .

 

 

 

A[i][j]

. . .

. . .

n-2

 

 

. . .

. . .

. . .

. . .

n-1

A[n-1][0]

. . .

. . .

. . .

. . .

A[n-1][n-1]

 

Программа :

for(int j=(n-i);j

  1. # include

  2. # include

  3. # include

  4. # define n 5

  5. int main ()

  6. {

  7. int a[n][n];

  8. clrscr ();

  9. randomize();

  10. printf ("\n Сформирована квадратная матрица A[%i][%i] .",n,n);

  11. for(int i=0;i

  12. {

  13.   for (int j=0;j

  14. {

  15. a[i][j]=random(31)-15;

  16. printf ("%6i",a[i][j]);

  17. }

  18. puts (" ");

  19. }

  20. long int p=1,s=0;

  21. for(int i=0;i

  22. for (int i=1;i

  23. s+=a[i][j];

printf ("\n Произведение элементов главной диагонали : %ld",p);

printf ("\n Сумма элементов ниже побочной диагонали : %ld",s);

getch();

}

Транспонирование матриц.

В данном алгоритме транспонирования матрицы необходимо заменить строки матрицы ее столбцами, а столбцы - строками, т.е. вычислить b[i][j]=a[j][i], где i=1,…,n; j=1,…,m.

Программа:

  1. # include

  2. # include

  3. # include

  4. # define n 5

  5. # define m 7

  6. main ()

  7. {

  8. int a[n][m],b[m][n];

  9. clrscr ();

  10. randomize();

  11. printf ("\n Сформирована матрица A[%i][%i] .\n",n,m);

  12. for (int i=0;i

  13. {

  14. for (int j=0;j

  15. {

  16. a[i][j]=random(31)-15;

  17. printf ("%6i",a[i][j]);

  18. }

  19. puts (" ");

  20. }

  21. for (i=0;i

  22. for (j=0;i

  23. b[j][i]=a[i][j];

  24. printf ("\n Получена транспонированная матрица B[%i][%i] .\n",m,n);

  25. for (i=0;i

  26. {

  27. for (j=0;j

  28. printf ("%6i",b[i][j]);

  29. puts (" ");

  30. }

  31. getch();

  32. }

Транспонированную матрицу можно получить в исходном массива А. Для квадратной матрицы n*n для этого необходимо поменять местами каждый элемент верхнего треугольника с соответствующим элементом нижнего (диагональные элементы переставлять не нужно). При этом для каждой строки нужно выполнять перестановку для элементов, расположенных правее главной диагонали, с элементами соответствующего столбца, расположенными ниже главной диагонали. При перестановке используем вспомогательную переменную tmp, помещая в нее для временного хранения один из переставляемых элементов, чтобы не потерять его значение.

Программа:

  1. # include

  2. # include

  3. # include

  4. # define n 6

  5. int  main ()

  6. {

  7. int a[n][n];

  8. clrscr ();

  9. randomize();

  10. printf ("\n Сформирована квадратная матрица A[%i][%i] .\n",n,n);

  11. for (int i=0;i

  12. {

  13.   for (int j=0;j

  14. {

  15. a[i][j]=random(61)-30;

  16. printf ("%6i",a[i][j]);

  17. }

  18. puts (" ");

  19. }

  20. for (int i=0;i<(n-1);i++)

  21. for (int j=(i+1);i

  22. {

  23. int tmp=a[i][j];

  24. a[i][j]=a[j][i];

  25. a[j][i]=tmp;

  26. }

  27. printf ("\n Транспонированная матрица .\n");

  28. for (int i=0;i

  29. {

  30. for (int j=0;j

  31. printf ("%6i",a[i][j]);

  32. puts (" ");

  33. }

  34. getch();

Для прямоугольной матрицы алгоритм усложняется.