====%%(wacko wrapper=text wrapper_align=center) Одномерные массивы. %%==

**Здесь и далее по умолчанию массив будет полагаться одномерным.**
**//Подмассивом // //a//[//i..j//] будет называться часть массивa //a// с индексами от //i// до //j// включительно.**

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

%%(wacko wrapper=text wrapper_align=center) ===== Задачи == %%

**0.**
a) Напишите функцию //swap//, которая меняет местами две целые величины. ##(2)##
b) Напишите функцию **##void swap(int *a, int i, int j)##**, которая меняет местами элементы **//a//**[**//i//**] и **//a//**[**//j//**]. ##(1)##

 
**1.**
Выведите за один проход:
a) Все четные элементы массива ##(1)##
b) Все элементы массивов, стоящие на четных местах (не используя операторов выбора) ##(1)##
c) Все элементы массива в обратном порядке. ##(1)##
d) Два наибольших элемента массива ##(1)##
e) Два наибольших значения элементов массива ##(1)##
f) Число элементов, больших предыдущего. ##(1)##
g) Среднее арифметическое элементов массива. ##(1)##
h) Число локальных экстремумов в массиве (элемент называется локальным экстремумом, если он больше или меньше обоих своих соседей). Начальный и конечный элементы не считаются. ##(1)##
i) Число элементов, больших всех предыдущих. (начальный элемент полагаем подходящим всегда) ##(2)##
j) Все ли элементы массива равны. ##(2)##


**2.** ##(2)##
Напишите функцию **##int search(int *a, int n, int val)##**, которая находит в массиве **//arr//** длины **//n//** элемент, значение которого равно **//val//**. Функция возвращает индекс найденного элемента или -1, если такого элемента в массиве нет. Попробуйте реализовать данный алгоритм без **//if//** внутри цикла.


**3.**
a) Переверните заданный массив **//a//**. ##(2)##
b) Переверните заданный подмассив **//a//**[**//i..j//**] ##(2)##

 
**4.**
  a. Сдвиньте **//a//** по кругу на одно место вправо.
  a. Сдвиньте **//a//** по кругу на одно место влево.
  a. Сдвиньте подмассив **//a//**[**//i..j//**] по кругу на одно место вправо.
  a. В заданном массиве **//a//**[**//n//**] для заданного **//k//** | 0 < **//k//** < **//n//** поменяйте местами подмассивы **//a//**[0..**//k//**] и **//a//**[**//k//**+1..**//n//**-1]


**5.**
  a. Расположите все отрицательные элементы массива в его начале.
  a. Напишите функцию **##int separate(int *a, int n)##**, которая перестраивает массив **//a//** длины **//n//** следующим образом: Пусть в исходном массиве **//a//**[0] = **//x//**. Тогда в перестроенном массиве сперва должны идти элементы меньшие **//x//** (в любом порядке) , затем **//x//** (это бывший arr[0], пусть его новый индекс будет равен **//k//**, т. е. в перестроенном массиве **//a//**[**//k//**] = **//x//**), затем все остальные (т .е. большие либо равные **//x//** также в любом порядке) . Функция должна возвращать **//k//**.
  a. (вариант задачи о голландском флаге) Расположите все элементы массива неотрицательных чисел **//a//**[**//n//**], следующим образом: сперва числа кратные трем, затем дающие остаток один при делении на три, а затем дающие остаток два при делении на три.


**6.**
Даны две последовательности: **//x//**[**//n//**] и **//y//**[**//k//**]. Выясните, можно ли получить вторую, путем вычеркивания некоторых элементов из первой.


**7.**
Дан массив **//a//**[**//n//**] и массив **//a1//**[**//n//**-1], полученный удалением из **//a//** одного элемента и перемешиванием остальных. Выведите удаленный элемент.

----
адрес оригинала: ((/OnerXaum/ОднМассивы))