Лабораторный практикум
.pdfРис.7. Результат выполнения программы к примеру 5
Текст программы:
#include <iostream> #include <iomanip> #include <time.h>
using namespace std; void main()
{
setlocale(LC_CTYPE, "Russian"); srand((unsigned)time(NULL)); const int n = 4, m = 5;
int f[n][m], d, l, a[n*m];
cout << "Введите d="; cin >> d; cout << "Введите l="; cin >> l; for (int i = 0; i<n; i++)
for (int j = 0; j<m; j++)
f[i][j] = rand() / 100 - 100;
int k = 0;
for (int i = 0; i<n; i++)
{
for (int j = 0; j<m; j++)
if (f[i][j] >= d && f[i][j] <= l)
{
a[k] = f[i][j]; k++;
}
}
cout << "Матрица" << endl; for (int i = 0; i<n; i++)
{
for (int j = 0; j<m; j++)
cout << setw(6) << f[i][j];
93
cout << endl;
}
cout << "Массив" << endl;
for (int i = 0; i<k; i++) cout << setw(4) << a[i]; cout << endl;
}
В задачах типа 5 требуется обрабатывать элементы квадратной матрицы, находящиеся в области, ограниченной главной и побочной диагоналями. В этом случае параметр внешнего цикла i меняет свое значение от 0 до n (n - порядок квадратной матрицы). Значения параметра цикла j для различных областей приведены в таблице.
Значения параметра цикла j
|
Интервал |
Над глав- |
|
Под глав- |
Над побоч- |
Под побоч- |
|
|
ной диа- |
|
ной диа- |
ной диаго- |
ной диаго- |
|
|
гональю |
|
гональю |
налью |
налью |
|
От |
i |
|
0 |
0 |
n – i – 1 |
|
До (вклю- |
n – 1 |
|
i |
n – i – 1 |
n – 1 |
|
чительно) |
|
|
|
|
|
|
Пример 6. Вычислить сумму элементов главной и побочной диаго- |
|||||
налей у квадратной матрицы 4 |
4. |
|
|
Решение. Представим матрицу с обозначенными главной и побочной диагоналями схематично (рис.8).
У элементов главной диагонали индексы по строкам и столбцам равны. Используем это при написании программы.
Главная |
|
|
|
|
Побочная |
диагональ |
|
|
|
|
диагональ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис.8. Изображение квадратной матрицы
Текст программы:
#include <iostream> #include <iomanip> #include <time.h>
94
using namespace std; void main()
{
setlocale(LC_CTYPE, "Russian"); srand((unsigned)time(NULL));
const int n = 4;// размерность матрицы int f[n][n];
// Формирование матрицы for (int i = 0; i<n; i++)
for (int j = 0; j<n; j++)
f[i][j] = rand() / 100 - 100; int s_gl = 0, s_pob = 0;// начальные значения
//сумм
//Нахождение суммы элементов главной //диагонали матрицы
for (int i = 0; i<n; i++) s_gl += f[i][i];
//Нахождение суммы элементов побочной
//диагонали матрицы
for (int i = 0; i<n; i++) s_pob += f[i][n - i - 1];
//Вывод матрицы и значений сумм на экран cout << "Матрица" << endl;
for (int i = 0; i<n; i++)
{
for (int j = 0; j<n; j++)
cout << setw(6) << f[i][j]; cout << endl;
}
cout << "Сумма элементов главной диагонали=" << s_gl << endl;
cout << "Сумма элементов побочной диагонали=" << s_pob << endl;
cout << endl;
}
Результат выполнения программы примера 6 представлен на рис.9.
95
Рис.9. Результат выполнения программы к примеру 6
Пример 7. Найти сумму элементов в заштрихованной (темной) части квадратной матрицы 6 6(рис.10).
Рис. 10. Иллюстрация к примеру 7
Решение. Разобьем матрицу на две части. В верхней части матрицы найдем сумму элементов под главной диагональю, а в нижней части - сумму элементов над побочной диагональю. Для написания программы воспользуемся данными из таблицы. Результат представлен на рис.11.
96
Рис.10. Результат выполнения программы к примеру 7
Текст программы:
#include <iostream> #include <iomanip> #include <time.h> using namespace std; void main()
{
setlocale(LC_CTYPE, "Russian"); srand((unsigned)time(NULL)); const int n = 6;
int f[n][n];
for (int i = 0; i<n; i++)
for (int j = 0; j<n; j++)
f[i][j] = rand() / 100 - 100; cout << "Матрица:" << endl;
for (int i = 0; i<n; i++)
{
for(int j =0;j<n;j++)cout<<setw(6) << f[i][j]; cout << endl;
}
int sum = 0;
cout << "Элементы для суммирования:" << endl; for (int i = 0; i<n / 2; i++)
{
97
for (int j = 0; j<i + 1; j++)
{
sum += f[i][j];
cout << setw(6) << f[i][j];
}
cout << endl;
}
for (int i = n / 2; i<n; i++)
{
for (int j = 0; j<n - i; j++)
{
sum += f[i][j];
cout << setw(6) << f[i][j];
}
cout << endl;
}
cout << "Сумма=" << sum << endl;
}
Порядок выполнения работы
1.Разработать и выполнить программу в соответствии с вариантом задания.
2.Результаты выполнения программы занести в отчет по работе.
3.Показать результаты работы преподавателю.
Требования к отчету
Отчет должен содержать:
1)наименование лабораторной работы;
2)формулировку задания;
3)текст программы для варианта задания;
4)результат выполнения программы (скриншот).
98
Варианты заданий
Написать программу в соответствии с номером варианта. Номер варианта задания соответствует номеру компьютера в компьютерном классе, на котором выполняется лабораторная работа.
№ |
Задание |
п/п |
|
1Дана квадратная матрица m m. Заменить отрицательные элементы матрицы суммой положительных элементов главной диагонали
2Заменить нулевые элементы каждого столбца матрицы m n средним арифметическим значением элементов этого столбца
3Дана квадратная матрица n n. Сформировать массив из средних арифметических значений тех столбцов, у которых элемент главной диагонали отрицателен
4Дана матрица m n. Сформировать массив, состоящий из суммы наибольшего и наименьшего значений каждого столбца
5Дана матрица n m. Сформировать массив из положительных элементов матрицы (расположить в начале массива) и отрицательных элементов (расположить в конце массива). Нулевые элементы матрицы исключить
6Дана квадратная матрица n n. Найти максимальный и минимальный элементы в заштрихованной области
7Дана матрица m n. Найти наибольший элемент на главной диагонали, наименьший элемент на побочной диагонали и поменять их местами
99
Продолжение
№ |
Задание |
п/п |
|
8Для целочисленной матрицы m n сформировать одномерный массив, состоящий из количества элементов каждой строки, кратных 5. Определить наибольшее значение количества элементов, кратных 5
9Заменить отрицательные элементы каждого столбца матрицы m n средним арифметическим значением элементов этого
столбца
10Найти в каждом столбце матрицы m n наибольший и наименьший элементы и поменять их местами
11Дана матрица m n. Сформировать одномерный массив из количества нулевых элементов каждого столбца
12Дана матрица m n. Определить количество элементов матрицы, отличающихся от среднего арифметического значения элементов матрицы по модулю не более чем на Р
13Дана квадратная матрица n n. Найти сумму отрицательных элементов заштрихованной области
14Дана квадратная матрица n n. Сформировать массив из средних арифметических значений тех столбцов, у которых элемент главной диагонали положителен
15Дана квадратная матрица n n. Заменить положительные элементы матрицы суммой отрицательных элементов главной диагонали
16Дана матрица m n. Сформировать массив, состоящий из произведений максимального и минимального значений каждого столбца
17Найти в каждой строке матрицы m n наибольший и наименьший элементы и поменять их местами
18Найти в каждом столбце матрицы n n наибольший элемент и поменять его местами с элементом на главной диагонали
100
Окончание
№ |
Задание |
19Дана квадратная матрица n n. Найти количество элементов заштрихованной области, больших Р
20Дана матрица m n . Сформировать массив из произведений положительных элементов каждой строки матрицы
21Дана матрица m n . Сформировать одномерный массив из суммы положительных элементов каждой строки
22Найти наибольшее значение среди отрицательных элементов матрицы, расположенных в четных строках
23Сформировать одномерный массив из количества элементов матрицы 6 7, попадающих в интервал [f; k]
24Дана матрица m n . Сформировать одномерный массив из суммы отрицательных элементов каждого столбца
25Дана квадратная матрица n n. Найти количество элементов в заштрихованной области, попадающих в интервал [d; p]
101
Лабораторная работа № 6
Программирование задач с использованием функций
Цель работы: изучение возможности программирования с использованием функций; получение практических навыков программирования задач с использованием собственных функций.
Теоретические сведения
При повторении одних и тех же действий в разных частях алгоритма при различных значениях данных необходимо выделять описания этих действий в отдельную функцию (подпрограмму).
Общий вид программы с использованием функций можно представить следующим образом:
#Директивы препроцессору Глобальные данные (переменные, константы)
Функция1(список формальных параметров) {Локальные данные Операторы функции
}
Функция N (список формальных параметров) {Локальные данные Операторы функции
}
Основная функция main() Локальные данные Функция1(фактические параметры) Функция2(фактические параметры)
102