ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 08.05.2025
Просмотров: 29
Скачиваний: 0
Лекция 5. Обработка массивов в языке Си++
Массив структурированный тип данных ,состоящий из фиксированного числа элементов одного типа. На рис. 5.1 представлен массив вещественных чисел X.
12.1 |
0.13 |
-1,5 |
0 |
21.9 |
-3.7 |
5.0 |
121.7 |
0-й |
1-й |
2-й |
3-й |
4-й |
5-й |
6-й |
7-й |
элемент элемент элемент элемент элемент элемент элемент элемент |
|||||||
массива |
массива |
массива |
массива |
массива |
массива |
массива |
массива |
Рисунок 5.1: Пример массива
Одномерный массив описывают так:
тип имя_переменной [n];
где n количество элементов в массиве ,причем нумерация начинается с нуля :от 0до n 1. Например:
int х[10]; float g[25];
Обратиться к элементу одномерного массива можно, указав имя массива и номер элемента в квадратных скобках.
Например,
|
-1 |
3 |
2 |
|
0 |
-8 |
5 |
|
1 |
|
-2 |
|
0 |
1 |
2 |
|
3 |
4 |
5 |
|
6 |
|
7 |
|
x[0] |
|
|
|
|
x[4] |
|
|
|
|
|
Двумерный массив (матрицу) можно объявить так: |
|
|
|
|
|
||||||
тип имя_переменной [n][m]; |
|
|
|
|
|
|
|
|
|||
где n количество строк от( |
0до |
n-1), m количество столбцов |
от( до0 |
m-1). |
Например, double m[3][4];
Обращаются к элементу матрицы, указывая последовательно в квадратных скобках соответствующие индексы:
Например, a[1][2] элемент матрицы a,находящийся в первой строке и втором столбце . Массиву, как и простой переменной, можно присвоить начальные значения в момент его описания.
Например,
float a[5]={1.2,(float)3/4, 5./6,6.1,7.8};
5.1. Ввод элементов массива
Блок-схема ввода алгоритма элементов массива представлена на рис. 5.2. Реализация
алгоритма на С++ представлена ниже.
//Первая версия программы ввода элементов массива. #include <stdio.h>
#include <math.h> int main()
{
float x[10]; int i,n; printf("\n N="); scanf("%d",&n);
printf("\n Введите массив X \n"); for(i=0;i<n;i++) scanf("%f",&x[i]);
}
Рисунок 5.2: Блок-схема ввода массива
//Вторая версия программы ввода элементов массива. #include <stdio.h>
#include <math.h> int main()
{
float x[10],b; int i,n; printf("\n N="); scanf("%d",&n);
printf("\n Введите массив X \n"); for(i=0;i<n;i++)
{
scanf("%f",&b);
x[i]=b;
} }
//Третья версия программы ввода элементов массива. float x[10];
int i,n; cout<<"\n N="; cin>>n;
cout<<"\n Vvedite massiv X \n"; for(i=0;i<n;i++)
cin>>x[i];
5.2. Вывод элемен тов массива
Блок-схема вывода алгоритма элементов массива представлена на рис. 5.3.
i=0;i<N;i++
Вывод x[i]
Рисунок 5.3: Блок-схема вывода элементов массива
Реализация алгоритма на С++ представлена ниже. При организации вывода элементов
массива можно использовать специальные символы \t \n. printf("\n Массив X\n");
for(i=0;i<n;i++)
printf("%g\t",x[i]);
printf("\n"); cout<<"\n Massiv X \n";
for(i=0;i<n;i++)
cout<<x[i]<<"\t";
5.3. Основные алгори тмы обрабо тки массивов
5.3.1 Алгоритм вычисления суммы элементов массива
Дан массив X, состоящий из n элементов. Найти сумму элементов этого массива. Процесс накапливания суммы элементов массива и практически ничем не отличается от суммирования значений некоторой числовой последовательности. Переменной S присваивается значение равное нулю, затем последовательно суммируются элементы массива X. Блок-схема алгоритма расчета суммы приведена на рис. 5.4.
Рисунок 5.4: Блок-схема нахождения
суммы элементов массива
Реализация на C++. for(s=i=0;i<N;i++)
s+=X[i];
//Это можно записать и так //for(s=i=0;i<N;s+=X[i],i++);
5.3.2 Алгоритм вычисления произведения элементов массива
Дан массив X, состоящий из n элементов. Найти произведение элементов этого массива . Решение этой задачи сводится к тому, что значение переменной Р, в которую предварительно была записана единица, последовательно умножается на значение i го элемента массива . Блок-схема алгоритма приведена на рис. 5.5.
Рисунок 5.5: Алгоритм нахождения
произведения элементов массива
Реализация на C++. for(P=1,i=0;i<n;i++)
P*=X[i];
5.3.3. Поиск максимального элемента и его номера
Алгоритм решения задачи следующий. Пусть в переменной с именем max хранится значение максимального элемента массива, а в переменной с именем nmax его номер .Предположим , что нулевой элемент массива является максимальным и запишем его в переменную nax, а в nmax его номер то( есть ноль ).Затем все элементы ,начиная с первого ,сравниваем в цикле с максимальным. Если текущий элемент массива оказывается больше максимального, то записываем его в переменную max, а в переменную nmax текущее значение индекса i. Процесс определения максимального элемента в массиве изображен при помощи блок- схемы на рис. 5.6.
Рисунок 5.6: Поиск максимального элемента массива и его
номера
Реализация алгоритма в С++. for(max=X[0],nmax=0,i=1;i<n;i++)
if (x[i]>max)
{
max=x[i]; nmax=i;
}
Алгоритм поиска минимума будет отличаться знаком в блоке сравнения. Значительно более интересной является задача поиска минимального (максимального) элемента массива, среди элементов массива, удовлетворяющих некоторому условию. Рассмотрим на примере поиска
минимального значения, среди положительных элементов массива. for(i=k=0;i<n;i++)
//Если элемент положительный, if (x[i]>0)
{
//то увеличиваем количество положительных элементов на 1. k++;
//Если это первый положительный элемент, то объявляем его
//минимальным, иначе
if (k==1) {min=x[i];nmin=i;}
// сравниваем его с минимальным else if (x[i]<min)
{
min=x[i]; nmin=i;
}
}
5.3.4. Алгоритм удаления элемента из массива
Пусть необходимо удалить из массива, состоящего из семи элементов, четвертый по номеру элемент. Для этого необходимо выполнить смещение элементов.
x[3]=x[4];x[4]=x[5];x[5]=x[6];
Блок схема этого процесса представлена на рис. 5.7.
Рисунок 5.7: Удаление
четвертого по счету элемента
Блок-схема удаления элемента с номером M из массива X, в котором N элементов изображена на рис. 5.8.
Рисунок 5.8: Блок-схема удаления
элемента из массивов
Реализация в С++. for(i=M;i<N-1;i++)
x[i]=x[i+1]; N--
После удаления следует учитывать, что изменилась нумерация (все номера уменьшились на 1) элементов, начиная с номера M, поэтому если удалять несколько элементов подряд не надо переходить к следующему.
ЗАДАЧА 5.1. Удалить элементы с 4-го по 8-й в массиве из N элементов. Блок-схема представлена на рис. 5.9.
Рисунок 5.9: Блок-схема решения задачи 5.1
Реализация блок-схемы в С++. for(j=1;j<=5;j++,N--)
for(i=3;i<=N-2;i++) X[i]=X[i+1];
Программа решения задачи 5.1 приведена ниже. int main()
{
floxt x[20]; int i,j,n; cout<<"n="; cin>>n;
cout<<"Massiv x\n"; for(i=0;i<n;i++)
cin>>x[i];
for(j=1;j<=5;j++)
{
for(i=3;i<=n-2;i++) x[i]=x[i+1];
n--;
}
cout<<"Massiv x\n"; for(i=0;i<n;i++)
cout<<"x("<<i<<")="<<x[i]<<"\t";
cout<<endl; return 0;
}
5.3.5. Упорядочение элементов массива
Алгоритм сортировки выбором по возрастанию1 приведен в виде блок-схемы на рис. 5.10. Идея алгоритма заключается в следующем. В массиве состоящем из n элементов ищем самый большой элемент и меняем его местами с последним элементом. Повторяем алгоритм поиска максимального элемента, но последний (n-1)-й элемент не рассматривается, так как он уже
1 Для сортировки по убыванию надо поменять в блок-схеме знак «>» на знак «<».
занял свою позицию. Найденный максимальный элемент меняем местами с (n-2)-м элементом. Описанную выше операцию поиска проводим n-1 раз, до полного упорядочивания элементов в массиве.
Рисунок 5.10: Алгоритм сортировки выбором
Реализация алгоритма упорядочивания на С++ int main()
{
float b,max,a[20]; int i,j,n,k,nom; cout<<"n="; cin>>n;
cout<<"Massiv a\n"; for(i=0;i<n;i++)
cin>>a[i];
k=n; for(j=0;j<=k-2;j++)
{
max=a[0];nom=0;
for(i=1;i<k;i++) if (a[i]>max)
{
max=a[i];
nom=i;
}
b=a[k-1]; a[k-1]=a[nom]; a[nom]=b;
k--;
}
cout<<"Massiv a\n"; for(i=0;i<n;i++)
cout<<"a("<<i<<")="<<a[i]<<"\t";
cout<<endl; return 0;
}
Сортировка методом пузырька. Сортировка пузырьковым методом является наиболее известной. Ее популярность объясняется запоминающимся названием, которое происходит из-за подобия процессу движения пузырьков в резервуаре с водой, когда каждый пузырек находит свой собственный уровень, и простотой алгоритма. Сортировка методом «пузырька» использует метод обменной сортировки и основана на выполнении в цикле операций сравнения и при необходимости обмена соседних элементов. Рассмотрим алгоритм пузырьковой сортировки более подробно.
Сравним нулевой элемент массива с первым, если нулевой окажется больше первого, то поменяем их местами. Те же действия выполним для первого и второго, второго и третьего, i го и (i+1) го предпоследнего, и последнего элементов В. результате этих действий самый большой элемент станет на последнее (n-1)-е место. Теперь повторим данный алгоритм сначала, но последний (n-1)-й элемент, рассматривать не будем, так как он уже занял свое место. После проведения данной операции самый большой элемент оставшегося массива станет на (n 2)е- место .Так повторяем до тех пор ,пока не упорядочим весь массив .Блок - схема сортировки элементов массива по возрастанию2 представлена на рис. 5.11.
Рисунок 5.11: Упорядочивание массива по возрастанию методом пузырька
2 Для сортировки по убыванию надо поменять в блок-схеме знак «>» на знак «<».