
- •Лабораторная работа №5
- •1. Теоретическая часть
- •1.1 Основные алгоритмы преобразования одномерных массивов.
- •1.2 Пример составления алгоритма и программы на языке Pascal для преобразования одномерного массива.
- •2. Практическая часть
- •2.1 Требования к выполнению работы:
- •2.2 Варианты индивидуальных заданий.
- •2.3 Контрольные вопросы и практические задания:
1.2 Пример составления алгоритма и программы на языке Pascal для преобразования одномерного массива.
Задание: Дан массив действительных чисел F1,...,F40. Упорядочить в нем по возрастанию элементы, которые находятся между максимальным и минимальным элементами.
Решение.
Описание массива выполним в разделе описания типов Type.
Для работы с массивом F сначала необходимо сформировать его элементы. Выполним формирование элементов массива с помощью генератора случайных чисел random. Для обозначения размерности массива F введем переменную N. В цикле сразу после формирования элемента массива выполним вывод его на экран.
Далее в одном цикле выполним поиск максимального и минимального элементов массива Fmax и Fmin и их номеров nmax и nmin. Затем определим, какой из номеров меньше: nmax или nmin, меньший из номеров запомним в переменной k1, больший – в переменной k2. После этого упорядочим по возрастанию элементы от k1 до k2 по аналогии с сортировкой элементов массива от 1-го до N-го. При упорядочении элементов массива необходимо организовать 2 цикла. Внешний цикл всегда организовывается, начиная с 1 и выполняется число раз, на единицу меньшее количества сортируемых элементов (в случае сортировки всего массива из N элементов внешний цикл организовывался от 1 до N – 1). В данном случае необходимо упорядочить (k2 – k1 + 1) элементов. Поэтому внешний цикл необходимо организовать от 1 до k2 – k1. В качестве переменной внешнего цикла будем использовать переменную i. Поскольку необходимо упорядочить элементы с номерами от k1 до k2, внутренний цикл организуем, начиная с k1 до k2 – i (в случае сортировки всего массива из N элементов внутренний цикл организовывался от 1 до N – i). В качестве переменной внутреннего цикла будем использовать переменную j.
После упорядочения преобразованный массив F выведем на экран.
1.2.1 Блок-схема алгоритма решения данной задачи выглядит следующим образом:
1.2.2 Текст программы на языке Pascal выглядит следующим образом:
Program primer5;
uses crt;
type
mas=array[1..50] of real;
var
F:mas;
i,j,k1,k2,nmin,nmax,N:byte;
Fmax,Fmin,P:real;
Begin
clrscr;
randomize;
N:=40;
writeln('Исходный массив:');
for i:=1 to N do
begin
F[i]:=100*random-50;
write(F[i]:8:2);
end;
Fmax:=-10000;
Fmin:=10000;
for i:=1 to N do
begin
if F[i]>Fmax
then begin
Fmax:= F[i];
nmax:=i;
end;
if F[i]<Fmin
then begin
Fmin:= F[i];
nmin:=i;
end;
end;
writeln;
writeln('Максимальный элемент:',Fmax:8:2,' номер ',nmax);
writeln('Минимальный элемент: ',Fmin:8:2,' номер ',nmin);
if nmax>nmin
then begin
k1:=nmin;
k2:=nmax;
end
else begin
k2:=nmin;
k1:=nmax;
end;
for i:=1 to k2-k1 do
begin
for j:=k1 to k2-i do
begin
if F[j]>F[j+1]
then begin
P:=F[j];
F[j]:=F[j+1];
F[j+1]:=P;
end;
end;
end;
writeln('Результат: ');
for i:=1 to N do write(F[i]:8:2);
readkey;
end.
1.2.3 Результаты работы программы:
Исходный массив:
38.58 -8.06 14.82 -12.39 -40.87 -41.47 8.26 -36.21 17.87 4.88
21.06 22.32 29.95 -3.65 3.11 3.20 23.43 -11.80 -19.23 -36.35
-13.84 3.93 -32.65 24.02 -35.59 -28.07 -34.98 -28.65 49.04 0.10
-43.29 12.50 10.17 -6.84 11.41 -5.75 -33.61 42.30 -48.80 32.50
Максимальный элемент: 49.04 номер 29
Минимальный элемент: -48.80 номер 39
Результат:
38.58 -8.06 14.82 -12.39 -40.87 -41.47 8.26 -36.21 17.87 4.88
21.06 22.32 29.95 -3.65 3.11 3.20 23.43 -11.80 -19.23 -36.35
-13.84 3.93 -32.65 24.02 -35.59 -28.07 -34.98 -28.65 -48.80 -43.29
-33.61 -6.84 -5.75 0.10 10.17 11.41 12.50 42.30 49.04 32.50
Из результатов работы программы видно, что в преобразованном массиве элементы, начиная с 29 по 39, упорядочены по возрастанию.