Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Програмування (методичка).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
495.1 Кб
Скачать

Приклади алгоритмів

Приклад 1. "Замiна елементiв". Задано лiнiйну таблицю X, що мiстить N дiйсних чисел. Всi елементи таблицi, що рiвнi значенню заданого A, замiнити значенням iншого заданого C.

алг ЗАМIНА(арг N: цiл, A,C: дiйс; рез X: дiйс таб[1..10])

поч i: цiл

для i вiд 1 до N виконувати якщо X[i]=A то X[i]:=C

кiн

Алгоритм демонструє методику внесення змiн у таблицю з використанням певних умов. Наприклад, змiнювати можна не тiльки елементи, що рiвнi A, але й елементи, що вiдповiдають умовам X[i]>A, X[i]<A, A < X[i] < B тощо. При цьому можна вибрати iншою не тiльки умову замiни, але й характер замiни, наприклад:

- всi елементи, що рiвнi A, збiльшити вдвiчi {X[i]:=2*X[i]};

- кожний додатнiй елемент {X[i]>0} замiнити квадратним коренем iз нього {X[i]:=Sqrt(X[i])};

- кожний вiд'ємний елемент {X[i]<0} замiнити його добутком на порядковий номер {X[i]:=X[i]*i};

- знак всiх елементiв змiнити на протилежний {X[i]:=-X[i]} тощо.

Якщо не використовувати жодних умов i вважати таблицю порожньою, то можна пристосувати цю методику для заповнення таблицi на N елементiв значеннями у вiдповiдностi з певним правилом, наприклад:

- заповнити таблицю заданим числом A;

- заповнити таблицю значеннями порядкових номерiв елементiв;

- заповнити таблицю значеннями виразу Sin(i), де i - порядковий номер елемента;

- заповнити таблицю числами Фiбоначчi (1, 1, 2, 3, 5, 8, ...);

- заповнити таблицю числами, що послiдовно зменшуються на 1, починаючи iз заданого A тощо.

Приклад 2. "Сума та добуток елементiв". Задано лiнiйну таблицю X, що мiстить N дiйсних чисел. Знайти суму та добуток тих елементiв таблицi, що рiвнi заданому A.

алг СД(арг N: цiл, A: дiйс, X: дiйс таб[1..10]; рез S,D: дiйс)

поч i: цiл

S:=0; D:=1

для i вiд 1 до N

виконувати якщо X[i]=A то пс S:=S+X[i]; D:=D*X[i] кс

кiн

Алгоритм демонструє методику знаходження сум та добуткiв тих елементiв таблицi, що вiдповiдають певним умовам. Наприклад, можна знаходити суму або добуток таких елементiв:

- тих, що належать заданому промiжку {(X[i]≥A) i (X[i]≤B)};

- тих елементiв, що є парними числами {X[i] Mod 2 = 0};

- тих елементiв, що меншi або бiльшi нуля тощо.

Якщо ж нiяку умову не використовувати, то можна одержати суму та добуток всiх елементiв таблицi.

Можна вибрати також iнший характер суми або добутку, наприклад, шукати суму квадратiв чисел {S:=S+X[i]^2}.

Зазначимо, що алгоритму властива неоднозначнiсть, оскiльки наперед може бути невiдомо, чи є в таблицi елементи, що рiвнi A. Тому iнодi слiд додатково розв'язувати задачу пiдрахунку кiлькостi.

Приклад 3. "Кiлькiсть елементiв". Задано лiнiйну таблицю X, що мiстить N дiйсних чисел. Знайти кiлькiсть елементiв, рiвних заданому A.

алг КЛ(N: цiл, A: дiйс, X: дiйс таб[1..10]): цiл

поч i,K: цiл

K:=0

для i вiд 1 до N виконувати якщо X[i]=A то K:=K+1

КЛ:=K

кiн

Алгоритм демонструє методику знаходження кiлькостi тих елементiв таблицi, що вiдповiдають певним умовам. Наприклад, можна знаходити кiлькiсть таких елементiв:

