Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прогр часть 1.doc
Скачиваний:
21
Добавлен:
07.06.2015
Размер:
1.47 Mб
Скачать

Лабораторна робота 7 формування робочих масивів за допомогою операцій селекції вихідного масиву

Мета роботи: виробити практичні навички у складанні алгоритмів, написанні та налагодженні програм у задачах сортування масивів.

Сортування масивів

Розглянемо масив елементів а123,…,аn. Нехай потрібно переставити елементи цього масиву так, щоб після перестановки вони були упорядковані за неубуванням: а1а2аn. Ця задача називається задачею сортування чи упорядкування масиву. Для розв’язання цієї задачі можна скористатися, наприклад, такими алгоритмами:

1 Знайти елемент масиву, що має найменше значення, переставити його з першим елементом, потім проробити теж саме, почавши з другого елемента і т.д. (сортування вибором).

2 Послідовним переглядом елементів а1,…,аn знайти найменше i таке, що аi>ai+1. Поміняти ai і аi+1 місцями, відновити перегляд з елемента аi+1 і т.д. Тим самим найбільший елемент пересунеться на останнє місце. Наступні перегляди починати знову спочатку, зменшуючи на одиницю кількість елементів, що переглядаються (сортування обміном або методом пухирця).

3 Переглядати послідовно а23,…,аn і кожен новий елемент аi вставляти на придатне місце у вже упорядковану сукупність а123,...,аi-1. Це місце визначається послідовним порівнянням аi з упорядкованими елементами а12,...,аi-1 (сортування вставками).

Якщо потрібно відсортувати частину масиву, що задовольняє заданим умовам, то спочатку відбирають елементи, що задовольняють заданій умові, у робочий масив, а потім його сортують.

Приклади виконання завдання лабораторної роботи

Приклад 25. Сформувати і вивести на друк два масиви, що містять значення й індекси від’ємних елементів вихідного масиву В(15).

Програма розв’язання даного прикладу має вид:

program pr25;

uses Crt;

const N=15;

type Mas1=array[1..N] of real;

Mas2=array[1..N] of integer;

VAR B,X:MAS1; Y:MAS2; I,J:INTEGER; P:CHAR;

BEGIN CLRSCR;

WRITELN(' УВЕДІТЬ ',N,' ЧИСЕЛ');

FOR I:=1 TO N DO READ(B[I]);

WRITELN(' ':20, 'ВИХІДНИЙ МАСИВ');

for i:=1 to N do write(b[i]:5:1);

writeln;

j:=0;

for i:=1 to N do begin

if b[i]<0 then

begin

j:=j+1;x[j]:=b[i];y[j]:=i;

end;

END;

WRITELN(' ':10, 'НОВІ МАСИВИ');

if j>0 then for i:=1 to j do

writeln(' ':5,'x(',i,')=',x[i]:5:1, 'y(',i,')=',y[i]:2)

else WRITELN(' ТАКИХ ЕЛЕМЕНТІВ НЕМА);

p:=readkey

end.

Приклад 26. Знайти добуток чотирьох найменших додатних кратних 5 елементів вихідного масиву Х(20).

Спочатку формуємо новий масив з додатних кратних 5 елементів вихідного масиву, а потім отриманий масив сортуємо методом виштовхування (пухирця). Програма має вид:

program pr26;

uses crt;

LABEL 1;

const n=20;

type raz=1..N; mac=array [raz] of integer;

var x,a:mac; d,i,j,k,r:integer; p:char;

BEGIN CLRSCR; WRITELN('УВЕДИ ',N,' ЧИСЕЛ');

FOR I:=1 TO N DO READ(X[I]);

WRITELN(' ':20,'ВИХІДНИЙ МАСИВ');

FOR I:=1 TO N DO WRITE(X[I]:4);

{ ФОРМУВАННЯ НОВОГО МАСИВУ }

writeln; j:=0;

for i:= 1 to N do begin

IF (X[I]>0) AND (X[I] MOD 5 = 0) THEN

BEGIN J:=J+1; A[J]:=X[I]; END; END;

IF J=0 THEN WRITELN(‘ МАСИВ НЕ СФОРМОВАНО’): goto 1;

{ СОРТУВАННЯ ПО ЗРОСТАННЮ }

for k:= 1 to j do

for i:= 1 to j-k do

if a[i+1]<a[i] then

BEGIN D:=A[I]; A[I]:=A[I+1]; A[I+1]:=D; END;

WRITELN(' ':5,'ВІДСОРТОВАНИЙ МАСИВ');

for i:= 1 to j do write(a[i]:4); writeln;

if j>=4 then begin r:=1;

for i:=1 to 4 do r:=r*a[i];

WRITELN('ДОБУТОК 4- Х НАЙМЕНШИХ=',R:6);end

ELSE WRITELN(‘Масив не містить 4 додатних кратних 5 елементів’);

1: p:=readkey

end.