Смекни!
smekni.com

Програмування в середовищі Pascal (стр. 11 из 16)

Ymax Yimax, ,якщоякщоYi YiYmaxYmax

Ymin Ymin, ,якщоякщоYi YiYminYmin

Перед виконанням циклу найбільшому (найменшому) значенню необхідно привласнити яке-небудь початкове (стартове) значення.

Сортування масиву полягає в розташуванні елементів масиву у порядку, що вимагається.

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

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

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

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

Ми розглянули сортування за збільшенням. Сортування за убуванням здійснюється аналогічно.

Селективна обробка масиву – це виділення з масиву елементів, що задовольняють умові, і обробка виділених фрагментів. Часто з виділених елементів формують новий (робочий) масив і потім його обробляють. Найбільш часто зустрічаються такі умови обробки елементів масиву:

парні елементи А[i] mod 2 = 0 непарні елементи А[i] mod 2 <> 0

кратні k А[i] mod k = 0 некратні k А[i] mod k <> 0 на парних місцях i mod 2 = 0 на непарних місцях i mod 2 <> 0 додатні елементи А[i] > 0 від’ємні елементи А[i] >= 0 в інтервалі (x1,x2) (А[i]>x1) and (А[i]<x2)

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

Приклад 3а. Знайти середнє арифметичне додатних парних елементів кожного з масивів А[10] і B[15].

Блок-схеми (рис. 9,10,11,12)

Рисунок 9 - Блок-схема алгоритму процедури Vvod

Рисунок 10 - Блок-схема алгоритму процедури Vivod

Рисунок 11 - Блок-схема алгоритму процедури Sr

Рисунок 12 - Блок-схема алгоритму основної програми

Текст програми

Program Lab3a;

{Селективна Обробка Масивів }

Uses Crt;

Const M=10; N=15;

Type Mas=Array[1..N] Integer;

Var А, B : Mas; I : Integer;

{-------Процедура Введення Масиву-------}

Procedure Vvod(Var M:Mas;K:Integer); Begin

Writeln(' Введіть ',K:2,' Чисел Масиву ');

For I:=1 To K Do Read(M[I]);

Writeln;

End;

{-------Процедура Виведення Масиву-------}

Procedure Vivod(Var M:Mas;K:Integer);

Begin

Writeln(' Початковий Масив ');

For I:=1 To K Do Write(M[I]:4);

Writeln;

End;

{-------Процедура Обчислення Серед. Аріф.---}

Procedure Sr(M:Mas;K:Integer);

Var Sum, Kol : Integer;

Begin

Sum:=0; Kol:=0;

For I:=1 To K Do

If (M[I]>0) And (M[I] Mod 2=0) Then

Begin

Sum:=Sum+M[I];

Kol:=Kol+1;

End;

Writeln(' Сума Додатних Парних= ',Sum:4);

Writeln(' Кількість Додатних Парних = ',Kol:2); If Kol>0 Then

Writeln(' Середнє Арифмет. = ',Sum/Kol:7:3) Else

Writeln(' Додатних В Масиві Немає '); End;

{-------Основна Програма-------}

Begin

Clrscr;

Writeln(' Масив А ');

Vvod(A,M);

Vivod(A,M);

Sr(A,M);

Writeln(' Масив B ');

Vvod(B,N);

Vivod(B,N);

Sr(B,N); Readkey; End.

Приклад 3b. У кожному з масивів А і С поміняти місцями перший і якнайменший додатний елементи. Розмірність масивів довільна.

Блок-схеми (рис. 9,10,13,14)

Блок-схема алгоритму процедур Vvod та Vivod такі ж як у прикладі 3а.

Текст програми

Program Lab3b;

{Заміна Першого І Найменьшого Додатного }

Uses Crt;

Const V=50;

Type Mas=Array[1..V] Real;

Var А, С: Mas; N,M,I: Integer;

{-------Процедура Введення Масиву-------}

Procedure Vvod(Var X:Mas;Var K:Integer);

Var K1:Integer; Begin

Writeln(' Введіть Кількість Ел-Тів Масиву'); Readln(K1);

Writeln(' Введіть ',K1:2,' Чисел Масиву');

For I:=1 To K1 Do Read(X[I]);

Writeln;

K:=K1;

End;

{-------Процедура Виведення Масиву-------}

Procedure Vivod(X:Mas;K:Integer);

Begin

For I:=1 To K Do Write(X[I]:5:2);

Writeln;

End;

{-------Процедура Обробки Масиву-------}

Procedure Obrab(Var X:Mas;K:Integer);

Var Min:Real; Imin:Integer;

Begin

Imin:=0;

For I:=1 To K Do

If X[I]>0 Then

Begin

Min:=X[I];

Imin:=I;

End;

For I:=1 To K Do

If (X[I]>0) And (X[I]<Min) Then

Begin

Min:=X[I];

Imin:=I;

End;

If Imin>0 Then

Begin

Writeln(' Найменьший = ',Min:5:2);

Writeln(' Його Номер = ',Imin:3);

If Imin>1 Then

Begin

X[Imin]:=X[1];

X[1]:=Min;

End

Elsе

Writeln(' Перший Елемент Є Найменьшим ')

