1
.docxФедеральное государственное бюджетное образовательное учреждение
высшего образования
«САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ ГАГАРИНА Ю.А.»
Институт Прикладных информационных технологий и коммуникаций
Специальность Информатика и вычислительная техника
Кафедра Информационно - коммуникационные системы и программная
инженерия
Практическая работа
по дисциплине: «Программирование»
на тему
«Обработка массивов данных»
|
|
Оценка работы______
Дата защиты________
Подпись ___________
Саратов – 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:
Вывод.
Изучены принципы обработки одномерных и двумерных массивов данных, разработаны алгоритмы и программа обработки массивов, получен опыт написания простых циклов, изучены методы проверки вводимой пользователем информации на корректность.
ЛИТЕРАТУРА.
Степанов, А.М. Основы алгоритмизации и программирования на языке С: учеб. пособие для студ., обучающихся по направлению "Управление в технических системах" / А. М. Степанов, М. Ф. Степанов; Саратовский гос. техно. ун-т им. Гагарина Ю. А. - Саратов: СГТУ, 2016. - 88 с.
Кирнос, В. Н. Информатика 2. Основы алгоритмизации и программирования на языке C++: Учебно-методическое пособие / Кирнос В. Н. - Томск: Эль Контент, Томский государственный университет систем управления и радиоэлектроники, 2013. - 160 с.
Шишкин, А. Д. Программирование на языке Си: учебное пособие / Шишкин А. Д. - Санкт-Петербург: Российский государственный гидрометеорологический университет, 2013. - 104 с.