Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПРЭВМ_Лр№3_Одномерные массивы

.pdf
Скачиваний:
12
Добавлен:
13.02.2015
Размер:
243.75 Кб
Скачать

ПрЭВМ, 1 семестр, направление «Прикладная математика и информатика»

1

Лабораторная работа №3. Одномерные массивы. Функции

Особенности работы с одномерными массивами

Массивы используют для хранения групп данных одного типа. Величины, хранящиеся в массиве, называют его элементами. К любому элементу массива можно обратиться, используя имя массива и номер элемента в этом массиве.

Элементы массивов нумеруются с нуля, поэтому максимальный номер элемента всегда на единицу меньше размерности. Автоматический контроль выхода индекса за границы массива не производится, программист должен следить за этим самостоятельно. Размерность нединамического массива может быть только константой или константным выражением. Рекомендуется задавать размерность с помощью именованной константы.

При описании массив можно инициализировать, задав начальные значения его элементов. Если инициализирующих значений меньше, чем элементов в массиве, остаток массива обнуляется, если больше – лишние значения не используются. Можно инициализировать сразу весь массив нулями.

Для работы с массивами удобнее всего использовать цикл for. Помните, что массив нельзя вывести на печать или ввести сразу, нужно делать это поэлементно. То же самое верно для всех алгоритмов работы с массивами. Не забывайте, что в С++ существует возможность для цикла for задавать шаг счетчика цикла (а не только увеличивать или уменьшать его на единицу). Для многих задач это оказывается весьма полезным.

При нахождении различных промежуточных параметров массивов рекомендуется выводить их на печать во время отладки программы. Когда программа будет готова, лишний вывод нужно убрать.

Указатель – это переменная, в которой хранится адрес области памяти. Имя массива является указателем на его нулевой элемент.

Использование динамических массивов в C++

Если до начала работы неизвестно, сколько в массиве элементов, следует использовать динамические массивы. В этом случае размерность массива задается при помощи переменной. Память для хранения массива выделяется в процессе выполнения программы при помощи операции new[]. Например:

int n = 10;

int *a = new int[n];

При использовании динамических массивов не следует забывать об освобождении памяти после того, как массив перестает быть нужным. Освобождение памяти выполняется с помощью операции delete[]:

delete [] a;

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

Особенности передачи массивов в качестве параметров в функции

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

тип_результата имя_функции(int *a, const int n);

Подготовлено Латухиной Е.А., старшим преподавателем кафедры ПиВВ ИМИКТ САФУ

ПрЭВМ, 1 семестр, направление «Прикладная математика и информатика»

2

Задания для всех

Все задания выполняются с использованием функций, количество таких функций для разных задач может различаться. Если на входные данные и результаты накладываются какие-то ограничения, отразить это в программе.

Все задачи лабораторной работы (в том числе индивидуальные) необходимо выполнять в одном проекте. Файл с кодом должен быть снабжен шапкой вида:

///**********************************

///Лабораторная работа №3

///Одномерные массивы

///Выполнил студент 12 группы

///Фамилия Имя Отчество

///**********************************

За каждую задачу из этого раздела можно получить не более одного балла (если не сказано иначе).

1.Написать программу, организующую заполнение целого массива из n элементов случайными значениями (n – целая переменная) и корректный вывод массива.

2.Выполнить предыдущую задачу для вещественного массива.

Функции из задач 1 и 2 удобно использовать для решения всех последующих задач.

3.Написать программу, решающую задачу линейного поиска элемента в заданном вещественном массиве.

4.Написать программу, которая упорядочивает вещественный массив методом выбора.

5.Написать программу, решающую задачу бинарного поиска в отсортированном целочисленном массиве.

Индивидуальные задания

Номер варианта можно узнать у преподавателя. Работы, выполненные по чужому варианту, не принимаются. Номер варианта остается постоянным для всех лабораторных работ. Все задания выполняются с использованием функций.

Не забывайте, что элементы в массиве могут быть как положительными, так и отрицательными. Если в задаче сказано, что массив вещественный, то он и должен быть вещественным. В противном случае будет снижена оценка. Для решения задач желательно, но не обязательно использовать динамические массивы.

Решите следующие задачи:

1.(1 балл) В одномерном массиве, состоящем из n вещественных элементов, вычислить: Вариант 1: сумму отрицательных элементов массива.

