- •1. Основные типы данных. Целый, символьный, вещественный, voit
- •2. Структура программы. Примеры простейшей программы, использующей ввод/вывод на экран(сложить 2 числа)
- •2.3. Константы
- •3.1. Условный оператор
- •3.2. Оператор множественного выбора
- •1.4. Операторы
- •1.4.1. Оператор выражение
- •1.4.2. Пустой оператор
- •1.4.3. Составной оператор
- •1.4.4. Оператор if
- •1.4.5. Оператор switch
- •1.4.6. Оператор break
- •1.4.7. Оператор for
- •1.4.8. Оператор while
- •1.4.9. Оператор do while
- •1.4.10. Оператор continue
- •1.4.11. Оператор return
- •1.4.12. Оператор goto
- •6. Статические массивы(умножение матриц) двумерные статические массивы (матрицы).
- •Заполнение матриц.
- •Вывод элементов двумерных массивов.
- •Организация символьного одномерного массива в виде матрицы символов.
- •Квадратные матрицы. Работа с диагональными элементами.
- •Транспонирование матриц.
- •Умножение матрицы на вектор.
- •Умножение матрицы на матрицу.
- •Удаление строк матриц.
- •Включение столбца в матрицу.
- •Преобразование матрицы.
- •Преобразование матрицы в одномерный массив.
- •3.6. Описание и определение функций.
- •Лекция 6. Технология программирования OpenMp
Квадратные матрицы. Работа с диагональными элементами.
В квадратной матрице количество строк и столбцов - одинаково и равно 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
# include
# include
# include
# define n 5
int main ()
{
int a[n][n];
clrscr ();
randomize();
printf ("\n Сформирована квадратная матрица A[%i][%i] .",n,n);
for(int i=0;i
{
for (int j=0;j
{
a[i][j]=random(31)-15;
printf ("%6i",a[i][j]);
}
puts (" ");
}
long int p=1,s=0;
for(int i=0;i
for (int i=1;i
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.
Программа:
# include
# include
# include
# define n 5
# define m 7
main ()
{
int a[n][m],b[m][n];
clrscr ();
randomize();
printf ("\n Сформирована матрица A[%i][%i] .\n",n,m);
for (int i=0;i
{
for (int j=0;j
{
a[i][j]=random(31)-15;
printf ("%6i",a[i][j]);
}
puts (" ");
}
for (i=0;i
for (j=0;i
b[j][i]=a[i][j];
printf ("\n Получена транспонированная матрица B[%i][%i] .\n",m,n);
for (i=0;i
{
for (j=0;j
printf ("%6i",b[i][j]);
puts (" ");
}
getch();
}
Транспонированную матрицу можно получить в исходном массива А. Для квадратной матрицы n*n для этого необходимо поменять местами каждый элемент верхнего треугольника с соответствующим элементом нижнего (диагональные элементы переставлять не нужно). При этом для каждой строки нужно выполнять перестановку для элементов, расположенных правее главной диагонали, с элементами соответствующего столбца, расположенными ниже главной диагонали. При перестановке используем вспомогательную переменную tmp, помещая в нее для временного хранения один из переставляемых элементов, чтобы не потерять его значение.
Программа:
# include
# include
# include
# define n 6
int main ()
{
int a[n][n];
clrscr ();
randomize();
printf ("\n Сформирована квадратная матрица A[%i][%i] .\n",n,n);
for (int i=0;i
{
for (int j=0;j
{
a[i][j]=random(61)-30;
printf ("%6i",a[i][j]);
}
puts (" ");
}
for (int i=0;i<(n-1);i++)
for (int j=(i+1);i
{
int tmp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=tmp;
}
printf ("\n Транспонированная матрица .\n");
for (int i=0;i
{
for (int j=0;j
printf ("%6i",a[i][j]);
puts (" ");
}
getch();
}
Для прямоугольной матрицы алгоритм усложняется.