Лекция 11. Алгоритмы матричной алгебры
Лекция 11
Алгоритмы матричной алгебры
Цели:
ü освоить методику написания алгоритмов матричной алгебры с использованием двухмерных массивов, перевода таких алгоритмов на язык программирования С++ и разработки соответствующего проекта в среде Visual C++ 6. 0.
1. Алгоритмы матричной алгебры
Пример 1. Даны две матрицы a и b. Вычислить сумму c=a+b, где c – новая матрица.
Ход выполнения работы
1. Для решения данной задачи используется формула для формирования элементов массива. Каждой матрице в алгоритме соответствует двухмерный массив.
2. Написать программу, соответствующую алгоритму:
Алгоритм
| Программа
|
объявление вещ: а[6][4], b[6][4], c[6][4], цел: i, j
// ввод массива a построчно
для i=0 до 6-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 4-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем элемент вводится
ввод а[i][j]
все_для j
все_для i
// ввод массива b построчно
для i=0 до 6-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 4-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем элемент вводится
ввод b[i][j]
все_для j
все_для i
// вычисление суммы
для i=0 до 6-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 4-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем находим элемент массива c
// по формуле
c[i][j]=a[i][j]+b[i][j]
все_для j
все_для i
// вывод массива a построчно
для i=0 до 6-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 4-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем этот элемент выводится на
// экран
вывод а[i][j]
все_для j
все_для i
// вывод массива b построчно
для i=0 до 6-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 4-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем этот элемент выводится на
// экран
вывод b[i][j]
все_для j
все_для i
// вывод массива c построчно
для i=0 до 6-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 4-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем этот элемент выводится на
// экран
вывод c[i][j]
все_для j
все_для i
| #include " stdio. h"
#include " math. h"
#define n 6
#define m 4
int main()
{
float a[n][m], b[n][m], c[n][m];
int i, j;
// ввод массива a построчно
for(i=0; i< =n-1; i++)
{
for (j=0; j< =m-1; j++)
{
printf (" a[%i][%i]=", i, j);
scanf (" %f", & a[i][j]);
}
}
// ввод массива b построчно
for(i=0; i< =n-1; i++)
{
for (j=0; j< =m-1; j++)
{
printf (" b[%i][%i]=", i, j);
scanf (" %f", & b[i][j]);
}
}
// вычисление суммы
for(i=0; i< =n-1; i++)
{
for (j=0; j< =m-1; j++)
{
c[i][j]=a[i][j]+b[i][j];
}
}
// вывод массива a построчно
for (i=0; i< =n-1; i++)
{
for (j=0; j< =m-1; j++)
printf (" %. 2f ", a[i][j]);
printf (" \n" );
}
printf (" \n" );
// вывод массива b построчно
for (i=0; i< =n-1; i++)
{
for (j=0; j< =m-1; j++)
printf (" %. 2f ", b[i][j]);
printf (" \n" );
}
printf (" \n" );
// вывод массива c построчно
for (i=0; i< =n-1; i++)
{
for (j=0; j< =m-1; j++)
printf (" %. 2f ", c[i][j]);
printf (" \n" );
}
printf (" \n" );
return 1;
}
|
3. Создать проект и реализовать данную задачу в среде Visual C++ 6. 0.
Пример 2. Дана матрица a и столбец b. Вычислить произведение c=a*b, где c – новый столбец.
Ход выполнения работы
1. Для решения задачи используется формула для формирования элементов массива. Матрице a в алгоритме соответствует двухмерный массив, столбцам b и c – одномерные массивы. Количество элементов массива b должно совпадать с количеством столбцов массива a, а количество элементов массива c – с количеством строк массива a.
2. Написать программу, соответствующую алгоритму:
Алгоритм
| Программа
|
объявление вещ: а[6][4], b[4], c[6], цел: i, j
// ввод массива a построчно
для i=0 до 6-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 4-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем элемент вводится
ввод а[i][j]
все_для j
все_для i
// ввод массива b
для i=0 до 4-1 шаг 1
ввод b[i]
все_для i
// вычисление произведения
для i=0 до 6-1 шаг 1
// в цикле изменяется номер i строки
// массива
// находим i-ый элемент массива c
c[i]=0
для j=0 до 4-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем находим элемент массива c
// по формуле
c[i]=c[i]+a[i][j]*b[j]
все_для j
все_для i
// вывод массива a построчно
для i=0 до 6-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 4-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем этот элемент выводится на
// экран
вывод а[i][j]
все_для j
все_для i
// вывод массива b
для i=0 до 4-1 шаг 1
вывод b[i]
все_для i
// вывод массива c
для i=0 до 6-1 шаг 1
вывод c[i]
все_для i
| #include " stdio. h"
#include " math. h"
#define n 6
#define m 4
int main()
{
float a[n][m], b[m], c[n];
int i, j;
// ввод массива a построчно
for(i=0; i< =n-1; i++)
{
for (j=0; j< =m-1; j++)
{
printf (" a[%i][%i]=", i, j);
scanf (" %f", & a[i][j]);
}
}
// ввод массива b
for(i=0; i< =m-1; i++)
{
printf (" b[%i]=", i);
scanf (" %f", & b[i]);
}
// вычисление произведение
for(i=0; i< =n-1; i++)
{
c[i]=0;
for (j=0; j< =m-1; j++)
{
c[i]=c[i]+a[i][j]*b[j];
}
}
// вывод массива a построчно
for (i=0; i< =n-1; i++)
{
for (j=0; j< =m-1; j++)
printf (" %. 2f ", a[i][j]);
printf (" \n" );
}
printf (" \n" );
// вывод массива b
for (i=0; i< =m-1; i++)
{
printf (" %. 2f ", b[i]);
}
printf (" \n" );
// вывод массива c
for (i=0; i< =n-1; i++)
{
printf (" %. 2f ", c[i]);
}
printf (" \n" );
return 1;
}
|
3. Создать проект и реализовать данную задачу в среде Visual C++ 6. 0.
Пример 3. Даны матрицы a и b. Вычислить произведение c=a*b, где c – новая матрица.
Ход выполнения работы
1. Для решения данной задачи используется формула для формирования элементов массива. Матрицам a, b и c в алгоритме соответствуют двухмерные массивы. Количество строк массива b должно совпадать с количеством столбцов массива a, а массива c будет иметь размерность , где n – количество строк массива a, m – количество столбцов массива a. Значение p определяет количество столбцов и количество строк массивов a и b соответственно.
2. Написать программу, соответствующую алгоритму:
Алгоритм
| Программа
|
объявление вещ: а[3][4], b[4][5], c[3][5], цел: i, j, k
// ввод массива a построчно
для i=0 до 3-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 4-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем элемент вводится
ввод а[i][j]
все_для j
все_для i
// ввод массива b построчно
для i=0 до 4-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 5-1 шаг 1
// в цикле изменяется номер j
// столбца массива
// затем элемент вводится
ввод b[i][j]
все_для j
все_для i
// вычисление произведения
для i=0 до 3-1 шаг 1
// в цикле изменяется номер строки
// массива i
для j=0 до 5-1 шаг 1
// находим элемент массива c
c[i][j]=0
для k=0 до 4-1 шаг 1
// математическая формула
// нахождения
// элемента массива c
c[i][j]=c[i][j]+a[i][k]*b[k][j]
все_для k
все_для j
все_для i
// вывод массива a построчно
для i=0 до 3-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 4-1 шаг 1
//в цикле изменяется номер столбца
вывод а[i][j]
все_для j
все_для i
// вывод массива b построчно
для i=0 до 4-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 5-1 шаг 1
//в цикле изменяется номер столбца
вывод b[i][j]
все_для j
все_для i
// вывод массива c построчно
для i=0 до 3-1 шаг 1
// в цикле изменяется номер i строки
// массива
для j=0 до 5-1 шаг 1
//в цикле изменяется номер столбца
вывод c[i][j]
все_для j
все_для i
| #include " stdio. h"
#include " math. h"
#define n 3
#define m 5
#define p 4
int main()
{
float a[n][p], b[p][m], c[n][m];
int i, j, k;
// ввод массива a построчно
for(i=0; i< =n-1; i++)
{
for (j=0; j< =p-1; j++)
{
printf (" a[%i][%i]=", i, j);
scanf (" %f", & a[i][j]);
}
}
// ввод массива b построчно
for(i=0; i< =p-1; i++)
{
for (j=0; j< =m-1; j++)
{
printf (" b[%i][%i]=", i, j);
scanf (" %f", & b[i][j]);
}
}
// вычисление произведение
for(i=0; i< =n-1; i++)
{
for(j=0; j< =m-1; j++)
{
// находим элемент массива c
c[i][j]=0;
for (k=0; k< =p-1; k++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
}
// вывод массива a построчно
for (i=0; i< =n-1; i++)
{
for (j=0; j< =p-1; j++)
printf (" %. 2f ", a[i][j]);
printf (" \n" );
}
printf (" \n" );
// вывод массива b построчно
for (i=0; i< =p-1; i++)
{
for (j=0; j< =m-1; j++)
printf (" %. 2f ", b[i][j]);
printf (" \n" );
}
printf (" \n" );
// вывод массива c построчно
for (i=0; i< =n-1; i++)
{
for (j=0; j< =m-1; j++)
printf (" %. 2f ", c[i][j]);
printf (" \n" );
}
printf (" \n" );
return 1;
}
|
3). Создать проект и реализовать данную задачу в среде Visual C++ 6. 0.
Воспользуйтесь поиском по сайту: