Типовые действия с массивами
1. Инициализация массива
Инициализация массива – это присваивание элементам массива начальных значений.
Присваивание всем элементам массива одного и того же значения осуществляется в цикле. Например, чтобы всем элементам массива a присвоить значение 0, можно воспользоватся алгоритмом изображенный на рис.
for(i=0;i<n;i++)
a[i]=0;
// или с помощью цикла while
i=0;
while (i<n)
{
a[i]=0;
i=i+1;
}
В представленном алгоритме все элементы массива в цикле последовательно инициализируются значением – 0.
2. Перестановка элементов массива.
Пример: Поменять местами заданный элемент массива x[k] с последующим.
При решении этой задачи необходимо учитывать, что если заданный элемент массива x[k] является последним, то обмен выполнить не возможно, поскольку последующий элемент отсутствует.
if(k == n-1)
puts("Обмен не возможен.");
else
{
tmp=x[k];
x[k]=x[k+1];
x[k+1]=tmp;
}
При перестановке с предыдущим элементом, обмен невозможен если заданный элемент является первым (k=0).
3. Вычислительные действия.
Например: вычисление суммы элементов массива.
#include <stdio.h>
#include <conio.h>
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
int sum = 0;
for ( i = 0; i < 5; ++i)
{
sum += arr[i];
}
printf("%d", sum);
getch();
return 0;
}
4. Поиск нужного элемента
При поиске элементов, обладающих заданным свойством, необязательно просматривать все элементы массива. Например, требуется определить, есть ли в массиве хотя бы один нулевой элемент. Для ответа на этот вопрос, достаточно в цикле просматривать элементы массива до тех пор, пока не закончится массив или не встретится равный нулю элемент. Если, например, уже третий элемент равен нулю, то остальные элементы просматривать нет необходимости.
В таких случаях для просмотра массива обычно используется оператор цикла while со сложным условием. Графическая схема для рассматриваемого примера изображена на рисунке. После цикла достаточно проверить, чему равно i. Если окажется, что i=n, т.е. были просмотрены все элементы, то в массиве нет нулевых элементов.
i=0;
while(i<n && a[i]!=0) i=i+1;
If(i == n)
puts("В массиве нет нулевых элементов");
else
puts("В массиве есть нулевой элемент");
5. Копирование массивов
k=0;
for(i=in;i<ik;i++)
{
y[k]=a[i];
k++;
}
В зависимости от параметров in и ik, в массив y[ ] копируются элементы из исходного массива a[ ]. Так для копирования всех элементов массива a[ ] необходимо задать in=0, ik=n (n – количество элементов массива a[ ]). При копировании части массива, например с 3 по 9, принимаем in=2 (поскольку нумерация элементов массива в С++, начинается с нуля) и ik=9.
Сортировка элементов одномерного массива
Сортировка –это расстановка элементов некоторого списка в заданном порядке.
Метод пузырька
Сначала сравниваем последний элемент с предпоследним. Если они стоят неправильно, то
меняем их местами. Далее так же рассматриваем следующую пару элементов и т.д. Когда мы обработали пару (A[0], A[1]), минимальный элемент стоит на месте A[0]. Это значит, что на следующих этапах его можно не рассматривать.
Сделав N-1проходов, мы установим на место элементы с A[0]по A[N-2]. Это значит, что последний элемент, A[N-1], уже тоже стоит на своем месте (другого у него нет).
#include <stdio.h>
const int N = 10;
main()
{
int i, j, A[N], c;
// здесь надо ввести массив A
for ( i = 0; i < N-1; i ++ ) // достаточно поставить N-1 элементов
for ( j = N-2; j >= i; j - - ) // идем с конца массива в начало
if ( A[j] > A[j+1] ) // если они стоят неправильно, ...
{
c = A[j]; A[j] = A[j+1]; // переставить A[j] и A[j+1]
A[j+1] = c;
}
printf("\n Отсортированный массив:\n");
for ( i = 0; i < N; i ++ )
printf("%d ", A[i]);
}