
- •П. Г. Ратайчук, а. М. Тихоненко
- •Алгоритмічна мова
- •Курс лекцій
- •Черкаси – 2003
- •Основні поняття навчальної алгоритмічної мови
- •Величини в навчальнiй алгоритмiчнiй мовi
- •Вирази в навчальнiй алгоритмiчнiй мовi
- •Загальні правила опису алгоритмів на нам
- •Переклад алгоритмiв на мову Паскаль
- •Лiнiйнi алгоритми
- •Команди побудови розгалужень в нам
- •Наступнi алгоритми вимагають застосування команди розгалуження
- •Наступнi алгоритми вимагають застосування команди вибору
- •Команди повторення нам
- •Приклади алгоритмів, що вимагають застосування iтерацiйного циклу
- •Лiнiйні таблиці
- •Приклади алгоритмів
- •Прямокутні таблиці
- •Приклади алгоритмів прямокутних таблиць
- •Лiтерні величини
- •Приклади алгоритмів літерних величин
- •Список рекомендованої літератури
- •Про авторів
- •Алгоритмічна мова
- •18028, М. Черкаси, вул. Смілянська, 120/1
Лiтерні величини
У порiвняннi з iншими, алгоритми роботи з лiтерними величинами на НАМ дають найбiльшi ускладнення при їх перекладi на мову Паскаль. Причини ускладнень такi:
1) алгоритмiчна мова передбачає широкi можливостi для змiнних лiтерного типу; ними можна користуватись як змiнними з iндексами; при цьому лiтерна змiнна з iндексами t[i:j] у складi виразу означає операцiю "вирiзка", а з лiвої сторони команди присвоювання використовується для операцiї "часткова змiна лiтерної величини"; таким чином, лiтерна змiнна з iндексами може означати вiдразу цiлий фрагмент лiтерної величини; в мовi ж Паскаль до змiнних типу String може бути застосований лише один iндекс, що означає можливiсть працювати лише з одним символом;
2) набiр стандартних засобiв для роботи з лiтерними величинами в НАМ надзвичайно обмежений: вимiрювання довжини довж(X), склеювання "+" i порiвняння "=" та "<>"; в той же час в мовi Паскаль стандартних засобiв значно бiльше;
3) оскiльки алфавiт НАМ жорстко не визначений, в НАМ вiдсутнiй символьний тип, а з окремими символами не зв'язується нiякий код.
В зв'язку з цими причинами всю сукупнiсть задач для роботи з лiтерними величинами доцiльно розбити на двi групи:
Задачi, якi можуть бути розв'язанi засобами НАМ i перекладенi на мову Паскаль;
Задачi, якi недоцiльно розв'язувати алгоритмiчною мовою через надмiрнi ускладнення, i якi слiд розв'язувати тiльки мовою Паскаль.
Алгоритмiчною мовою процедури Str i Val як стандартнi не передбаченi, а вiдповiднi алгоритми надзвичайно складнi. Саме тому подiбнi задачi за допомогою НАМ розв'язувати недоцiльно.
Приклади алгоритмів літерних величин
Приклад 1. "Кiлькiсть лiтер". Задано лiтерну величину S, що являє собою деякий текст. Задано лiтерну величину X, що являє собою єдину лiтеру. Пiдрахувати кiлькiсть лiтер X у текстi S.
алг КЛ(X,S: лiт): нат
поч k,j: нат
k:=0
для j вiд 1 до довж(S)
виконувати якщо S[j:j]=X то k:=k+1
КЛ:=k
кiн
Приклад 2. "Палiндром". Задано лiтерну величину S, що являє собою деякий текст. Побудувати алгоритм, результатом якого є текст, обернений до даного.
алг ОТ(S: лiт): лiт
поч a: лiт, j: нат
a := ""
для j вiд 1 до довж(S)
виконувати a := S[j:j] + a
ОТ := a
кiн
Приклад 3. "Замiна лiтер". Задано лiтерну величину S, що являє собою деякий текст. Задано також лiтернi величини X та Y, кожна з яких являє собою єдину лiтеру. Замiнити в текстi S лiтеру X лiтерою Y.
алг ЗЛ(арг X,Y: лiт; рез S: лiт)
поч j: нат
для j вiд 1 до довж(S)
виконувати якщо S[j:j]=X то S[j:j]:=Y
кiн
Приклад 4. "Вилучення лiтер". Задано лiтерну величину S, що являє собою деякий текст. Задано також лiтерну величину X, що являє собою єдину лiтеру. Вилучити iз тексту S всi лiтери X.
алг ВЛ(арг X: лiт; рез S: лiт)
поч a: лiт, j: нат
a := ""
для j вiд 1 до довж(S)
виконувати якщо S[j:j]X то a:=a+S[j:j]
S := a
кiн