- Операторы цикла языка C. Вложенные циклы.
- Условный оператор языка C.
- Выделение динамической памяти.
- Указатели. Типизированные указатели.
- Указатели и массивы.
- Адресная арифметика.
Задание для выполнения
Объявить массив целых чисел и заполнить его случайными значениями(размер массива определяется вначале выплнения программыкакслучайное число в диапазоне, например, 3–200 (диапазон задан во 2 столбце таблицы вариантов)). В индивидуальных заданиях указан диапазон значений его элементов (3 столбец таблицы) икакую обработку массива следует произвести.
Для всех вариантов задания следует иметь в виду следующее:
· 0 считается положительным числом, если в задании не оговорен какой-то другой его статус;
· когда речь идет о какой-то последовательности чисел, имеется в виду последовательность с длиной, большей 1;
· в тех случаях, когда задание требует выполнения каких-то вычислений, разрешается выполнять их с той точностью, которую обеспечивают операции целочисленной арифметики.
· в тексте программы запрещается использовать операцию индексации!!!!!!!
Варианты индивидуальных заданий
№ варианта | Диапазон изменения размерности массива | Диапазон значений элементов | Что нужно сделать |
1 | от 8 до 200 | от 0 до 100 | Поменять местами 1-й положительный элемент с последним положительным элементом, 2-й - предпоследним и т.д. |
2 | от 6 до 100 | от –50 до 50 | Найти количество пар соседних элементов, которые имеют одинаковые абсолютные значения, но противоположные знаки, и вывести эти пары |
3 | от 5 до 200 | от 0 до 100 | Найти значение 3-го по величине элемента и значения всех элементов массива, которые его превышают, заменить на найденное значение. |
4 | от 6 до 100 | от –50 до 50 | Заменить все элементы с положительными значениями абсолютным значением отрицательного элемента с максимальным абсолютным значением |
5 | от 6 до 200 | от –50 до 50 | Подсчитать количество пар соседних элементов с одинаковыми значениями и вывести эти пары на экран |
6 | от 5 до 160 | от –100 до 100 | Во всех последовательностях положительных чисел ограничить значения тех элементов, абсолютное значение которых ниже абсолютного среднего для этой последовательности. |
7 | от 7 до 100 | от –100 до 100 | Заменить каждый элемент на среднее арифметическое его и его соседей слева и справа(для граничных элементов брать лишьсам элементи существующего соседа). |
8 | от 8 до 100 | от –100 до 100 | Найти ту непрерывную последовательность положительных чисел, сумма элементов в которой максимальная. |
9 | от 3 до 200 | от –50 до 50 | Во всех последовательностях отрицательных чисел поменять местами элементы с максимальным и минимальным значениями. |
10 | от 5 до 200 | от –100 до 100 | Во всех последовательностях положительных чисел ограничить снизу значения тех элементов, значения которых меньше среднего для этой последовательности. |
11 | от 3 до 200 | от –50 до 50 | Подсчитать количество пар соседних элементов, которые имеют противоположные знаки и вывести эти пары. |
12 | от 5 до 200 | от –50 до 50 | Для каждого положительного элемента определить, есть ли в массиве отрицательный элемент с противоположным значением; если да, заменить эти элементы на 0. |
13 | от 9 до 100 | от –100 до 100 | Разместить все элементы с положительными значениями в левой части массива, элементы с отрицательными значениями — в правой, а нули — между ними. |
14 | от 4 до 200 | от 0 до 100 | Найти непрерывный участок из 10 элементов, который имеет наибольшее среднее значение элементов. |
15 | от 6 до 100 | от –100 до 100 | Ограничить значения всех элементов, абсолютные значения которых превышают среднее для положительных и отрицательных элементов. |
16 | 4 до 100 | от –50 до 50 | Вывести начальные индексы всех непрерывных знакопеременных последовательностей чисел. |
17 | от 8 до 200 | от 0 до 100 | Подсчитать количество участков, которые образуют непрерывные последовательности чисел с неуменьшающимися значениями. |
18 | от 4 до 200 | от –50 до 50 | Найти из непрерывных последовательностей отрицательных чисел ту, которая имеет наибольшее абсолютное значение среднего арифметического ее элементов. |
19 | от 7 до 100 | от –100 до 100 | Во всех последовательностях отрицательных чисел изменить порядок элементов на противоположный и зеркально поменять последовательности местами. |
20 | от 3 до 100 | от –50 до 50 | Во всех последовательностях положительных чисел изменить порядок элементов на противоположный. |
21 | от 3 до 200 | от 0 до 100 | Найти непрерывный участок из 10 элементов, сумма которых максимальна. |
22 | от 5 до 200 | от –50 до 50 | Вывести начальные индексы всех непрерывных последовательностей чисел с неувеличивающимися значениями. |
23 | от 7 до 100 | от –100 до 100 | Вывести начальные индексы всех непрерывных последовательностей неотрицательных чисел, длина которых больше 5 |
24 | от 4 до 100 | от –100 до 100 | Заменить все элементы с отрицательными значениями средним арифметическим значением всех положительных элементов. |
25 | от 8 до 200 | от –50 до 50 | Найти непрерывные участки, на которых сумма элементов равна 0, вывести участки на экран. |
26 | от 6 до 200 | от –50 до 50 | Определить среднюю длину непрерывных участков положительных чисел. |
27 | от 3 до 200 | от –50 до 50 | Подсчитать количество всех, непрерывных последовательностей положительных чисел, длина которых больше 7. |
28 | от 5 до 100 | от –100 до 100 | Разместить все элементы с нулевыми значениями в левой части массива, элементы с отрицательными значениями — за ними, а за ними — элементы с положительными значениями. |
29 | от 5 до 200 | от –100 до 100 | Во всех последовательностях положительных чисел заменить значения элементов с максимальным и минимальным значением на среднее для этой последовательности. |
30 | от 5 до 130 | от –100 до 100 | Заменить все элементы с отрицательным значением на значение минимального не равного 0 положительного элемента. |
31 | от 3 до 150 | от –100 до 100 | Для каждого положительного элемента определить, есть ли в массиве отрицательный элемент с противоположным значением; если это так, заменитьэти элементы на среднее всей последовательности. |
32 | от 8 до 200 | от 0 до 100 | Поменять местами 1-й отрицательный элемент споследнимотрицательным элементом, 2-й — предпоследними т.д. |
33 | от 6 до 150 | от –50 до 50 | Определить среднюю длинунепрерывныхучастков отрицательных чисел, заменить ею максимальныеи минимальные элементы каждойиз последовательностей. |
34 | от 3 до 180 | от –50 до 50 | Найти непрерывныйучастокиз 5 элементов, в котором сумма модулей элементов максимальна, заменитьэтотучасток элементами с противоположными значениями. |
35 | от 4 до 170 | от –100 до 100 | Найти из непрерывных последовательностей положительных чисел ту, что имеет наибольшее среднее значениеее элементов и вывести последовательность на экран. |
36 | от 5 до 180 | от –50 до 150 | Найти непрерывныйучасток, имеющий наибольшее количество положительных элементов, и вывести его. |
37 | от 3 до 150 | от –150 до 150 | Вовсех последовательностях положительных чисел элементы с максимальным и минимальным значениями заменить количеством элементов этой последовательности. |
38 | от 10 до 150 | от –150 до 100 | Найти ту непрерывную последовательность отрицательных чисел, сумма модулей элементов вкоторой максимальна и заменитьее нулями. |
39 | от 5 до 140 | от –100 до 100 | В отрицательных последовательностях ограничить значения всех элементов, превышающихпо модулю среднее для этой последовательности. |
40 | от 3 до 180 | от –150 до 150 | Подсчитать количество всіх, непрерывных последовательностей отрицательных чисел, длина которых меньше 5. |
5. Примеры решения задачи
П ример 1. Объявить массив целых чисел и заполнить его случайными значениями.
Пример 2. размер массива определяется в начале выполнения программы как случайное число в диапазоне 50—200; в тексте программы запрещается применять операцию индексации.
Общее задание для примера
№ варианта | Диапазон изменения размерности массива | Диапазон значений элементов | Что нужно сделать |
от 50 до 100 | от –50 до 50 | Во всех последовательностях отрицательных чисел ограничить значения тех элементов, абсолютное значение которых превышает абсолютное среднее для этой последовательности. |
ПРИМЕР 1
Розработка алгоритма
Схема алгоритма показана на рисунке ниже. В первой фазе выполнения программынеобходимо будет сформировать массив случайных чисел. Перед тем, как будем обращаться к датчику случайных чисел, необходимо его проинициализировать (блок 2). Далее организуем цикл со счетчиком (блок 3), в каждой итерации которого генерируется следующее случайное число и записывается в следующий элемент массива (блок 4). После окончания цикла заполнения массива выводим массив на экран (блок 5).
необходимо будет вычислять среднее значение последовательности, следовательно — подсчитывать количество элементов в ней. Для этоговводим переменную nn — счетчик элементов, нулевое значение этой переменной будет показывать, что у нас нет последовательности для обработки. В начале обработкиустанавливаем nn = 0 (блок 6).
Далее организуем цикл со счетчиком (блок 7), в котором перебираем элементы массива. Для каждого элемента в первую очередь проверяется его знак (блок 8). Если это отрицательный элемент, то это может быть первый или не первый элемент последовательности. Это можно определить, проверяя значение переменной nn: если она 0 — это первый элемент (блок 9). Для первого элементазапоминаем в переменной іb индекс начала последовательности, устанавливаем счетчик элементов nn в 1, а в переменную av записываем значение этого элемента (блок 10). Для не первого элементаувеличиваем счетчик на 1, а значение элемента суммируем со занчением переменной av (блок 11). Таким образом, переменная av у нас играет роль накопителя суммы элементов последовательности.
Если же очередной элемент последовательности положительный, то возникает вопрос — не является ли этот элемент первым положительным элементом после отрицательной последовательности? Это можно проверить по счетчику nn. Если элемент первый, то значение nn должно быть больше 0 (блок 12). Если нет, тонеобходимо обработать ту отрицательную последовательность, которая только что закончилась. Для обработкив первую очередь получаем среднее значение (блок 13). Потом организуем цикл (блок 14) со счетчиком j, который изменяется от іb (индекс начала отрицательной последовательности, которыйсохранили раньше) до і–1 (і — это индекс первого положительного элемента после отрицательной — это индекс первого положительного элемента после отрицательной последовательности, следовательно і–1 — индекс последнего элемента отрицательной последовательности). В каждой итерации этого цикласравниваем j -й элемент массива со средним значением av (блок 15).
Если значение элемента меньше среднего (т.е. больше по абсолютному значению), то среднее значение записывается в j -й элемент (блок 16), если же нет — ничего не происходит. По выходу из циклаустанавливаем счетчик nn в 0 (блок 17), как признак того, что у нас нет необработанной последовательности. Для не первого положительного элемента нет необходимости что-либо делать.
После выхода из того цикла, который начался в блоке 7, необходимо проверить, не осталась ли у нас необработанная последовательность и, если да, обработать ее. На схеме алгоритмапоказали это одним блоком 18, действия, которые выполняются в этом блоке тождественны действиям, которые детально показаны в блоках 12–17.
По окончанию обработкивыводим массив-результат (блок 19) и заканчиваем программу.