Теоретична довідка з навчальної алгоритмічної мови Алгоритмічна мова це система позначень і правил, призначених для запису алгоритмів і їх виконання. Алгоритмічних мов є багато. Тут буде розглядатись один із варіантів навчальної алгоритмічної мови. Алфавіт мови. 1. Арабські цифри 0,1,2,...,9 2. Великі і малі букви українського і латинського алфавітів 3. Спеціальні знаки а) знаки арифметичних дій + додавання - віднімання * множення / ділення \ (div) цілочисельне ділення mod залишок від цілочисельног ділення б) знаки відношень між величинами > більше < менше не менше не більше = дорівнює (<>) не дорівнює в) “” для позначення літерних величин г) := знак присвоєння д) ; для відокремлення декількох команд записаних в одному рядку е) [ ] для вказівки номерів елементів таблиці є) : для відокремлення початкових і кіннцевих номерів елементів таблиці ж) , для відокремлення 1. границь номерів елементів таблиць по вертикалі і по горизонталі 2. аргументів і результатів алгоритму в його зоголовку 3. проміжних величин при їх описанні з) ( ) для описання типів аргументів і результатів алгоритму в його заголовку, при записі арифметичних виразів. Службові слова . алг , поч , кін використовуються для виділення назви алгоритму, його початку і кінця. якщо , то , інакше , все використовуються в складній команді розгалудження. поки , пц , кц використовуються в складній команді повторення (циклу). для , до , крок використовуються в складній команді повторення з параметром. ціл , дійс , літ використовуються для описання типів змінних. арг , рез використовуються для для вказівки вхідних даних і результатів алгоритму. і , або , не використовуються в складних умовах, в командах розгалудження між відношеннями. таб використовується для вказівки про те, що деяка змінна є табличною величиною. вибір , при використовуються в складній команді вибору. Функції, які можна використовувати при запису виразів. SQR(x) ABS(x) SIN(x) sin x COS(x) cos x TAN(x) tg x ATN(x) arctg x EXP(x) e RND(x) випадкове число з проміжку [0;1] INT(x) ціла частина від x FIX(x) переведення дійсного числа в ціле шляхом відкидання його дробової частини. Аргументи функцій вказуються в дужках. В ролі аргумента може бути використаний будь-який арифметичний вираз. В тригонометричних функціях аргумент вказується в радіанах. Постійні величини. Постійні величини це числа і тексти (літерні величини). Числові константи можуть бути цілими або дійсними. При записі дійсних чисел десяткова частина відокремлюється від цілої частини числа крапкою. Літерна константа це довільна послідовність символів, узята в лапки. Довжина літерної константи не перевищує 255 символів. Змінні. Змінні у НАМ є числові і літерні. Імена змінних послідовності символів, які можуть містити українські і латинські букви, арабські цифри. Першим символом повинна бути буква. Типи змінних вказуються в заголовку алгоритму за допомогою службових слів ціл (цілі), дійс (дійсні), літ (літерні). Вирази. Вирази складаються із чисел, змінних, функцій, об`єднаних знаками арифметичних операцій. Арифметичні вирази обчислюються зліва направо із врахуванням пріоритету арифметичних операцій і наявності дужок. Пріоритет операцій: 1. зміна знаку числа (знак “-”) 2. *, / (mod), div у порядку їх слідування зліва направо 3. +, - у порядку їх слідування зліва направо Для зміни порядку виконання операцій використовуються дужки. Загальний вигляд алгоритму. алг назва алгоритму (перелік аргументів і результатів алгоритму із вказівкою їх типів) арг список імен аргументів рез список імен результатів поч список проміжних величин із вказівкою їх типів серія команд кін Перші три рядки називаються заголовком алгоритму. Елементи списків у заголовку алгоритму відокремлюються комами. Типи величин вказуються з допомогою службових слів ціл , дійс , літ . Якщо кілька величин мають однаковий тип, то відповідне службове слово можна вживати один раз. Серія команд (тіло алгоритму) містить команди алгоритму записані, або кожна в кремому рядку, або по кілька команд в одному рядку. В останньому випадку команди відокремлюються одна від одної крапкою з комою. Команди, які може містити тіло алгоритму: присвоєння, розгалудження, вибору, повторення (циклу), звертання до допоміжного алгоритму, виводу результатів. Спеціальної команди для введення значень аргументів у НАМ немає. Вважається, що на момент початку роботи алгоритму вони певним чином уже задані. Команда присвоєння має вигляд: ім`я змінної := вираз Команда виводу має вигляд: друк список , де список може містити числові і літерні константи, арифметичні вирази, імена змінних. Елементи списку відокремлюються комами. Алгоритми, які містять лише команди присвоєння і виводу, називають лінійними. Приклад лінійного алгоритму. Обчислити площу трикутника, якщо відомі три його сторони. Вважається, що умова існування трикутника виконується. алг Площа трикутника (дійс a,b,c,S) арг a,b,c рез S поч дійс p p:=(a+b+c)/2 S:=SQR(p*(p-a)*(p-b)*(p-c)) друк “Площа трикутника із сторонами ”, a,“ ”,b, “ ”,c, “=”,S кін початок введення a,b,c p:=(a+b+c)/2 S:=SQR(p*(p-a)*(p-b)*(p-c)) Виведення S кінець Команда розгалудження. Команда розгалудження має вигляд: якщо умова то серія1 інакше серія2 все ні умова так серія 2 серія 1 Залежно від умови виконуються або команди серії 1, або команди серії 2. Команда розгалуження може бути записана і в неповній формі: якщо умова то серія команд все ні умова так серія Приклад. Знайти корені квадратного рівняння виду ax +bx+c=0 алг КВР (дійс a,b,c,x1,x2) арг a,b,c рез x1,x2 поч дійс D D:=b^2-4*a*c якщо D<0 то друк “рівняння не має розв`язків” інакше якщо D=0 то x1:=-b/(2*a) друк “Рівняння має один корінь” друк “x=”, x1 інакше x1:=(-b+SQR(D))/(2*a) x2:=(-b-SQR(D))/(2*a) друк “Рівняння має два корені” друк “x=”, x1 друк “x=”, x2 все все кін Команда вибору. Команда вибору має такий формат: вибір при умова 1 : серія 1 при умова 2 : серія 2 . . . . . . . . . . при умова k : серія k інакше серія команд все Якщо виконується одна з умов 1-k, то виконується відповідна їй серія команд , після чого керування передається на все. Якщо не виконується жодна з умов 1-k, то керування передається на серію команд записаних після інакше , а далі на все. Рядок з інакше в команді вибору може бути відсутній. У цьому випадку, якщо не виконується жодна з умов, керування передається на все. Рядок з інакше можна вказувати лише тоді, коли тут охоплюються всі випадки, не описані в попередніх умовах. Приклад. Визначити квартал, якщо відомий порядковий номер місяця. алг Квартал арг m рез kv поч вибір при m1 і m3 : kv:=1 ; друк kv при m4 і m6 : kv:=2 ; друк kv при m7 і m9 : kv:=3 ; друк kv при m10 і m12 : kv:=4 ; друк kv інакше друк “ Такого номера місяця немає” все все Команда повторення (цикл поки) Цикл поки записується у вигляді поки умова пц серія команд кц Якщо умова, записана після поки, істинна, то виконується серія команд, яка становить тіло циклу. Після цього керування знову передається на перевірку умови в поки. Якщо умова, записана після поки є хибною, то керування передається на команду, записану після кц. Приклад. Визначити найбільший спільний дільник двох натуральних чисел згідно алгоритму Евкліда. алг Евклід (ціл a,b,НСД) арг a,b рез НСД поч ціл x,y x:=a ; y:=b поки x‡y пц якщо x>y то x:=x-y інакше y:=y-x все кц НСД:=x друк “для чисел ”,a,” i ”,b,” НСД=”,НСД кін Команда повторення з параметром (цикл для). Ця команда може бути використана лише тоді, коли кількість повторень команд циклу відома. Загальний вигляд команди : для x від xпоч. до xкін. крок xкрок пц серія команд кц Тут x — деяка числова змінна, xпоч., xкін. — числа або формули, які виражають початкове і кінцеве значення змінної x; xкрок — величина кроку на який щоразу змінюється значення параметра x. Величина кроку може приймати будь-які дійсні значення. Якщо величина кроку xкрок=1, то запис крок 1 можна опустити. Якщо xкрок додатнє число, то тіло циклу виконується за умови, що x не перевищує xкін. Якщо ж xкрок від`ємне число, то тіло циклу виконується за умови, що x не менше від xкін. Після виконнаня серії команд x автоматично збільшується на величину xкрок і після цього знову порівнюється з xкін. Приклад. Обчислити значення функції y=x2-0,5x4 при x=-3,-1,1,3,5,7,9,11 алг Табуляція (ціл x, дійс y) арг x рез y поч для x від -3 до 11 крок 2 пц y:=x^2-0.5*x^4 друк x,y кц кін Алгоритми обробки масивів (таблиць) Таблиця — це сукупність величин одного типу, пронумерованих послідовними цілими числами. Ця сукупність величин має одне ім`я. Будь-який елемент в таблиці визначається своїм порядковим номером (індексом) або парою індексів (у випадку прямокутної таблиці). Кожний елемент таблиці позначається іменем таблиці з індексом, записаним у квадратних дужках. Наприклад, нехай дано таблицю дійсних чисел А, в якій елементи пронумеровані від -3 до 4. -3 -2 -1 0 1 2 3 4 18 1,5 14 -9 0,3 35 4 19 Елементами цієї таблиці є : A[-3]=18 A[-2]=1,5 . . . . . . . . A[4]=19 Щоб описати в алгоритмі лінійну таблицю, треба вказати тип величин, які до неї входять, після цього вказати службове слово таб, далі слідує ім`я таблиці, а за ним у квадратних дужках вказуються початковий і кінцевий індекси елментів таблиці, відокремлені двокрапкою: тип елментів таб ім`я [Nпоч:Nкін] Наприклад : літ таб Список [1:23] Для прямокутних таблиць у квадратних дужках, вказується нумерація рядків, а потім нумерація стовпців. Наприклад : дійс таб В[2:5 , 1:4] Рядки в цій таблиці пронумеровані від 2 до 5, а стовпці від 1 до 4. Щоб вказати окремий елемент прямокутної таблиці, після імені таблиці у квадратних дужках вказується номер рядка, потім номер стовпця. Наприклад : В[3,2] Операції над таблицями здійснюються поелементно. Елементи масиву можуть вказуватись як у лівій частині команди присвоєння, так і у виразах. Приклад 1. Переписати дані з таблиці дійсних чисел А[5:100] в таблицю В, замінюючи при цьому від`ємні елементи їх модулями. алг Переписування (дійс табл А[5:100], B[5:100]) арг А рез В поч ціл і для і від 5 до 100 пц якщо А[i]<0 то B[i]:=ABS(A[i]) інакше B[i]:=A[i] все друк B[i] кц кін Приклад 2. Дано цілочисельну таблицю A[1:N,1:N]. Підрахувати, скільки нулів вона містить вище своєї головної діагоналі. алг Нулі (ціл таб А[1:N,1:N], ціл N,K) арг A,N рез K поч ціл i, j K:=0 для і від 1 до N-1 пц для j від і+1 до N пц якщо A[i, j]=0 то K:=K+1 все кц кц друк N кін Допоміжні алгоритми Допоміжні алгоритми — це автономна частина алгоритму, оформлена у вигляді окремого алгоритму.Оформляється він точно так само, як і звичайний алгоритм, і записується після основного алгоритму. Імена змінних в основному і допоміжному алгоритмах незалежні між собою. Приклад. Визначити більше з трьох дійсних чисел. Основний алгоритм. алг БІТ (дійс a,b,c,d) арг a,b,c рез d поч дійс m БІД(a,b,m) БІД(m,c,d) друк d кін Допоміжний алгоритм алг БІД (дійс x,y,z) арг x,y рез z поч якщо x>y то z:=x інакше z:=y все кін Величини, які використовуються при запису допоміжного алгоритму, називають формальними. Звертання до допоміжного алгоритму містять інші імена величин — у першому звертанні написано БІД(a,b,m), а в другому — БІД(m,c,d). Величини, які входять у звертання до допоміжного алгоритму, називають фактичними параметрами. Вони передаються в допоміжний алгоритм замість відповідних їм формальних. Так при першому звертанні формальні змінні x i y отримують фактичні значення a та b, отриманий же результат виконання допоміжного алгоритму z буде повернений в основний алгоритм у змінну m. При другому звертанні до алгоритму БІД значення змінних m,c будуть передані в допоміжний алгоритм формальним параметрам x,y, і при цих значеннях буде виконуватись допоміжний алгоритм. Отримане в результаті цього значення z передається в основний алгоритм у змінну d, і це значення буде результатом виконнання основного алгоритму. В розглянутому допоміжному алгоритмі БІД змінні x,y є вхідними параметрами, а змінна z — вихідним параметром. В загальному випадку допоміжні алгоритми можуть містити один або кілька вхідних і вихідних параметрів, а можуть і не містити жодного. Звертання до допоміжного алгоритму в основному алгоритмі має таку форму запису : ім`я допоміжного алгоритму (список фактичних параметрів) Ті фактичні параметри, які передаються в допоміжний алгоритм, можуть бути змінними, константами і виразами. Параметри, які отримують значення із допоміжного алгоритму, можуть бути лише змінними. Наприклад, звертання до розглянутого допоміжного алгоритму БІД могло б мати вигляд : БІД(15.7, 8+b, m) Між формальними і фактичними параметрами повинна бути відповідність по кількості параметрів, порядку їх слідування і типу даних. Імена відповідних формальних і фактичних параметрів можуть бути однаковими і різними, це не має ніякого значення. Допоміжні алгоритми обчислення значень функції. Якщо в результаті виконання допоміжного алгоритму отримується лише одне значення, то він може розглядатись як алгоритм обчислення значення функції і оформлятись спеціальним чином. У цьому випадку у списку параметрів потрібно вказувати лише формальні аргументи. Отриманий результат позначають спеціальним службовим словом знач. Тип значення вказують перед іменем алгоритму. Відпадає необхідність вказувати списки імен аргументів і результатів. Приклад допоміжного алгоритму обчислення функції. алг ціл факторіал (ціл n) поч ціл i знач:=1; i:=2 поки i<=n пц знач:= знач*і і:=і+1 кц кін Звертання до алгоритму обчислення значення функції реалізується так само, як і звертання до стандартних функцій : у потрібному місці виразу слід вказати ім`я допоміжного алгоритму-функції, після якого в круглигих дужках міститься список фактичних аргументів. Наприклад, для обчислення значення виразу : (a+1)! + s*x! 5! звертання до допоміжного алгоритму обчислення значення функції може виглядати так : rez:=(факторіал(a+1)+s* факторіал(x))/ факторіал(5) Будь-який допоміжний алгоритм-функцію можна оформити і як просто допоміжний алгоритм. Однак не кожен допоміжний алгоритм можна оформити як допоміжний алгоритм-функцію. Рекурсивні алгоритми. Рекурсивним називають алгоритм в якому міститься звертання до цього ж алгоритму як до допоміжного. Приклад. алг ціл Факторіал (ціл n) поч якщо n=0 то знач:=1 інакше знач:=n* Факторіал(n-1) все кін Літерні величини. Величини, значеннями яких є послідовності довільних символів(текст), називаються літерними. Для того щоб виділити текст, який є значенням літерної величини, значення літерних величин беруться в лапки. Наприклад: “немає розв`язку”. Розглянемо декілька операцій, які можна виконувати над літерними величинами. Операція склеювання. Вона позначається знаком “+” і з’єднує два тексти в один. Наприклад : “ін”+“форматика”=“інформатика” Довжиною тексту називається кількість символів в ньому. Довжина тексту А позначається довж(А). Наприклад : довж(“Інформатика”)=11 Існує текст, який не містить жодного символа. Він позначається парою лапок, які стоять поряд “” і називається порожнім текстом. Довжина порожнього тексту дорівнює 0. Будемо вважати, що букви в тексті нумеруються зліва направо, починаючи з одиниці. 1 2 3 4 5 6 7 8 9 10 11 і н ф о р м а т и к а Ще одна операція над текстами, яку ми будемо розглядати, називається вирізкою. З її допомогою можна вирізувати з тексту фрагмент, вказавши номер першого і останнього символу. Наприклад, якщо А=“інформатика”, то А[3:7]=“форма”. Значення літерної величини може бути змінене командою присвоєння. При цьому старе значення цієї величини втрачається. Допускається також часткової зміна літерної величини, коли змінюється фрагмент заданого тексту. Наприклад, якщо А=“квант”, то після виконання вказівки А[4:5]:=“рк” отримаємо А=“кварк”. При цьому важливо, щоб нова частина слова мала таку ж довжину, що й стара. Приклад 1. Написати алгоритм перевертання слова. алг літ перевертання (літ x) поч ціл і знач:=“” для і від 1 до довж(x) пц знач:=x[i:i]+ знач кц кін Приклад 2. Замінити в слові букву “а” на букву “б”. алг заміна (літ x) арг x рез x поч ціл і для і від 1 до довж(x) пц якщо x[i:i]=“a” то x[i:i]:=“б” все кц кін Графіка. Набір команд, який ми розглянемо, невеликий і дуже зручний для малювання найпростіших геометричних фігур. Він буде використовувати прямокутну систему координат на площині. Для кращого розуміння правил виконання графічних команд зручно уявляти собі виконавця, який рухається по площині і малює на ній. Спочатку виконавець знаходиться в точці площини з координатами (0,0) і дивиться вздовж осі у (на Північ). При виконанні графічних команд може змінюватись як точка, де знаходиться виконавець, так і напрям, у якому він дивиться. Команди малювання : вперед(а), назад(а). Для того, щоб намалювати відрізок, необхідно знати його початкову точку, напрямок і довжину. Виконавець за вказівкою вперед(а) малює відрізок довжиною а з початкової точки і у тому напрямку, який був перед початком виконання цієї вказівки. Після виконання вказівки виконавець попадає в кінцеву точку намальованого відрізку, а його напрям залишається незмінним. Команда назад(а) відрізняється від команди вперед(а) тільки тим, що відрізок малюється в напрямку, який протилежний напрямку виконавця. Напрямок виконавця при цьому не змінюється, а сам він попадає в кінцеву точку намальованого відрізку. Команди повороту : наліво(b), направо(b). Виконавець за вказівкою направо(b) повертається на b градусів направо. Виконавець за вказівкою наліво(b) повертається на b градусів наліво. Приклад. Намалювати многокутник. алг многокутник (ціл N) арг N поч ціл і і:=1 поки і<=N пц вперед(1/N) вправо(360/N) і:=і+1 кц кін Команди для малювання зображень, що складається з окремих елементів : малюй, не малюй. В деяких випадках виникає необхідність рухатись по площині без малювання. Для цього дається вказівка не малюй. Після цієї вказівки виконавець перестає малювати відрізки, що задаються командами вперед і назад, які використовуються тепер лише для пересування. Для відміни команди не малюй вводиться команда малюй. Після команди малюй виконавець при виконанні команд вперед та назад починає малювати відрізки.
|