Метричні простори. Абсолютна величина і норма матриці. Псевдокод, страница 2

Коментар у псевдокоді починається з // і йде до кінця рядка.

Програма на псевдокоді складається з процедур

Insertion_Sort(A):
...
end

Кожна процедура починається з імені, після якого у дужках ідуть імена аргументів процедури (якщо є), і двокрапка. Починаючи з наступного рядка, записується тіло процедури, яке завершується інструкцією 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).

Розширення псевдокоду

·  abs() – абсолютна величина аргумента

·  return() – перериває виконання функції і повертає її значення

·  sqrt() – квадратний корінь

·  sqr() – квадрат числа

·  factorial() – повертає факторіал аргумента

·  div – цілочислове ділення

·  round() – округлення до найближчого цілого

·  Дійсні операції інкременту та декременту (наприклад, i++ та i--),  а також операції +=, -=, *=.

·  A.lengthI, A.lengthJ – кількість рядків і стовпців матриці відповідно. Але в деяких алгоритмах для цих цілей можуть використовуватися деякі змінні (n і m, наприклад) для зручності написання коду.

·  Імена масивів бажано позначати великими літерами

·  Алгоритми можуть використовувати функції з попередніх алгоритмів без їх попереднього опису

·  Індекс масиву може починатися як з 0, так і з 1.