Вариант 2: произведение положительных элементов массива.

Вариант 3: количество элементов массива, меньших С (вводится с клавиатуры). Вариант 4: сумму положительных элементов массива.

Вариант 5: произведение не равных нулю элементов массива. Вариант 6: количество положительных элементов массива.

Вариант 7: сумму элементов массива, больших С (вводится с клавиатуры). Вариант 8: произведение отрицательных элементов массива.

Вариант 9: количество элементов массива, равных 0.

Вариант 10: сумму элементов массива, меньших С (вводится с клавиатуры). Вариант 11: произведение элементов массива, меньших С (вводится с клавиатуры). Вариант 12: количество отрицательных элементов массива.

Вариант 13: сумму модулей элементов массива с нечетными номерами.

Подготовлено Латухиной Е.А., старшим преподавателем кафедры ПиВВ ИМИКТ САФУ

ПрЭВМ, 1 семестр, направление «Прикладная математика и информатика»

3

Вариант 14: произведение элементов массива с четными номерами. Вариант 15: сумму элементов массива с нечетными номерами. Вариант 16: произведение элементов массива с нечетными номерами. Вариант 17: сумму элементов массива с четными номерами.

Вариант 18: произведение модулей элементов массива, меньших С (вводится с клавиатуры).

Вариант 19: сумму модулей элементов массива с четными номерами. Вариант 20: произведение модулей элементов массива с четными номерами.

2.(2 балла) В одномерном массиве, состоящем из n целых элементов, найти:

Вариант 1: произведение отрицательных элементов массива, расположенных между минимальным и максимальным элементами.

Вариант 2: сумму отрицательных элементов массива, расположенных между первым и последним положительными элементами.

Вариант 3: произведение ненулевых элементов массива, расположенных между первым

и последним отрицательными элементами.

Вариант 4: произведение элементов массива, расположенных между минимальным по модулю и максимальным по модулю элементами.

Вариант 5: сумму положительных элементов массива, расположенных между первым и последним нулевыми элементами.

Вариант 6: произведение ненулевых элементов массива, расположенных между первым и последним нулевыми элементами.

Вариант 7: произведение отрицательных элементов массива, расположенных между первым и последним положительными элементами.

Вариант 8: сумму элементов массива, расположенных после второго нулевого элемента массива.

Вариант 9: произведение сумму элементов массива, расположенных между первым и последним отрицательными элементами.

Вариант 10: произведение элементов массива, расположенных после второго отрицательного элемента массива.

Вариант 11: произведение элементов массива, расположенных до второго отрицательного элемента массива.

Вариант 12: сумму модулей элементов массива, расположенных после второго отрицательного элемента массива.

Вариант 13: произведение элементов массива, расположенных после второго положительного элемента массива.

Вариант 14: количество неположительных элементов, расположенных между его максимальным и минимальным элементами.

Вариант 15: произведение элементов массива, расположенных правее предпоследнего положительного элемента массива.

Вариант 16: сумму элементов массива, расположенных до второго положительного элемента массива.

Вариант 17: произведение элементов массива, расположенных правее второго положительного элемента массива.

Вариант 18: сумму элементов массива, расположенных после предпоследнего нулевого элемента массива.

Вариант 19: произведение элементов массива, расположенных между первым и последним нулевыми элементами.

Подготовлено Латухиной Е.А., старшим преподавателем кафедры ПиВВ ИМИКТ САФУ

ПрЭВМ, 1 семестр, направление «Прикладная математика и информатика»

4

Вариант 20: сумму его элементов, расположенных правее предпоследнего отрицательного элемента.

3.(2 балла) В одномерном массиве, состоящем из n вещественных элементов, заменить: Вариант 1: все положительные элементы на противоположные.

Вариант 2: все нулевые элементы на случайно сгенерированные отрицательные. Вариант 3: все элементы, меньшие чем введенное с клавиатуры число С, на ноль. Вариант 4: все отрицательные элементы на обратные.

Вариант 5: все ненулевые элементы на обратные.

Вариант 6: все элементы, меньшие чем введенное с клавиатуры число С, на противоположные.

Вариант 7: все ненулевые элементы на случайно сгенерированные положительные. Вариант 8: все элементы, большие чем введенное с клавиатуры число С, на обратные. Если нулевой элемент подходит под условие, его не заменять.

Вариант 9: все отрицательные элементы на противоположные.