- тих, що належать заданому промiжку {(X[i]≥A) i (X[i]≤B)};

- тих, що не належать промiжку {(X[i]<A) або (X[i]>B)};

- тих елементiв, що є парними числами {X[i] Mod 2 = 0};

- тих елементiв, що вiдмiннi вiд нуля {X[i]0} тощо.

Приклад 4. "Схема Горнера". Лiнiйна таблиця A мiстить N значень коефiцiєнтiв многочлена

y = A[1]*xN-1 + A[2]*xN-2 + ... + A[N-1]*x + A[N].

Обчислити значення многочлена для деякого заданого значення x.

алг ГОРНЕР(N: цiл, x: дiйс, A: дiйс таб[1..10]): дiйс

поч i: цiл, y: дiйс

y:=0

для i вiд 1 до N виконувати y := y * x + A[i]

ГОРНЕР := y

кiн

Приклад 5. "Вставка елемента". Задано лiнiйну таблицю X, що мiстить N дiйсних чисел. Задане A вставити на мiсце з порядковим номером K (1≤K≤N+1).

алг ВСТАВКА(арг N: цiл, A: дiйс, K: цiл; рез X: дiйс таб[1..10])

поч i: цiл

для i вiд N до K крок -1 виконувати X[i+1] := X[i]

X[K] := A

кiн

Вставка на мiсце з порядковим номером K полягає в тому, що спочатку треба всi елементи масиву з порядковими номерами вiд K до N включно зсунути на одну позицiю вправо. Звичайно, це треба робити з кiнця таблицi. Потiм можна задане A вставити на потрiбне мiсце. Треба пам'ятати, що внаслiдок вставки кiлькiсть елементiв таблицi збiльшується: їх стає N+1. Саме тому наведений розв'язок буде правильним лише при умовi, що N<Nmax, де Nmax - максимально допустима кiлькiсть елементiв в таблицi (тут Nmax=10).

Приклад 6. "Вилучення елемента". Задано лiнiйну таблицю X, що мiстить N дiйсних чисел. Вилучити iз таблицi елемент, що має порядковий номер K (1≤K≤N).

алг ВИЛУЧЕННЯ(арг N,K: цiл; рез X: дiйс таб[1..10])

поч i: цiл

для i вiд K+1 до N виконувати X[i-1]:=X[i]

кiн

Вилучення полягає в тому, що елементи з порядковими номерами вiд K+1 до N включно зсовують на одну позицiю влiво. Внаслiдок вилучення кiлькiсть елементiв таблицi зменшується: їх стає N-1.

Приклад 7. "Переписування елементiв". Задано лiнiйну таблицю X, що мiстить N дiйсних чисел. Переписати iз таблицi X в таблицю Y тiльки тi елементи, що рiвнi заданому A.

алг ПЕРЕПИС(арг N: цiл, A: дiйс, X: дiйс таб[1..10];

рез K: цiл, Y: дiйс таб[1..10])

поч i: цiл

K:=0

для i вiд 1 до N

виконувати якщо X[i]=A то пс K:=K+1; Y[K]:=A кс

кiн

Крiм самої таблицi, обов'язковим результатом розв'язування задачi має бути також кiлькiсть K елементiв, переписаних в таблицю Y. Адже може трапитись так, що не було переписано жодного елементу, i таблицею Y не можна буде користуватись. Алгоритм демонструє методику переписування елементiв з однiєї таблицi в другу, оскiльки для переписування можуть бути вибранi також i iншi умови, наприклад:

- переписати додатнi елементи {X[i]>0};

- переписати елементи, вiдмiннi вiд A {X[i]A};

- переписати елементи, кратнi трьом {X[i] Mod 3 = 0} тощо.

Приклад 8. "Внесення елементiв". Задано лiнiйну таблицю X на N елементiв. Внести в цю таблицю елементи, що рiвнi заданому A, шляхом замiни iснуючих. Порядковi номери внесення починаються з K i йдуть далi з кроком H.

