Реализация алгоритмов с массивами

Над элементами массивами чаще всего выполняются такие действия, как

поиск, подсчет, перестановка, вставка, удаление элементов в массиве, удовлетворяющих заданному условию, сортировка элементов в порядке возрастания или убывания;

Сумму элементов массива можно подсчитать по формуле s=s+a[i] первоначально задав s=0. Количество элементов массива можно подсчитать по формуле к=к+1, первоначально задав к=0. Произведение элементов массива можно подсчитать по формуле p=p*a[i], первоначально задав p=1. При работе с элементами массива часто приходится изменять значения некоторых элементов, а так же переставлять элементы в массиве. При перестановке необходимо вводить дополнительную переменную.

Рассмотрим фрагменты программ, реализующих поиск элементов с заданными свойствами:

· поиск четных элементов.

For i:=1 to 10 do If a[i] mod 2=0 then write(a[i],' ');

· поиск элементов с нечетными индексами.

For i:=1 to 10 do If i mod 2<>0 then write(a[i],' ');

· подсчет количества элементов равных 0.

k:=0; For i:=1 to 10 do If a[i]=0 then k:=k+1;

· нахождение суммы элементов массива, находящихся до первого отрицательного.

s:=0; i:=1;

While a[i]>=0 do Begin

s:=s+a[i]; i:=i+1;

End;

· поиск максимального элемента в одномерном массиве.

max :=a[1]; i_max:=1;

For i :=1 to 5 do

If a [i] > max then Begin

max :=a [i];

i_max :=i;

End;

Рассмотрим фрагменты программ, реализующих замену, перестановку, вставку, удаление элементов в массиве.

· замена положительных элементы на 1, отрицательных на 0.

For i:=1 to n do If a[i]>0 then a[i]:=1 else if a[i]<0 then a[i]:=0;

· вставка числа х после всех элементов равных 0.

k:=0;

For i:=n downto 1 do

If a[i]=0 then Вegin

For j:=n+k downto i+1 do

a[j+1]:=a[j];

a[i+1]:=x;

k:=к+1; Еnd;

· удаление из массива всех отрицательных элементов.

k:=0;

For i:=n downto 1 do

If a[i]<0 then Вegin

For j:=i to n-1 do a[j]:=a[j+1];

a[n]:=0; k:=к+1;

Еnd;

· перестановка минимального и максимального элементов

max:=a[1]; {присвоение максимуму значения первого элемента}

i_max:=1; {присвоение номеру максимального элемента 1}

For i:=1 to n do сравнение всех элементов с максимумом}

If a[i]>max then Вegin

max:=a[i]; {запоминаем значение максимального элемента}

i_max:=i; {запоминаем номер максимального элемента}

Еnd;

min:=a[i]; i_min:=i;

For i:=1 to n do {поиск минимального элемента}

If a[i]<min then Вegin

min:=a[i];

i_min:=i;

Еnd; {конец поиска минимального элемента}

x:=a[i_max];{перестановка минимального и максимального элементов}

a[i_max]:=a[i_min];

a[i_min]:=x;

Сортировка массивов

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

1) сортировка вставкой (включением);

2) сортировка выбором (выделением);

3) сортировка обменом (так называемая "пузырьковая" сортировка).

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

Сортировка простым включением: элементы массива просматриваются по одному, и каждый элемент вставляется в подходящее место, среди ранее упорядоченных.

Program Work_1;

Var a: array[1..10] of integer;

Var i,d,j:integer;

Begin

For i:=1 to 10 do Read(a[i]);

For j:=2 to 10 do

Begin

i:=j-1;

d:=a[j];

While (i>0) and (d<a[i]) do

Begin

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

i:=i-1;

End;

a[i+1]:=d;

End;

For i:=1 to 12 do Write(a[i],' ');

End.

Сортировка простым выбором: Выбирается элемент с наименьшей величиной и меняется местами с первым. Затем эти операции повторяются с оставшимися элементами без первого пока не останется только один элемент - наибольший.

Program Work_2;

Var a: array[1..10] of integer;

Var i,k,x,j,n:integer;

Begin

For i:=1 to 10 do read(a[i]);

For i:=1 to 9 do Begin

k:=i; x:=a[I];

For j:=i+1 to 10 do

If x<a[j] then Begin

x:=a[j]; k:=j;

End;

a[k]:=a[i]; a[i]:=x

End;

For i:=1 to 10 do Write(a[i],' ');

End.

Сортировка простым обменом (метод “пузырька”): Если два элемента массива расположены не по порядку, то они меняются местами. Процесс повторяется до тех пор, пока элементы не будут упорядочены.

Program Work_3;

Var a: array[1..10] of integer;

Var i,k,x,j,n:integer;

Begin

For i:=1 to 10 do Read(a[i]);

For i:=2 to 10 do Begin

For j:=10 downto i do

If a[j-1]>a[j] then Begin

x:=a[j-1]; a[j-1]:=a[j];a[j]:=x;

End;

End;

For i:=1 to 10 do Write(a[i],' ');

End.

Задания для практической работы.

Составить программы на языке Pascal.

1. Организовать ввод элементов одномерного массива размерностью n=10 с клавиатуры, заменить отрицательные элементы массива на их модули, а положительные увеличить на 1.

2. Переставить элементы одномерного массива по следующей схеме:

исходный массив - а[1],а[2],а[3],а[4],а[5]

итоговый - а[5],а[4],а[3],а[2],а[1]

3. Удалить из массива элементы кратные 3 или 5.

4. Информация о средней суточной температуре воздуха за nдней (n<=30) представлена в виде массива tиз вещественных чисел. Определить номер дня, когда средняя суточная температура за n дней была наибольшей, и номер дня, когда средняя температура за сутки была второй по своей величине после наибольшей.

5. Организовать ввод элементов одномерного массива размерностью n=10 с помощью функции случайных чисел, вставить число K в одномерный массивпосле первого элемента кратного 3.

6. Поменять местами минимальный и максимальный элементы в массиве размерностью n=10.

7. Даны два массива а(n) и в(m). Получить новый массив с(?), который содержит только четные числа двух массивов.

8. Имеется n грузов весом a1, …, an и платформа грузоподъемностью r. Определить, какое максимальное количество грузов можно поместить на эту платформу. ( Сортировка простыми вставками).

 








Дата добавления: 2015-05-21; просмотров: 1077;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.013 сек.