- •Лекция 1 Создание консольного приложения
- •2. Консоль. Построение консольного проекта
- •3. Запуск приложения
- •4. Сохранение и редактирование проекта
- •Лекция 2
- •4. Функции форматированного ввода и вывода
- •4.1. Функция форматированного ввода с клавиатуры
- •4.2. Функция форматированного вывода на экран
- •5. Математические функции
- •Лекция 3 Линейные вычислительные процессы
- •1. Алгоритм. Управляющие структуры
- •2. Линейные вычислительные алгоритмы
- •2.1. Условный оператор if()
- •2.2. Условное выражение
- •2.3. Оператор выбора switch()
- •Лекция 5 Программирование разветвляющихся вычислительных процессов
- •Лекция 6 Циклические вычислительные процессы.
- •1. Типы циклов
- •3. Операторы безусловного перехода
- •Лекция 7 Вычисление последовательностей
- •4. Примеры вычисления последовательностей
- •5. Структура алгоритмов вычисления рекуррентных последовательностей
- •Лекция 8 Одномерные массивы
- •1. Массивы
- •1.1. Примеры программ обработки одномерных массивов
- •1.2. Сортировка выбором
- •1.3. Сортировка простыми вставками
- •Лекция 10 Двухмерные массивы
- •1. Двухмерные массивы
- •Лекция 11 Алгоритмы матричной алгебры
- •1. Алгоритмы матричной алгебры
- •Лекция 12 Динамические массивы
- •1. Память компьютера. Адресное пространство
- •2. Динамическая память
- •3. Адреса и указатели
- •4. Указатели и массивы. Динамические массивы
- •5. Проблемы, связанные с указателями
- •6. Поразрядные операции
- •1.2. Способы объявления и обращения к элементам двухмерных массивов
- •Лекция 14 Символы и строки
- •1. Символьный тип данных
- •2. Строки
- •Лекция 15 Структуры
- •1. Понятие структуры
- •2. Определение нового имени типа
- •3. Массивы структур. Указатели на структуры
- •3.1. Определение статического массива структур
- •3.1. Определение динамического массива из n структур
- •Лекция 16 Файлы
- •1. Потоковый ввод-вывод данных
- •3. Понятие файла. Функции работы с файлами
- •Лекция 17 Файлы
- •Лекция 18 Функции пользователя
- •I. Приёмы построения алгоритмов
- •2. Понятие функции
- •2.1. Определение функции
- •2.2. Область видимости переменных
- •2.3. Параметры функции
- •2.4. Описание функции
- •2.5. Организация вызова функции
- •2.5. Передача параметров в функцию
- •3. Рекурсия
- •Лекция 20 Нахождение приближенного значения корня нелинейного уравнения
- •На отрезке [a;b] с заданной точностью eps
- •1.1. Метод дихотомии (половинного деления)
- •1.2. Метод хорд
- •1.3. Метод касательных (Ньютона)
- •Лекция 22 Объектно-ориентированное программирование
- •Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
- •Уточнённое имя принадлежит классу (т.Е. Компонентной) функции
- •Лекция 23 Объектно-ориентированное программирование
- •1. Конструкторы и деструкторы
- •1.2. Определение компонентных функций
- •Лекция 25 Объектно-ориентированное программирование
- •1. Свойства классов
- •1.1. Наследование классов
- •1.2. Полиморфизм
- •Библиографический список
Лекция 11 Алгоритмы матричной алгебры
Цели:
-
освоить методику написания алгоритмов матричной алгебры с использованием двухмерных массивов, перевода таких алгоритмов на язык программирования С++ и разработки соответствующего проекта в среде Visual C++ 6.0.
1. Алгоритмы матричной алгебры
Пример 1. Даны две матрицы a и b. Вычислить сумму c=a+b, где c – новая матрица.
Ход выполнения работы
-
Для решения данной задачи используется формула для формирования элементов массива. Каждой матрице в алгоритме соответствует двухмерный массив.
-
Написать программу, соответствующую алгоритму:
Алгоритм
Программа
объявление вещ: а[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;
}
-
Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
Пример 2. Дана матрица a и столбец b. Вычислить произведение c=a*b, где c – новый столбец.
Ход выполнения работы
-
Для решения задачи используется формула для формирования элементов массива. Матрице a в алгоритме соответствует двухмерный массив, столбцам b и c – одномерные массивы. Количество элементов массива b должно совпадать с количеством столбцов массива a, а количество элементов массива c – с количеством строк массива a.
-
Написать программу, соответствующую алгоритму:
Алгоритм
Программа
объявление вещ: а[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;
}
-
Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
Пример 3. Даны матрицы a и b. Вычислить произведение c=a*b, где c – новая матрица.
Ход выполнения работы
-
Для решения данной задачи используется формула для формирования элементов массива. Матрицам a, b и c в алгоритме соответствуют двухмерные массивы. Количество строк массива b должно совпадать с количеством столбцов массива a, а массива c будет иметь размерность , где n – количество строк массива a, m – количество столбцов массива a. Значение p определяет количество столбцов и количество строк массивов a и b соответственно.
-
Написать программу, соответствующую алгоритму:
Алгоритм |
Программа |
объявление вещ: а[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; } |
-
Создать проект и реализовать данную задачу в среде Visual C++ 6.0.