Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_ОписаниеЛаб_1курс_1семестр.doc
Скачиваний:
63
Добавлен:
03.05.2015
Размер:
1.57 Mб
Скачать

Лабораторная работа № 5

МАССИВЫ В ЯЗЫКЕ С++, РАЗРАБОТКА СТРУКТУРИРОВАННЫХ ПРОГРАММ

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

Общие указания к заданиям лабораторной работы.

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

Для решения задачи разработать следующие функции:

- функцию ввода n элементов массива;

- функцию вывода n элементов массива;

- функцию обработки массива (массивов), анализирующую исходную информацию в массиве и на основании этого анализа создающую или не создающую новый массив. При необходимости, алгоритм этой функции нужно разбить на функции, каждая из которых будет реализовать отдельные независимые процедуры, из которых можно составить алгоритм обработки массивов как одну функцию. Например, как отдельную функцию в общей процедуре обработки массива следует выделить процедуру анализа исходного массива для принятия решения о создании или не создании нового массива;

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

Программу разработать в двух вариантах:

- используя статическое распределение памяти для массивов (задать некоторое максимально возможное количество обрабатываемых элементов в массиве);

- используя динамическое распределение памяти для массивов.

Тексты функций сгруппировать в файлы:

  • файлы с функциями ввода и вывода массивов отдельно для статического и динамического распределения памяти;

  • файлы с функцией (функциями) обработки массива опять же отдельно для статического и динамического распределения памяти;

  • файлы с функциями main, каждая из которых работает либо с функциями статики, либо с функциями динамики.

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

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

Задача 5.01

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

Задача 5.02

Дан массив действительных чисел размером N и целое число К. Если К меньше N, изменить порядок следования элементов в исходном массиве на обратный порядок отдельно до и отдельно после К-го элемента массива. Если K больше или равно N, то создать новый массив, не включив в него из исходного массива первый и последний элемент.

Задача 5.03

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

Задача 5.04

Даны два одномерных массива действительных чисел разного размера. Если в первом массиве есть числа, равные элементам второго массива, то их следует удалить из него. При удалении элементов массива он должен быть “сжат” перемещением оставшихся элементов в массиве. Если первый массив не удалось сжать, то создать третий массив, поместив в него элементы сначала первого, а за ними второго массивов.

Задача 5.05

Дан массив действительных чисел, среди которых заведомо есть как отрицательные числа, так и неотрицательные. Если в массиве есть как положительные, так и отрицательные элементы, то получить новый массив, значения которых вычисляются по формуле а1 x1, а2 x2, а3 x3,... аs xs , где а1... аp - отрицательные элементы исходного массива, взятые в порядке их следования, x1... xq – положительные элементы массива, взятые в обратном порядке. Размер нового массива вычисляется как минимум двух чисел – количества положительных и отрицательных элементов исходного массива s=min(p,q).

Задача 5.06

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

Задача 5.07

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

Задача 5.08

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

Задача 5.09

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

Задача 5.10

Составить функцию, которая для упорядоченного массива чисел, определяет с помощью метода “бинарного поиска", является ли некоторое заданное число элементом этого массива. Используя эту функцию решить следующую задачу: для упорядоченного массива и заданного числа создать новый массив путем добавления в него этого числа в начало массива, если это число не является его элементом, в противном случае новый массив не создается. Если массив не создан, выдать об этом соответствующее сообщение.

Следующие шаги описывают алгоритм метода “бинарного поиска":

Предположим, в упорядоченном по возрастанию массиве индексами являются: low=0 и high = n-1. Осуществляется поиск key.

Шаг 1. Вычислить индекс срединного элемента массива mid = (low + high) / 2.

Шаг 2. Сравнить срединный элемент с key. Если найдено совпадение, вернуть индекс mid.

Шаг 3. Если key больше срединного элемента, то совпадение должно происходить в диапазоне индексов mid+1,…,high. Это верно, т.к. список упорядочен по возрастанию. Новые границами поиска совпадения являются low = mid + 1 и high. Если key меньше срединного элемента, то совпадение должно происходить в диапазоне индексов low,.. …,mid -1. Новые границами поиска совпадения являются low и high= mid - 1.

Шаг 4. Если low меньше high, повторить шаг 1, в противном случае key не найден и возвращается индикатор того, что он не найден (например, значение -1).

В функции ввода массива предусмотреть возможность ввода только упорядоченного массива.

Задача 5.11

Составить функцию, которая, получив два массива, определяет, равны ли они. Два массива будем считать равными, если они содержат одинаковые числа.

Используя эту функцию решить следующую задачу:

