Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа_4_Одномерные массивы.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
133.12 Кб
Скачать
  1. Объединение массивов в один с чередованием элементов исходных массивов

Объединить два массива А и В, содержащих по n элементов, в один массив С, который будет содержать 2n элементов, т.е. получить массив С=(a1,b1,a2,b2,….,an,bn). Заметим, что индекс элемента массива С зависит от индекса пересылаемого в него элемента массива А или В: c2i-1=ai; c2i=bi. Таким образом, организовав цикл по параметру I от 1 до n, и выполняя для каждого I эти присваива­ния, мы решим задачу.

Используемые переменные:

Исходные данные:

A,В –массивы, размеров N;

N – количество элементов в массиве А и в массиве В;

Результат:

C- массив размером 2N;

Вспомогательные переменные:

I – индекс элементов массивов А и В.

Схема алгоритма изображена на рис 6.

Программный код:

FOR I := 1 TO N DO begin C[2*I-1] := A[I]; C(2*I) = B(I); end;

Writeln(‘Массив С’);

FOR I := 1 TO N*2 do Writeln(‘C[I]);

  1. Инвертировать массив с

Требуется изменить порядок следования элементов массива С, состоящего из n элементов, на обратный, используя одну вспомогательную переменную.

Сначала необходимо поменять местами первый и последний элементы, используя вспомогательную переменную Р. Для этого перешлем ai в Р (Р=а1), затем в а1 перешлем an (a1=an) и далее значение а1, которое находится в Р, перешлем в an (an=P). Также поступим с элементами a2 и an-1, т.е. вторым и предпоследним, и т.д. пока не дойдем до середины массива. Последними элементами, которые нужно поменять местами, будет an/2 и an/2+1, если n – четное число, и a[n/2] и a[n/2+2], если n – нечетное, т.е. цикл по I в общем случае можно организовать от I=1 до [n/2].

Используемые переменные:

Исходные данные:

C– массив размером С

N – количество элементов в массиве

Результат:

С - инвертированный исходный массив

Вспомогательные переменные:

P – промежуточная (вспомогательная) переменная

I – индекс элемента массива

Программный код:

FOR I := 1 TO N/2 DO begin P := C[I]; C[I] := C[N-I+1]; C[N-I+1] := P; end;

  1. Формирование массива В из элементов массива А, удовлетворяющих заданному условию (Ai > T)

Требуется из данного массива А, состоящего из n элементов, выбрать эле­менты, удовлетворяющие данному условию (для конкретности, условию Ai>T), и сформировать из них массив В.

Особенностью решения этой задачи является то, что индексы элементов масси­вов А и В не совпадают, т.к. не все элементы массива А включаются в массив В. Следовательно, для обозначения индекса элементов массива В нужно предусмот­реть другую переменную (К), значения которой будем изменять на 1 перед занесе­нием в массив В нового значения. До входа в цикл нужно присвоить переменной К значения ноль (К=0)

Используемые переменные:

Исходные данные:

A – исходный массив размером N

Т – заданное значение для проверки условия включения элемента массива А в массив В

N – количество элементов в исходном массиве

Результат:

В – массив размером не больше N

К – количество элементов в массиве В

Вспомогательные переменные:

I – индекс элементов массива А

Схема алгоритма изображена на рис.8.

Программный код:

K := 0;

FOR I := 1 TO N DO IF A[I] > T THEN begin K := K + 1; B[K] := A[I]; end;

  1. Поиск максимального элемента в массиве а с запоминанием индекса

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

В качестве начального значения максимального элемента искомой переменной МАХ присваивается значение первого элемента в массиве, а переменной NUM значение 1.

Используемые переменные:

Исходные данные:

N – количество элементов в массиве

А – текущий массив размером N

Результат:

MAX – значение максимального элемента

NUM – индекс максимального элемента

Вспомогательные переменные:

I – индекс элемента массива

Схема алгоритма изображена на рис.9.

Программный код:

