Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Псевдокод
Псевдокод нагадує існуючі мови програмування (такі, як Pascal або C) та на відміну від них є простішим і більш компактним. Крім того, у псевдокоді інколи можна записувати дії алгоритму своїми словами, якщо так ясніше. На відміну від конкретної мови програмування псевдокод дозволяє опустити несуттєві технічні подробиці, такі як обробка помилок, що необхідно у реальній програмі але заважає вивченню алгоритмів. Коментар у псевдокоді починається з // і йде до кінця рядка. Програма на псевдокоді складається з процедур Insertion_Sort(A): Кожна процедура починається з імені, після якого у дужках ідуть імена аргументів процедури (якщо є), і двокрапка. Починаючи з наступного рядка, записується тіло процедури, яке завершується інструкцією end. Рядки у тілі процедури нумеруються для полегшення посилань на окрему конструкцію в алгоритмі. Змінні вважаються локальними стосовно процедури, якщо не зазначене інше. Типи змінних не вказуються (якщо не сказано інакше, вважається, що прості змінні мають тип „дійсне число”). Присвоювання позначається операцією ‘: =’: x: = y. Часто використовуються масиви та об’єкти, які складаються з кількох полів, або атрибутів. Значення атрибута записується Object_Name.Attibute_Name. Наприклад, довжина масиву вважається його атрибутом і записується як A.length. Індекс масиву записується у квадратних дужках ‘[‘ і ‘]’. Операція ‘..’ виділяє частину масиву: A[i.. j] (A[i], [i+1], …, A[j]). Змінна, що позначає масив або об’єкт, вважаться посиланням (покажчиком) на дані, що його складають. Наприклад, якщо ми маємо об’єкти x та y, то після виконання операції присвоювання y: = x для будь-якого поля f виконується умова x.f = y.f. Більше того, якщо ми далі виконаємо операцію y.f: = 3, то і y.f = 3, і x.f = 3, тому що після виконання y: = x обидві змінні вказують на один і той самий об’єкт. Параметри до процедур передаються за значенням: процедура одержує власну копію параметрів і будь-яку зміну параметра всередині процедури ззовні не видно. Але масиви і об’єкти передаються через посилання, тобто процедура одержує копію покажчика, а не копію даних, на які він указує. Тобто, якщо всередині процедури виконується A[j]: = 10 або y.f: = 3, це помітно ззовні. Приклад: неможливо написати процедуру, яка міняє місцями свої параметри. Swap(x, y): t: = x x: = y y: = t end a: = 5 b: = 7 Swap(a, b) print a, b // 5 7 Але можна написати процедуру, яка міняє місцями два елементи масиву, якщо передати сам масив та індекси елементів, які необхідно поміняти місцями: Swap(A, i, j): t: = A[i] A[i]: = A[j] A[j]: = t end Кожна інструкція у тілі процедури записується на окремому рядку. Інколи бажано розмістити більше однієї інструкції в одному рядку, в такому разі між ними ставлять;. Інструкції записуються з відступами, для позначення рівня вкладеності однієї інструкції в іншу. Перелік інструкцій: if умова then інструкція інструкція elseif умова then інструкція інструкція else інструкція інструкція fi Частини elseif … та else — необов’язкові, але в будь-якому разі необхідно завершувати інструкцію командою fi. while умова do інструкція інструкція done repeat інструкція інструкція until умова for змінна: = початок to кінець do інструкція інструкція done for змінна: = кінець downto початок do інструкція інструкція done Зазначимо, що немає потреби у спеціальних командах begin та end для позначення початку та кінця блоку, тому що кожна інструкція є також блоком, що охоплює інструкції всередині неї. Тому необхідно завершувати інструкції спеціальними командами на зразок fi у інструкції if then else fi. Умови можуть складатися з порівнянь на зразок ‘=’, ‘< > ’, ‘< ’, ‘< =’, ‘> ’, ‘> =’ та булевих операцій not, and, or. Порівняння мають більш високий пріоритет (тобто виконується раніше), ніж булеві операції, тому немає потреби писати дужки навколо порівнянь (на відміну від Pascal).
|