КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ



 

Одномерные массивы

 

В программах средней и высокой сложности используется, как правило, большое количество переменных. Присвоение имени каждой из них – процесс трудоемкий. Поэтому были предложены массивы – последовательности однотипных величин. Каждый элемент массива есть переменная заданного типа. Тип присваивается при описании массива и делается это тем же способом, что и описание простых переменных. Отличие состоит в указании количества элементов массива в конце описания в квадратных скобках. Например:

 

float A[10]; //описание массива из 10 вещественных переменных

 

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

 

A[0], A[1], A[2], …, A[9].

 

В программе это выглядит, например, так:

 

x = A[2]; //x присвоено значение 3-го по счету элемента массива A

 

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

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

 

int b[5] = {3, 2, 1}; // b[0]=3, b[l]=2, b[2]=l, b[3]=0, b[4]=0

int a[5] = {0};          //обнуление всего массива

 

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

 

float a [10]; //размерность задана целой положительной константой

const int n = 10; // размерность задана с помощью именованной

int marks[n];   // константы

int b[] = {3, 2, 1};    // размерность массива равна трем

 

При обработке массивов удобно использовать операторы цикла. В следующем примере подсчитывается сумма элементов массива:

 

const int n = 10;

int i, sum;

int marks[n] = {3, 4, 5, 4, 4};

for (i = 0, sum = 0; i<n; i++)

 sum += marks[i];

cout << RUS("Сумма элементов: ") << sum;

 

Аналогично выполняется ввод и вывод элементов массива, например, с помощью объектов cin и cout:

 

const int N=5;

int i,massiv[N]; //описание массива

cout<<RUS("Введите 5 целых чисел\n");

for(i=0;i<N;i++) cin>>massiv[i]; //ввод массива

for(i=0;i<N;i++) //вывод массива

cout<<"\n massiv["<<i<<"] = "<<massiv[i]; //вывод массива

 

 

Программа пузырьковой сортировки

 

Часто требуется расположить элементы массива по возрастанию или по убыванию. Это можно сделать с помощью следующей программы:

 

const int N=5;

int i,j,t,massiv[N];

cout<<RUS("Введите одномерный массив целых чисел:\n");

for(i=0;i<N;i++)cin>>massiv[i]; //ввод массива

for(i=N-1;i>0;i--)    //начало сортировки

   for(j=0;j<i;j++)

     if(massiv[j]>massiv[j+1])

     {

       t=massiv[j];           //тело внутреннего цикла

       massiv[j]=massiv[j+1];   //

       massiv[j+1]=t;       //

     }  //конец сортировки

cout<<RUS("\nМассив упорядоченный по возрастанию:\n");

for(i=0;i<N;i++) //вывод массива

cout<<"\nmassiv["<<i<<"] = "<<massiv[i];  //вывод массива

 

Собственно алгоритм выделен комментариями "начало сортировки" и "конец сортировки". Его суть заключается в последовательной перестановке соседних элементов массива с целью продвижения самого большого элемента в конец массива. Этот процесс поясняется на рис. 1.1. Один проход внутреннего цикла for …(по переменной j) перемещает в конец 1 элемент. На следующем проходе, благодаря уменьшению на 1 переменной внешнего цикла (i), установленный в конце массива элемент уже не рассматривается. Его рассмотрение не изменило бы результата, но выполнение операций требует времени, которое тратить впустую нецелесообразно. Так после выполнения N-2 внутренних циклов массив будет упорядочен по возрастанию.

Тело внутреннего цикла алгоритма решает задачу взаимной перестановки двух элементов массива. Задача решается перемещением значения переменных через третью вспомогательную переменную (t).

                         
j:
 
0
   
3
 
4
 
0

 


2 10 6 1 3
2 6

4
3
2
1
j:
10

1 3

 

 

t
t

 

Рис. 1.1

 

Перемещение самого большого элемента по массиву подобно всплытию пузырька воздуха в воде. Это и определило название алгоритма.

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

 

Домашнее Задание

 

Изучите теоретические сведения и подготовьте текст программы по заданию на лабораторную работу. Программа записывается в «черновом» варианте в лекционной тетради. Комментарии должны составлять не менее 10% от текста. Студенты, не выполнившие домашнего задания, не допускаются к выполнению лабораторной работы.

 


Дата добавления: 2018-11-24; просмотров: 235; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!