End

Else

Writeln(' В Масиві Немає Додатних '); End;

{-------Основна Програма-------}

Begin

Clrscr;

Vvod(A,M);

Vvod(C,N); Clrscr;

Writeln(' Масив А ');

Vivod(A,M);

Obrab(A,M);

Writeln(' Перетворений Масив А ');

Vivod(A,M);

Writeln(' Масив С ');

Vivod(C,N);

Obrab(C,N);

Writeln(' Перетворений Масив C ');

Vivod(C,N); Readkey; End.

Приклад 3c. Обчислити суму двох найбільших і двох якнайменших непарних елементів масиву. Розмірність масиву довільна.

Рисунок 13 - Блок-схема алгоритму процедури Obrab

Рисунок 14 - Блок-схема алгоритму основної програми

Блок-схеми (рис. 15, 16, 17, 18, 19)

Рисунок 15 - Блок-схема алгоритму процедури Vvod

Рисунок 16 - Блок-схема алгоритму процедури Vivod

Рисунок 17 - Блок-схема алгоритму процедури Select

Рисунок 18 - Блок-схема алгоритму процедури Sort

Рисунок 19 - Блок-схема алгоритму основної програми

Текст програми

Program Lab3c;

{Сума Двох Найбільших І Двох Найменьших Непарних}

Uses Crt;

Const V=50;

Type Mas=Array[1..V] Integer;

Var А, C: Mas;

Var S,L,M,I: Integer;

{-------Процедура Введення Масиву-------}

Procedure Vvod(Var X:Mas;Var K:Integer);

Var K1:Integer;

Begin

Writeln(' Введіть Кількість Ел-Тів Масиву '); Readln(K1);

Writeln(' Введіть ',K1:2,' Чисел Масиву');

For I:=1 To K1 Do Read(X[I]);

Writeln;

K:=K1;

End;

{-------Процедура Виведення Масиву-------}

Procedure Vivod(X:Mas;K:Integer);

Begin

For I:=1 To K Do Write(X[I]:4);

Writeln;

End;

{-------Процедура Вибору-------}

Procedure Select(X:Mas;K:Integer;Var У:Mas;

Var Q1:Integer);

Var Q:Integer;

Begin

Q:=0;

For I:=1 To K Do

If X[I] Mod 2 <>0 Then

Begin

Q:=Q+1;

У[Q]:=X[I];

End;

Q1:=Q;

End;

{---------Процедура Сортування-------}

Procedure Sort(Var X:Mas;K:Integer);

Var J,D: Integer;

Begin

For J:=1 To K-1 Do

For I:=J+1 To K Do

If X[J]<X[I] Then

Begin

D:=X[I];

X[I]:=X[J];

X[J]:=D;

End;

End;

{-------Основна Програма-------}

Begin

Clrscr;

Vvod(A,M);

Writeln(' Початковий Масив ');

Vivod(A,M);

Select(A,M,C,L);

If L>3 Then

Begin

Writeln('Робочий Масив');

Vivod(C,L); Sort(C,L);

Writeln('Відсортированый Массив');

Vivod(C,L);

S:=C[1]+C[2]+C[L-1]+C[L];

Writeln('Сума = ',S:3);

End

Else

Writeln(' В Масиві < 4 Непарних Елементів '); Readkey; End.

6.3 Варіанти завдання до лабораторної роботи 3

1 Скласти програму для вирішення наступних задач. Варіанти задач наведені в табл.8.

Таблиця 8 - Варіанти завдання

Варіант Зміст задачі
1

Знайти суму додатних і кількість непарних елементів в масивах

А(10) і М(12)

2

Обчислити середнє геометричне елементів в масивах Т(15) і

А(12)

3 Обчислити середнє арифметичне парних і суму непарних елементів в масивах C(10) і F(10)
4 Знайти кількість елементів в масивах O(16) і М(12), кратних 4 і не більших заданого числа А
5 Обчислити середнє геометричне парних елементів масивів C(10) і М(10), не менших за 10
6 Знайти суму і кількість парних елементів в масивах Р(13) і Z(8), що стоять на непарних місцях
7 Знайти кількість елементів, кратних 5, що належить до інтервалу [10;50] в масивах F(14) і М(10)
8 Знайти середнє геометричне парних елементів в масивах С(12) і

А(8), має парний індекс

9 Знайти різницю суми додатних і добуток від’ємних чисел в масивах А(14) і С(9)
10 Знайти модуль різниці добутку парних і суми непарних елементів в масивах Н(16) і А(8)
11 Знайти суму і кількість елементів в масивах С(10) і А(12), у яких індекс кратний 3
12 Обчислити суму тих елементів масивів А(10) і В(12), числові значення яких належать напівінтервалу [i; i+1]
13

Знайти добуток і кількість негативних елементів в масивах

В(12) і А(10), має парний індекс

14 Обчислити суму і кількість елементів масивів Т(12) і М(12), які мають непарний індекс
15

Знайти середнє арифметичне негативних елементів масивів

В(12) і С(10), що стоїть на парних місцях

16 Знайти добуток кількості парних і кількості непарних елементів в масивах Н(16) і А(12)

Продовження табл.8