Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторный практикум

.pdf
Скачиваний:
48
Добавлен:
15.06.2021
Размер:
3 Mб
Скачать

Рис.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