Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Лекция 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.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...