алг ВНЕСЕННЯ(арг N,K,H: цiл, A: дiйс; рез X: дiйс таб[1..10])

поч

поки K ≤ N виконувати пс X[K]:=A; K:=K+H кс

кiн

Звертаючись до цього алгоритму з рiзними комбiнацiями початкових даних, можна створювати рiзнi лiнiйнi таблицi.

Приклад 9. "Пошук максимального елемента". Задано лiнiйну таблицю X, що мiстить N дiйсних чисел (N≥1). Знайти в цiй таблицi максимальний елемент.

алг MAXЕЛ(арг N: цiл, X: дiйс таб[1..10]): цiл

поч i,k: цiл

k:=1

для i вiд 2 до N виконувати якщо X[i] > X[k] то k:=i

MAXЕЛ:=k

кiн

Результатом пошуку є порядковий номер максимального елемента, що дає можливiсть при необхiдностi указати також i його значення (якщо порядковий номер k, то значення X[k]). Якщо в таблицi є декiлька однакових максимальних елементiв, то буде указано порядковий номер першого iз них. Використання умови X[i]≥X[k] дає можливiсть одержати порядковий номер останнього iз них. При використаннi знакiв вiдношень "<" та "≤" одержуємо порядковий номер мiнiмального елемента.

Приклад 10. "Кiлькiсть максимальних елементiв". Задано лiнiйну таблицю X, що мiстить N дiйсних чисел (N≥1). Знайти кiлькiсть максимальних елементiв в цiй таблицi.

алг KMAX(арг N: цiл, X: дiйс таб[1..10]): цiл

поч i,k: цiл, m: дiйс

m:=X[1]; k:=1

для i вiд 2 до N

виконувати пс якщо X[i]=m то k:=k+1

якщо X[i]>m то пс m:=X[i]; k:=1 кс кс

KMAX:=k

кiн

Приклад 11. "Пошук вiд початку". Задано лiнiйну таблицю, що мiстить N дiйсних чисел. Знайти в цiй таблицi задане Z.

алг ПОШУК(арг N: цiл, Z: дiйс, X: дiйс таб[1..10]): цiл

поч i,k: цiл

i:=1; k:=0

поки (i≤N) i (k=0) виконувати пс якщо X[i]=Z то k:=i; i:=i+1 кс

ПОШУК:=k

кiн

Результатом пошуку є порядковий номер заданого Z в таблицi. Якщо внаслiдок пошуку виявилось, що порядковий номер рiвний нулю, то це означає вiдсутнiсть Z в таблицi. Пошук здiйснюється вiд початку таблицi, тому алгоритм вiдшукує перше iз Z, якщо їх в таблицi декiлька. Завдяки застосуванню циклу "поки" пошук припиняється, як тiльки Z буде знайдено. Даний алгоритм демонструє методику пошуку. При цьому для пошуку можуть бути застосованi також i iншi умови, що дає можливiсть розв'язувати рiзнi задачi, наприклад:

- визначити, чи впорядкована таблиця за зростанням (знайти елемент менший попереднього);

- знайти в таблицi додатнiй елемент;

- знайти в таблицi парний елемент;

- визначити, чи всi елементи в таблицi однаковi (знайти елемент вiдмiнний вiд першого) тощо.

Приклад 12. "Пошук з кiнця". Задано лiнiйну таблицю, що мiстить N дiйсних чисел. Знайти в цiй таблицi задане Z.

алг ПОШУК(арг N: цiл, Z: дiйс, X: дiйс таб[1..10]): цiл

поч i,k: цiл

i:=N; k:=0

поки (i≥1) i (k=0)

виконувати пс якщо X[i]=Z то k:=i; i:=i-1 кс

ПОШУК:=k

кiн

Даний алгоритм вiдрiзняється вiд попереднього лише тим, що пошук здiйснюється вiд кiнця таблицi.