2
.docxФедеральное государственное бюджетное образовательное учреждение
высшего образования
«САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ ГАГАРИНА Ю.А.»
Институт Прикладных информационных технологий и коммуникаций
Специальность Информатика и вычислительная техника
Кафедра Информационно - коммуникационные системы и программная
инженерия
Контрольная работа
по дисциплине: «Программирование»
на тему
«Обработка массивов данных»
Оценка работы_____
Дата защиты_______
Подпись __________
Саратов – 2022
Цель: изучение принципов обработки одномерных и двумерных массивов данных, разработка алгоритмов и программ обработки массивов.
Вариант 2.
Задание: Разработать алгоритм и программу. Дана матрица B размерностью n x m (2 <= n, m <= 50 – вводятся пользователем). Элементы матрицы Bij являются вещественными числами и принимают значения в диапазоне [0, 200]. Заполнение матрицы осуществляется в соответствии с выбором пользователя:
заполнение случайными числами в установленном диапазоне;
пользовательский ввод с клавиатуры.
Определить максимальные и минимальные элементы матрицы и индексы столбцов и строк, на пересечении которых они находятся.
Описание алгоритма работы программы.
1. Пользователю предлагается ввести числа для определения размерности матрицы B (n x m). Проверка на удовлетворение условию задания (2 <= n, m <= 50), повторный запрос при необходимости.
2. Создание вещественного динамического массива B[n][m].
3. Заполнение массива B вещественными числами в диапазоне [0, 200] с проверкой по типу и диапазону, в соответствии с выбором пользователя:
- Случайными числами
- Пользовательский ввод.
Вывод на экран полученной матрицы.
4. Цикл поиска максимального элемента массива B путем присвоения исходной переменной значения первого элемента массива и сравнения этой переменной со следующими элементами массива. Присвоение индекса строки и столбца максимального элемента.
4. Цикл поиска минимального элемента массива B путем присвоения исходной переменной значения первого элемента массива и сравнения этой переменной со следующими элементами массива. Присвоение индекса строки и столбца минимального элемента.
5. Вывод на экран значение максимального и минимального элементов, а также индексы столбцов и строк, на пересечении которых они находятся.
Блок-схема алгоритма.
Текст программы:
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <ctime>
using namespace std;
int main()
{
setlocale(LC_ALL, "ru");
cout << " Контрольная работа <<Обработка массивов>>" << endl << " Ввод размерности матрицы B (nxm):" << endl;
int n, m, i, j, imax, jmax, imin, jmin;
float max, min;
char m_z;
srand(time(NULL));
do //выбор количества строк массива с проверкой по допустимому диапазону
{
cin.clear();
cin.seekg(0);
cout << " Введите количество строк матрицы (2 до 50): ";
cin >> n;
} while ((n < 2) || (n > 50) || (!cin.good()));
do //выбор количества столбцов массива с проверкой допустимому диапазону
{
cin.clear();
cin.seekg(0);
cout << " Введите количество столбцов матрицы (1 до 50): ";
cin >> m;
} while ((m < 1) || (m > 50) || (!cin.good()));
float **B = new float*[n]; //создание динамического массива B[n][m]
for (int j = 0; j < n; j++)
B[j] = new float[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() % (200 * 1000)) / 1000.0;
}
}
break;
}
case'2':
{
cout << " Заполнение массива в ручную. Введите вещественные числа [0, 200]:" << 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] > 200) || (!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]; //поиск максимального элемента массива
imax = 0;
jmax = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if (max <= B[i][j])
{
max = B[i][j];
imax = i;
jmax = j;
}
}
}
min = B[0][0]; //поиск минимального элемента массива
imin = 0;
jmin = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if (B[i][j] <= min)
{
min = B[i][j];
imin = i;
jmin = j;
}
}
}
cout << " Максимальный элемент " << max << " Строка: " << imax + 1 << " Столбец: " << jmax + 1 << endl << " Минимальный элемент " << min << " Строка: " << imin + 1 << " Столбец: " << jmin + 1 << endl; //вывод результатов
cout << " Для выхода нажмите любую клавишу" << endl;
system("pause>nul");
return 0;
}
Пример работы программы.
Пример 1:
Пример 2:
Пример 3:
Вывод:
Изучены принципы обработки одномерных и двумерных массивов данных, разработаны алгоритмы и программа обработки массивов, получен опыт написания простых циклов, изучены методы проверки вводимой пользователем информации на корректность.
ЛИТЕРАТУРА
Синицын, С. В. Программирование на языке высокого уровня: учебник / С. В. Синицын, А. С. Михайлов, О. И. Хлытчиев. - М.: ИЦ "Академия", 2010. - 400 с.
Маслянкин, В. И. Визуальное программирование: методический сборник / Маслянкин В.И. - Москва: Российский новый университет, 2010. - 40 с.
Шишкин, А. Д. Практикум «Программирование на языке Си» /Шишкин А. Д. - Санкт-Петербург: Российский государственный гидрометеорологический университет, 2013. - 52 с.
Подбельский, В. В. Язык Си#. Базовый курс [Электронный ресурс]: учебное пособие / Подбельский В. В. - Москва: Финансы и статистика, 2011. - 384 с.
Павловская, Т. А. C/C++. Структурное программирование: практикум / Т. А. Павловская, Ю. А. Щупак. - СПб. [и др.]: Питер, 2007. (10 экз. НТБ СГТУ)