Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Программирование алгоритмов сортировки динамических массивов




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

Для динамических массивов задается лишь тип элементов массива без указания их количества. Например,

   type tVect = array of real48;

    Var a, b: tVect;

Память, необходимая таким массивам, выделяется динамически с помощью процедуры SetLength (имя массива, длина-1). Минимальное значение инициализации динамического массива равно 1. Индексы изменяются от 0 до (длина – 1). Для определения границ динамического массива целесообразно использовать функции Low (имя массива) и High (имя массива).

  Процедуру SetLength в процессе выполнения приложения можно вызывать произвольное количество раз. При каждом таком вызове автоматически создается новый массив и в него копируется содержимое старого (при этом старый массив удаляется). Каждый новый вызов приводит к изменению длины массива. Если при вызове SetLength() длина массива увеличивается, то добавленное место заполняется «мусором», а если уменьшается, то содержание отброшенных элементов теряется.

Переменные, объявленные в качестве динамических массивов, являются ссылками. Поэтому данные необходимо удалять из памяти одним из трех способов: SetLength (имя массива, 0), <имя массива>:= Nil или Finalize (имя массива).

    Для работы с динамическими массивами можно использовать функцию

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

    При объявлении многомерных динамических массивов конструкцию array of указывают необходимое число раз. Например,

Type

       tCube = array of array of array of real;

Var

  Cube: tCube;

Для инициализации такого массива нужно указать SetLength (Cube,4,4,4).

Пример 16. Упорядочить динамический массив методом простого обмена (методом “пузырька”).

Program Example_16;

{$APPTYPE CONSOLE}

Uses SysUtils;

type tAr = array of real48;

Var

Ar: tAr; Flag:boolean;

i,n:byte; temp:real48;

Begin

write('Введите размер массива:');

Readln(n);

Setlength(Ar,n);

writeln('Введите ',n,' элементов массива:');

for i:=0 to n-1 do

read(Ar[i]);

Flag:=False;

While not Flag do

begin

Flag:=True;

for i:=0 to n-2 do

   if Ar[i]>Ar[i+1] then

                              begin

                              temp:=Ar[i];

                              Ar[i]:=Ar[i+1];

                              Ar[i+1]:=Temp;

                              Flag:=False

                              end; {for}

end; {while}

writeln('Упорядоченный массив:');

for i:=0 to High(Ar) do

write(Ar[i]:5:1);

Readln; readln

End.

Результат работы приложения представлен в окне вывода (рис.9).

Рис.9. Результат работы приложения (пример 16)

 

Варианты заданий

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

1. Упорядочить массив таким образом, чтобы его элементы возрастали по четным номерам и убывали по нечетным.

2. Упорядочить массив таким образом, чтобы его элементы возрастали до середины и затем до конца убывали.

3. Переставить элементы массива таким образом, чтобы сначала были расположены отрицательные элементы по возрастанию, затем нули, а после – остальные.

4. Удалить все отрицательные элементы массива и расположить оставшиеся по убыванию.

5. Упорядочить элементы массива по возрастанию, удалив все повторяющиеся элементы.

6. Осуществить циклический сдвиг элементов массива на заданное число K, которое может быть положительным и отрицательным. Если K > 0, то последние K  элементов массива переместить на первые K мест.

7. Удалить из массива наиболее часто повторяющееся число и отсортировать остальные элементы по возрастанию.

8. В одномерном массиве найти минимальный элемент среди элементов с нечетными номерами и максимальный элемент среди элементов с четными номерами. Отсортировать по неубыванию элементы массива, расположенные между этими элементами, включая оба числа.

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

       10. Вводятся два массива. Получить результирующий отсортированный массив, состоящий из неповторяющихся элементов двух заданных массивов.

       11. Удалить из массива повторяющиеся отрицательные элементы и упорядочить оставшиеся по невозрастанию.

       12. Отсортировать по убыванию элементы массива, находящиеся между первым минимальным и последним максимальным элементами.

       13. Отсортировать по возрастанию элементы массива, находящиеся между первым и последним нулевыми элементами.

       14. Отсортировать по возрастанию элементы массива, находящиеся до минимального элемента.

 15. Отсортировать по убыванию элементы массива, находящиеся после максимального элемента.

       16. Отсортировать элементы массива, находящиеся между первым нулевым и первым максимальным элементами.

       17. Удалить из массива все минимальные элементы, оставшиеся отсортировать по возрастанию.

       18. Удалить из массива все отрицательные элементы, находящиеся между первым и вторым нулевыми элементами, и отсортировать оставшиеся по возрастанию.

       19. Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоящие в нечетных позициях, а во второй половине - элементы, стоящие в четных позициях.

 20. Преобразовать массив таким образом, чтобы сначала стояли все минимальные элементы, затем все максимальные элементы, а после них - остальные элементы.

21. Отсортировать элементы массива, находящиеся между первым минимальным и последним отрицательным максимальным элементами, включая оба числа.

22. Отсортировать элементы массива, находящиеся между первым максимальным и последним положительным максимальным элементами, включая оба числа.

23. Отсортировать элементы массива, находящиеся между первым минимальным и последним отрицательным максимальным элементами, включая оба числа.

24. Отсортировать элементы массива таким образом, чтобы нечетные элементы были расположены по возрастанию, а четные элементы – по убыванию.

     25. Отсортировать элементы массива таким образом, чтобы положительные элементы были расположены по возрастанию, отрицательные элементы – по убыванию, а нулевые элементы остались на своих местах.

 





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


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 660 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Логика может привести Вас от пункта А к пункту Б, а воображение — куда угодно © Альберт Эйнштейн
==> читать все изречения...

2856 - | 2793 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.