Вариант 10: все элементы, большие чем введенное с клавиатуры число С, на противоположные.

Вариант 11: все элементы, меньшие чем введенное с клавиатуры число С, на обратные. Если нулевой элемент подходит под условие, его не заменять.

Вариант 12: все положительные элементы на обратные.

Вариант 13: все положительные элементы на среднее арифметическое соседних (если первый или последний является положительным, заменить на половину соседнего). Вариант 14: все ненулевые элементы на случайно сгенерированные отрицательные. Вариант 15: все нулевые элементы на случайно сгенерированные положительные. Вариант 16: все отрицательные элементы на среднее арифметическое соседних (если первый или последний является отрицательным, заменить на половину соседнего). Вариант 17: все элементы, большие чем введенное с клавиатуры число С, на ноль. Вариант 18: все ненулевые элементы на среднее арифметическое соседних (если первый или последний является ненулевым, заменить на половину соседнего).

Вариант 19: все нулевые элементы на среднее арифметическое соседних (если нулевой элемент является первым или последним, заменить на половину соседнего).

Вариант 20: все нулевые элементы на величины, обратные их номерам (если нулевой по номеру элемент окажется равен нулю, его не заменять).

4.(2 балла) Дан одномерный массив, состоящий из n вещественных элементов. Выполнить следующую задачу:

Вариант 1: Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом все остальные.

Вариант 2: Заменить все нечетные элементы массива обратными и упорядочить массив по убыванию.

Вариант 3: Преобразовать массив таким образом, чтобы сначала располагались все отрицательные элементы, а потом все остальные.

Вариант 4: Преобразовать массив таким образом, чтобы сначала располагались элементы, модуль которых не превышает 1, а потом все остальные.

Вариант 5: Преобразовать массив таким образом, чтобы сначала располагались все равные введенному с клавиатуры числа С элементы, а потом все остальные.

Вариант 6: Преобразовать массив таким образом, чтобы сначала располагались элементы, модуль которых превышает 1, а потом все остальные.

Вариант 7: Преобразовать массив таким образом, чтобы сначала располагались все равные нулю элементы, а потом все остальные.

Подготовлено Латухиной Е.А., старшим преподавателем кафедры ПиВВ ИМИКТ САФУ

ПрЭВМ, 1 семестр, направление «Прикладная математика и информатика»

5

Вариант 8: Преобразовать массив таким образом, чтобы сначала располагались все попадающие в интервал [a, b] элементы, а потом все остальные.

Вариант 9: Преобразовать массив таким образом, чтобы сначала располагались все большие введенного с клавиатуры числа С элементы, а потом все остальные.

Вариант 10: Упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах.

Вариант 11: Преобразовать массив таким образом, чтобы сначала располагались все меньшие введенного с клавиатуры числа С элементы, а потом все остальные.

Вариант 12: Преобразовать массив таким образом, чтобы сначала располагались четные элементы, а потом нечетные.

Вариант 13: Сжать массив, удалив из него все равные числу С элементы. Освободившиеся в конце массива элементы заполнить нулями.

Вариант 14: Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями.

Вариант 15: Преобразовать массив таким образом, чтобы сначала располагались элементы, стоявшие на нечетных позициях, а потом все остальные.

Вариант 16: Сжать массив, удалив из него все элементы, целая часть которых лежит в интервале [а, b]. Освободившиеся в конце массива элементы заполнить нулями.

Вариант 17: Сжать массив, удалив из него все элементы, величина которых лежит в интервале [а, b]. Освободившиеся в конце массива элементы заполнить нулями.

Вариант 18: Сжать массив, удалив из него все меньшие числа С элементы. Освободившиеся в конце массива элементы заполнить нулями.

Вариант 19: Преобразовать массив таким образом, чтобы сначала располагались элементы, стоявшие на четных позициях, а потом все остальные.

Вариант 20: Преобразовать массив таким образом, чтобы сначала располагались элементы, отличающиеся от минимального не более чем на 15%, а потом все остальные.

5.(3 балла) Задача повышенной сложности из задачника Касьянов В.Н., Сабельфельд В.К., Сборник заданий по практикуму на ЭВМ. Номер задачи спрашивайте у преподавателя.

Подготовлено Латухиной Е.А., старшим преподавателем кафедры ПиВВ ИМИКТ САФУ