Скачиваний:
1
Добавлен:
06.05.2023
Размер:
242.9 Кб
Скачать

Федеральное государственное бюджетное образовательное учреждение

высшего образования

«САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ ГАГАРИНА Ю.А.»

Институт Прикладных информационных технологий и коммуникаций

Специальность Информатика и вычислительная техника

Кафедра Информационно - коммуникационные системы и программная

инженерия

Практическая работа

по дисциплине: «Программирование»

на тему

«Обработка массивов данных»

Оценка работы______

Дата защиты________

Подпись ___________

Саратов – 2022

Цель: изучение принципов обработки одномерных и двумерных массивов данных, разработка алгоритмов и программ обработки массивов.

Вариант 2.

Задача: Разработать алгоритм и программу. Дана матрица B, размерностью n x m (3<=n, m<=30 – вводятся пользователем). Элементы матрицы Bij являются целыми числами, принимающими значения в диапазоне [0, 255]. Заполнение матрицы осуществляется в соответствии с выбором пользователя:

  • заполнение случайными числами в установленном диапазоне;

  • пользовательский ввод с клавиатуры.

Строку матрицы, содержащую максимальный элемент поменять местами со строкой, содержащей минимальный элемент.

Описание алгоритма решения задачи.

1. Пользователю предлагается ввести числа для определения размерности матрицы B (n x m). Проверка на удовлетворение условию задания (3 <= n, m <= 30), повторный запрос при необходимости.

2. Создание целочисленного динамического массива B[n][m].

3. Заполнение массива B целыми числами в диапазоне [0, 255] с проверкой по типу и диапазону, в соответствии с выбором пользователя:

- Случайными числами

- Пользовательский ввод.

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

4. Циклы поиска максимального, а затем минимального элемента массива B путем присвоения исходной переменной значения первого элемента массива и сравнения этой переменной со следующими элементами массива.

5. Если максимальный и минимальный элементы равны, вывод сообщения “Замена строк не требуется”, повторный вывод на экран исходного массива.

6. Если максимальный и минимальный элемент массива B не равны, изменение положения строк массива B, содержащих максимальный и минимальный элемент относительно друг друга. Вывод сообщения “ Матрица с заменой строк” и вывод на экран изменённого массива B.

Блок-схема алгоритма.

Текст программы.

#include <iostream>

#include <cstdlib>

#include <conio.h>

#include <ctime>

using namespace std;

int main()

{

setlocale(LC_ALL, "ru");

cout << " Практическая работа <<Обработка массивов>>" << endl << " Ввод размерности матрицы B (nxm):" << endl;;

int i, j, n, m, max, min, imax, imin, temp;

char m_z;

srand(time(NULL));

do //выбор количества строк массива с проверкой по допустимому диапазону

{

cin.clear();

cin.seekg(0);

cout << " Введите количество строк массива (от 3 до 30): ";

cin >> n;

} while ((n < 3) || (n > 30) || (!cin.good()));

do //выбор количества столбцов массива с проверкой допустимому диапазону

{

cin.clear();

cin.seekg(0);

cout << " Введите количество столбцов массива (от 1 до 30): ";

cin >> m;

} while ((m < 1) || (m > 30) || (!cin.good()));

int **B = new int*[n]; //создание динамического массива B[n][m]

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

B[j] = new int[m];

do //выбор метода заполнения массива

{

cout << " Выберите метод заполнения массива: 1 - Случайный, 2 - Вручную: " << endl;

m_z = _getch();

} while ((m_z != '1') && (m_z != '2'));

switch (m_z) //методы заполнения массива

{

case'1':

{

cout << " 'Случайное' заполнение массива:" << endl; //автоматическое заполнение массива

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

{

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

{

B[i][j] = rand() % 256;

}

}

break;

}

case'2':

{

cout << " Заполнение массива в ручную. Введите целые числа [0, 255]:" << endl; //ручное заполнение массива

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

{

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

{

do

{

cin.clear();

cin.seekg(0);

cout << "B[" << i + 1 << "][" << j + 1 << "]";

cin >> B[i][j];

} while ((B[i][j] < 0) || (B[i][j] > 255) || (!cin.good()));

}

}

break;

}

}

cout << " Исходная матрица:" << endl; //вывод в консоль исходной матрицы

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

{

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

{

cout << B[i][j] << "\t";

}

cout << endl;

}

max = B[0][0];

min = B[0][0];

imax = 0;

imin = 0;

for (int i = 0; i < n; i++) //поиск максимального элемента массива максимальный элемент

{

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

if (B[i][j] > max)

{

max = B[i][j];

imax = i; //номер строки массива с максимальным элементом

}

}

for (int i = 0; i < n; i++) //поиск минимального элемента массива

{

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

if (B[i][j] < min)

{

min = B[i][j];

imin = i; //номер строки массива с минимальным элементом

}

}

cout << " Cтрока с максимальным элементом: " << imax + 1 << endl << " Строка с минимальным элементом: " << imin + 1 << endl;

if (imax == imin) //замена строк массива не требуется

{

cout << " Замена строк не требуется:" << endl;

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

{

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

{

cout << B[i][j] << "\t";

}

cout << endl;

}

}

else

{

for (int j = 0; j < m; j++) //замена строк в исходном массиве

{

temp = B[imax][j];

B[imax][j] = B[imin][j];

B[imin][j] = temp;

}

cout << " Матрица с заменой строк:" << endl; //вывод в консоль изменённого массива

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

{

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

{

cout << B[i][j] << "\t";

}

cout << endl;

}

}

cout << " Для выхода нажмите любую клавишу" << endl;

system("pause>nul");

return 0;

}

Пример работы программы.

Пример 1:

Пример 2:

Пример 3:

Вывод.

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

ЛИТЕРАТУРА.

  1. Степанов, А.М. Основы алгоритмизации и программирования на языке С: учеб. пособие для студ., обучающихся по направлению "Управление в технических системах" / А. М. Степанов, М. Ф. Степанов; Саратовский гос. техно. ун-т им. Гагарина Ю. А. - Саратов: СГТУ, 2016. - 88 с.

  2. Кирнос, В. Н. Информатика 2. Основы алгоритмизации и программирования на языке C++: Учебно-методическое пособие / Кирнос В. Н. - Томск: Эль Контент, Томский государственный университет систем управления и радиоэлектроники, 2013. - 160 с.

  3. Шишкин, А. Д. Программирование на языке Си: учебное пособие / Шишкин А. Д. - Санкт-Петербург: Российский государственный гидрометеорологический университет, 2013. - 104 с.

Соседние файлы в предмете Объектно ориентированное программирование