
- •П. Г. Ратайчук, а. М. Тихоненко
- •Алгоритмічна мова
- •Курс лекцій
- •Черкаси – 2003
- •Основні поняття навчальної алгоритмічної мови
- •Величини в навчальнiй алгоритмiчнiй мовi
- •Вирази в навчальнiй алгоритмiчнiй мовi
- •Загальні правила опису алгоритмів на нам
- •Переклад алгоритмiв на мову Паскаль
- •Лiнiйнi алгоритми
- •Команди побудови розгалужень в нам
- •Наступнi алгоритми вимагають застосування команди розгалуження
- •Наступнi алгоритми вимагають застосування команди вибору
- •Команди повторення нам
- •Приклади алгоритмів, що вимагають застосування iтерацiйного циклу
- •Лiнiйні таблиці
- •Приклади алгоритмів
- •Прямокутні таблиці
- •Приклади алгоритмів прямокутних таблиць
- •Лiтерні величини
- •Приклади алгоритмів літерних величин
- •Список рекомендованої літератури
- •Про авторів
- •Алгоритмічна мова
- •18028, М. Черкаси, вул. Смілянська, 120/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.