Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
39
Добавлен:
28.03.2015
Размер:
188.42 Кб
Скачать

Проверка упорядоченности массива

Иногда возникает необходимость проверки упорядоченности массива — все ли элементы расставлены в порядке возрастания. В листинге 3.7 приведена программа, которая попарно анализирует соседние элементы массива. Здесь мы ввели переменную Flag, в которую при нахождении нарушения упорядоченности в массиве (если текущий элемент больше последующего) заносится значение 1 (первоначально значение этой переменной инициализируется нулем). Это и является индикатором при формировании сообщения о неупорядоченности массива чисел. В противном случае, если переменнаяFlag остается равной нулю, то можно сказать, что массив упорядочен. Блок-схема алгоритма представлена на рис. 3.3.

Рис. 3.3. Блок-схема к программе листинга 3.7

Листинг 3.7. Анализ упорядоченности элементов массива

#include <iostream>

using namespace std;

#include <conio.h>

#include <math.h>

#define N 10

#define NM 11

void main()

{

int A[NM];

int J,Flag;

for (J=1; J<= N; J++)

{ A[J]=rand()%5;

cout <<"\n"<<A[J]; }

Flag=0;

for (J=1; J<= N-1;J++)

{

if ( A[J]>A[J+1] )

{

Flag=1;

break;

}

}

if (Flag ==0 )

cout <<"\nМассив упорядочен";

else

cout <<"\nМассив неупорядочен";

_getch();

}

Обмен значений массива

Обмен значений элементов массива достаточно часто встречается при работе с массивами. В программе, приведенной в листинге 3.8, производится следующий вариант обмена значений: первый элемент меняется значением с последним, второй с предпоследним и т. д. На рис. 3.4 показана данная схема обмена.

Рис. 3.4. Блок-схема обмена

Сам алгоритм несложен, а его идея заключается в том, что сначала вычисляется количество обменов. Для этого следует число элементов массива поделить на 2 (выполнить целочисленное деление). После этого в цикле по числу обменов выполняется обмен значений элементов массива. Блок-схема алгоритма представлена на рис. 3.5.

Рис. 3.5. Блок-схема к программе листинга 3.8

Листинг 3.8. Обмен значений элементов массива

#include <iostream>

using namespace std;

#include <conio.h>

#include <math.h>

#define N 7

#define NM 8

void main()

{

int A[NM];

int J,B,L;

for (J=1; J<= N; J++)

{ A[J]=rand()%50;

cout <<"\n"<<A[J]; }

L= N / 2;

for (J=1; J<= L;J++)

{

B= A[J];

A[J]= A[N-J+1];

A[N-J+1]= B;

}

cout <<"\n";

for (J=1; J<=N;J++)

cout <<"\n"<<A[J];

_getch();

}

Суммирование соседних элементов массива

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

В листинге 3.9 приведена необходимая программная разработка. В начале программы в переменную SumMaxзаносится сумма первых двух элементов, а далее последовательно сравниваются сSumMax суммы следующих пар элементов. В случае когда сумма элементов очередной пары оказывается большеSumMax, то это приводит к обновлениюSumMax и фиксированию индекса первого элемента пары в переменнойJmax. В конце программы значениеJmax выводится на печать. Блок-схема алгоритма представлена на рис. 3.6.

Листинг 3.9. Поиск пары соседних элементов с максимальной суммой

#include <iostream>

using namespace std;

#include <conio.h>

#include <math.h>

#define N 15

#define NM 16

void main()

{

int A[NM];

int J,Jmax,SumMax;

for (J=1; J<= N; J++)

{ A[J]=rand()%100;

cout <<A[J]<<" ";}

SumMax= A[1]+A[2];

Jmax=1;

for (J=2; J<=(N-1);J++)

{

if (( A[J]+A[J+1] ) > SumMax)

{

Jmax=J;

cout <<"Jmax ="<<Jmax;

SumMax= A[J]+A[J+1];

}

}

cout <<"\nJmax ="<<Jmax;

_getch();

}

Рис. 3.6. Блок-схема к программе листинга 3.9

Соседние файлы в папке файлы по информатике