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

Часть 2 / ИПР1_В5 / ИПР1

.docx
Скачиваний:
9
Добавлен:
31.01.2022
Размер:
37.29 Кб
Скачать

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Кафедра программного обеспечения информационных технологий

Факультет ФКСиС

Специальность ПОИТ

Индивидуальная практическая работа №1

по дисциплине «Языки программирования. Часть 2»

Вариант 5

Выполнил студент: Бордон Е.С.

группа 991051

Зачетная книжка № 99105004

Минск 2021

Задание:

5. В матрице А(6,6) путем перестановки строк и столбцов поместить

максимальный элемент на место элемента А(1,1).

Пояснения к работе программы:

Программа реализована на языке программирования Си в программной среде разработки Visual Studio 2019. Программы выполнена в консольном режиме.

По условию задания матрица представляет собой двумерный массив размером [6] [6]. Для удобства работы массив данные будут заполнятся автоматически используя функцию rand(). Чтобы при каждом новом открытии программы были разные значения используем инициализатор генератора случайных чисел с аргументом time(NULL).

#define COUNT 6 // размер матрицы по заданию

int arr[COUNT][COUNT]; // матрица заполняется рандомными числами от 1 до 99

srand(time(NULL)); // возвращает в качестве аргумента кол-во сек с 1янв1970

for (int i = 0; i < COUNT; i++)

for (int j = 0; j < COUNT; j++)

arr[i][j] = 1 + rand() % (99);

При открытии программы будет сразу ведена матрица с заполненными значениями. Процедура вывода выведена в отдельную функцию.

void print(int arr[COUNT][COUNT]) {

for (int i = 0; i < COUNT; i++) {

for (int j = 0; j < COUNT; j++) {

printf(" %2d ", arr[i][j]);

}

printf("\n");

}

}

Вначале мы определяем максимальный элемент в матрице и его индекс.

int i, j, temp;

int max = 0, maxX = 0, maxY = 0; // находим максимальный элемент и его индекс

for (i = 0; i < COUNT; i++)

for (j = 0; j < COUNT; j++)

if (arr[i][j] > max) {

max = arr[i][j];

maxX = i;

maxY = j;

}

Затем перемещаем столбец в котором находится максимальный элемент в крайнее левое положение.

for (i = 0; i < COUNT; i++) {

temp = arr[i][0];

arr[i][0] = arr[i][maxY];

arr[i][maxY] = temp;

}

После проделываем тоже самое со строкой, в которой находится максимальный элемент.

for (j = 0; j < COUNT; j++) {

temp = arr[0][j];

arr[0][j] = arr[maxX][j];

arr[maxX][j] = temp;

}

На каждом этапе выводим весь массив для демонстрации работы программы.

Все функции программы вынесены в отдельный заголовочный файл.

В ходе тестирования программы ошибок не обнаружено.

Результат работы программы:

Рис. 1 Результат работы программы.

Листинг программы: файл “functions.h”:

#pragma once

#define COUNT 6 // размер матрицы по заданию

void print(int arr[COUNT][COUNT]) {

for (int i = 0; i < COUNT; i++) {

for (int j = 0; j < COUNT; j++) {

printf(" %2d ", arr[i][j]);

}

printf("\n");

}

}

Листинг программы: файл “project.c ”:

#include <stdio.h>

#include <stdlib.h>

#include "functions.h"

int main() {

//int count = 6;

int arr[COUNT][COUNT]; // матрица заполняется рандомными числами от 1 до 99

srand(time(NULL)); // возвращает в качестве аргумента кол-во сек с 1янв1970

for (int i = 0; i < COUNT; i++)

for (int j = 0; j < COUNT; j++)

arr[i][j] = 1 + rand() % (99);

// выводим на экран

print(arr);

int i, j, temp;

int max = 0, maxX = 0, maxY = 0; // находим максимальный элемент и его индекс

for (i = 0; i < COUNT; i++)

for (j = 0; j < COUNT; j++)

if (arr[i][j] > max) {

max = arr[i][j];

maxX = i;

maxY = j;

}

printf("\n");

printf("A max = %d [%d][%d]\n", max, (maxX + 1), (maxY + 1));

// перемещаем столбец в крайнее левое положение

for (i = 0; i < COUNT; i++) {

temp = arr[i][0];

arr[i][0] = arr[i][maxY];

arr[i][maxY] = temp;

}

printf("\n");

print(arr); // выводим на экран

printf("\n");

// перемещаем строку в крайнее правое положение

for (j = 0; j < COUNT; j++) {

temp = arr[0][j];

arr[0][j] = arr[maxX][j];

arr[maxX][j] = temp;

}

printf("\n");

print(arr);

system("pause");

return 0;

}