MAX := A[1]; NUM := 1;

FOR I := 1 TO N DO IF A[I] > MAX THEN begin MAX := A[I]; NUM := I; end;

  1. Поиск заданного элемента в массиве.

Определить, есть ли в заданном массиве, состоящем из N элементов, элемент, равный L.

В цикле последовательно сравниваются элементы с заданным значением L. Если условие выполняется, изменяются значения переменных FLAG и NUM и про­исходит досрочный выход из цикла.

После выхода из цикла проверяется значение переменных FLAG. Если ее зна­чение изменилось в ходе выполнения цикла, на печать выводится порядковый номер искомого элемента, в противном случае сообщение: “Элемента равного L нет”.

Используемые переменные:

Исходные данные:

N – количество элементов массива

L – значение, которое ищется в массиве

А[I] – массив размером N

Результат:

R$ - строковая переменная, для вывода сообщения «Элемента равного L нет»

NUM – порядковый номер искомого элемента

Вспомогательные переменные:

FLAG – переменная-признак, которая изменяет свое значение, если элемент найден.

Программный код:

FLAG := 0;

R$ := ‘Элемента равного L нет’

FOR I := 1 TO N DO

IF А[I] := L THEN begin

FLAG := 1; NUM := I; Continue;

end;

IF FLAG = 1 THEN begin

Writeln (‘Элемент равный’, L, ‘в массиве есть’);

Writeln (‘Его порядковый номер’, NUM);

End

ELSE Writeln (R$);

  1. Упорядочивание массива.

Задача упорядочения элементов массива (сортировка) по возрастанию или по убыванию – одна из наиболее интересных и широко изучаемых проблем в программировании.

Существует несколько методов сортировки. Ниже рассматривается два метода, которые производят сортировку массива в оперативной памяти.

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

Рассмотрим сортировку элементов массива по возрастанию двумя методами.

Первый метод: Сортировка простым выбором.

1) В сортируемом массиве находят минимальный элемент и обменивают местами с элементом в начале массива

2) Остаток массива далее рассматривается как самостоятельный массив, в нем производится поиск наименьшего, и он меняется местами с первым элементом упорядоченного массива

3) Повторять 2), до тех пор, пока рассматриваемый массив не укоротится до одного элемента

4) Если длина массива N, то вся сортировка требует N-1 проходов по массиву.

Используемые переменные:

Исходные данные:

A – исходный массив размером N

N – размер массива

Результат:

A – массив размером N, упорядоченный по возрастанию

Вспомогательные переменные:

MIN – переменная для хранения промежуточного значения минимального элемента

K – индекс минимального элемента

I – индекс элемента массива

J –индекс элемента части массива, в которой имеется минимальный эле­мент

Схема алгоритма изображена на рис.11.

Программный код:

FOR I := 1 TO N-1 DO begin

MIN := A[I)];

For J := I+1 to N do

If A[J] >= MIN THEN begin MIN := A[J]; K := J; end;

A[K] := A(I); A[I] = MIN;

End;

Второй метод: Пузырьковая сортировка с признаком.

Обмен элементов в массиве производится между двумя соседними элементами массива.

После завершения первого прохода самый «тяжелый» элемент «падает» в нижний элемент.

«Легкие» значения медленно «всплывают» вверх как пузырьки, за один проход «легкое» данное не может подняться больше чем на один элемент.

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

Используемые переменные:

Исходные данные:

A – исходный массив размером N

N – размер массива

Результат:

А – массив размером N, упорядоченный по возрастанию

Вспомогательные переменные:

I – индекс элемента массива

FLAG – переменная-признак, изменяющая значение, если сделана перестановка

Схема алгоритма изображена на рис.12

Программный код:

FLAG := 1;

WHILE FLAG <>0 do begin

FLAG := 0;

FOR I=1 TO N-1 do

IF A[I] > A[I+1] THEN begin H := A[I]; A[I] := A[I+1]; A[I+1] := H; FLAG := 1; End;

End;