Лабораторная работа 3
Работа с массивами в языке С++
Цель работы
Получение практических навыков в работе с массивами.
В ходе выполнения работы необходимо создать программу, которая определяет и инициализирует двумерный массив целых значений и затем выполняет следующие действия:
· чтение данных с консоли;
· преобразование исходного массива в соответствии с шагом один из индивидуального задания;
· создание и заполнение нового (одномерного) массива типа double элементами, полученными в соответствии с шагом два из индивидуального задания;
· вывод результатов (оба массива).
Программа должна выводить ошибки, если преобразование или заполнение массивов невозможно.
При создании одномерного динамического массива используется оператор new и удаляется он перед концом программы с помощью оператора delete.
Таблица 1.1 – Индивидуальные задания
Номер студента в списке | Преобразование исходного массива (шаг один) | Заполнение нового массива преобразованными элементами исходного массива (шаг два). Результир. массив должен содержать: | Количество строк m | Количество столбцов n |
Удвоить нечетные элементы | Квадратные корни минимальных положительных элементов строк | |||
Четные элементы заменить их квадратами | Кубические корни минимальных элементов столбцов | |||
Нулевые элементы заменить на единицы | Натуральные логарифмы максимальных положительных элементов строк | |||
Удвоить четные элементы | Натуральные логарифмы минимальных положительных элементов столбцов | |||
Все элементы заменить на их модули | Минимальные элементы столбцов | |||
Утроить четные элементы | Кубические корни диагональных элементов |
Все положительные элементы заменить их десятичные логарифмы | Суммы отрицательных элементов столбцов | |||
Все отрицательные элементы заменить на их квадраты | Квадратные корни диагональных элементов | |||
Все положительные элементы заменить на их натуральные логарифмы | Произведение отрицательных элементов строк | |||
Все положительные элементы заменить на их квадратные корни | Максимальные положительные элементы строк | |||
Удвоить положительные четные элементы | Кубические корни максимальных элементов столбцов | |||
Утроить отрицательные нечетные элементы | Квадратные корни минимальных положительных элементов столбцов | |||
Удвоить отрицательные нечетные элементы | Сумму десятичных логарифмов положительных элементов строк | |||
Утроить положительные четные элементы | Частное от деления максимальных положительных элементов столбцов на их десятичные логарифмы |
Чтобы использовать стандартные математические функции вам необходимо подключить заголовочный файл cmath. В таблице 1.2 представлены некоторые используемые функции.
Таблица 1.2 – Используемые функции
double sqrt(double x); | Берет квадратный корень положительного числа |
double pow(double x, double y); | Возводит x в степень y |
double log(double x); | Вычисляет натуральный логарифм |
double log10(double x); | Вычисляет десятичный логарифм. |
int abs(int x); | Возвращает модуль целого числа |
double fabs(double x); | Возвращает модуль вещественного числа |
double sin(double x); | Вычисляет синус числа |
double cos(double x); | Вычисляет косинус числа |
double atan(double x); | Вычисляет тангенс числа |
Теоретические сведения
Массивы
Массивы относятся к так называемым сложным, или составным типам данных. Массив - это структура данных, состоящая из элементов одного типа. В отличие от других структур данных (например, списков), элементы массивов всегда последовательно расположены в памяти.
При объявлении массива после идентификатора в квадратных скобках задается константа (в частности именованная или константное выражение) - число элементов массива:
int a[5]; // Массив из пяти элементов типа intconst int n = 5; double a1[n]; // Массив из пяти элементов типа double
Число элементов массива нельзя задавать переменной или неконстантным выражением. Массив может инициализироваться списком значений в фигурных скобках:
int b[4] = {1, 2, 3, 4};
При наличии списка инициализации, охватывающего все элементы массива, можно не указывать число элементов массива, оно будет определено компилятором:
int c[] = {1, 2, 3}; // Массив из трех элементов типа int
Если размерность массива больше числа значений в списке, то не инициализированные явно элементы массива будут установлены в 0 (значение по умолчанию). Если размерность массива меньше числа значений в списке, возникнет ошибка компиляции.
Один массив не может инициализироваться другим массивом и не может быть присвоен другому массиву. Чтобы скопировать один массив в другой, необходимо скопировать каждый элемент по очереди в цикле.
Доступ к каждому элементу осуществляется по его номеру в массиве (индексу), который указывается после имени массива в квадратных скобках. В качестве индекса массива может использоваться любое выражение, которое приводится к целочисленному значению. Индексы элементов массива всегда начинаются с 0, индекс последнего элемента на единицу меньше числа элементов в массиве. Размерность массива известна транслятору только в момент определения массива. При использовании стандартных массивов невозможен какой-либо автоматический контроль выхода за пределы массива.
Многомерные массивы
Массивы с размерностью 2 и более рассматриваются как массивы массивов и для каждого измерения указывается число элементов:
double aa[2][2] = {1, 2, 3, 4}; // Матрица 2 * 2
То же самое, но более наглядно:
double aa[2][2] = {{1, 2}, {3, 4}};
Первая размерность - это размерность по строкам, а вторая - по столбцам. При инициализации списка значений вторая и последующие размерности должны указываться явно.
Для индексирования в многомерном массиве требуется пара скобок для каждого измерения:
int i = 0, j = 1;aa[i][j] = i + j;
Элементы многомерных массивов в памяти выстраиваются в одномерную структуру (массив), в которой в начале стоят элементы первой строки, потом второй и т.д.
Порядок выполнения работы
1. Разработать алгоритм для решения поставленной задачи.
2. Разработать программу для решения поставленной задачи (использовать условные операторы и операторы цикла).
3. Проверить работоспособность программы на тестовых данных.
4. Сохранить результаты работы. Оформить отчет по лабораторной работе.
Содержание отчета:
1 Титульный лист.
2 Название лабораторной работы.
3 Цель лабораторной работы.
4 Ход выполнения работы (включить алгоритм решения задачи; программный код; пример использования программы).
5 Выводы по проделанной работе c описанием ошибок, с которыми Вы столкнулись при выполнении лабораторной работы.