Даны три массива действительных чисел. Еслиэти три массива равны между собой, создатьновыймассив, все элементы которого равны утроенным элементамодного из них, в противном случае создать массив, склеив все три исходных массива в порядке 1, 2 и 3.

Задача 5.12

Даны два массива действительные чисел а1...аn , b1...bm.. Если первый массив упорядочен 1<= а2.<=...<=аn ), то получить новый массив натуральных чисел k1...km таких, что ki - это номер (место) элемента массива места bi среди элементов массива а1...аn , ( i=1,...,m). Для поиска места элементов в упорядоченном массиве применить алгоритм деления пополам.

Следующие шаги описывают алгоритм метода деления пополам:

Предположим, в упорядоченном по возрастанию массиве индексами являются: low=0 и high = n-1. Осуществляется поиск key.

Шаг 1. Вычислить индекс срединного элемента массива mid = (low + high) / 2.

Шаг 2. Сравнить срединный элемент с key. Если найдено совпадение, вернуть индекс mid.

Шаг 3. Если key больше срединного элемента, то совпадение должно происходить в диапазоне индексов mid+1,…,high. Это верно, т.к. список упорядочен по возрастанию. Новые границами поиска совпадения являются low = mid + 1 и high. Если key меньше срединного элемента, то совпадение должно происходить в диапазоне индексов low,.. …,mid -1. Новые границами поиска совпадения являются low и high= mid - 1.

Шаг 4. Если low меньше high, повторить шаг 1, в противном случае key не найден и возвращается индикатор того, что он не найден (например, значение -1).

Задача 5.13

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

Задача 5.14

Дан массив целых чисел. Если в массиве сумма всех элементов четное число, то получить новый массив, поместив в него все элементы исходного, кроме элементов с максимальным и минимальным значением.

Задача 5.15

Дан массив вещественных чисел а1...аn. Если массив упорядочен по убыванию, то создать из его элементов новый массив b1...bn, где каждый i элемент bi есть среднее арифметическое число всех членов последовательности а1...аn кроме его i элемента аi (i=1,2, …., n).

Задача 5.16

Дан массив целых чисел. Если в массиве есть повторяющиеся числа, то создать новый массив, в который поместить только разные числа из исходного массива. Если повторяющихся чисел в исходном массиве нет, то новый массив не создавать.

Задача 5.17

Дан массив действительных чисел размером N и целое число К. Если в исходном массиве чисел больше чем К, то в исходном массиве выполнить кольцевой сдвиг его элементов так, чтобы первый максимальный элемент этого массива оказался на K-ом месте. Кольцевой сдвиг массива выполняется всеми его элементами так, что элементы “выталкиваемые” из массива в одну сторону занимают освободившиеся место с другой стороны. Если число К больше или равно числу элементов в исходном массиве, то создать новый массив, как копию исходного массива, имеющего в качестве первого элемента число K.

Задача 5.18

Дан массив n целых чисел. Если исходный массив упорядочен по возрастанию, то создать новый массив, записав в него все элементы исходного массива по убыванию.

Задача 5.19

Дан массив n целых чисел а1...аn. Пусть m и М— наименьшее и наибольшее из них. Если разность этих чисел по модулю меньше, чем число, равное 3n, то сформировать массив целых чисел из диапазона от М до m, не являющихся элементами массива а1...аn. Числа в новом массиве расположить в порядке убывания.

Задача 5.20

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

Задача 5.21

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

Задача 5.22

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

Задача 5.23

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

Задача 5.24

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

Задача 5.25

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

Сортировка выбором – отыскивается максимальный элемент и переносится в конец массива; затем этот метод применяется ко всем элементам, кроме последнего элемента (он уже стоит на своем месте).

Задача 5.26

Дан массив целых чисел. Если в массиве нет одинаковых чисел, то создать новый массив, повторить в нем каждое число исходного массива три раза.

Задача 5.27

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

Задача 5.28

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

Задача 5.29

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

Задача 5.30

Дан массив целых чисел а1...аn. Если количество четных и нечетных элементов массива равно, то создать новый массив, в котором элементы исходного массива расположены в последовательности x1 ,y1 ,x2 ,y2,...,xk ,yk , где x1 ,... xk - взятые в порядке следования четные элементы массива а1...аn , а y1...yk – нечетные, k=n/2.

Задача 5.31

Дан массив n действительных чисел и два целых числа k и K. Если целые числа k и K меньше размера массива n и массив упорядочен на отрезке от меньшего данного целого числа до большего числа, то создать новый массив. Каждый i элемент нового массива вычислить как среднее арифметическое всех предшествующих ему элементов в исходном массиве ( i = 1,2,…,n-1 ).

Задача 5. 32

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

Задача 5. 33

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