Как сделать пузырьковую сортировку в Оккаме
Я пытаюсь программировать на Occam и думаю, что это не так легко понять, потому что документация не так хороша. Во всяком случае, я надеюсь, что кто-то мне поможет.
Я пытаюсь просто научиться делать простую программу. Пузырь, вид в оккам.
#INCLUDE "course.module"
[32]INT x:
INT aux:
BOOL flag:
flag:= TRUE
aux:=0
--put values on the array
SEQ k=0 for 10
x[i] = -x[i]
-- bubble sort
WHILE (flag)
SEQ i = 0 for 9
IF
x[i] > x[i+1]
aux:= x[i]
x[i]:= x[i+1]
x[i+1] := aux
flag:= false
:
Я получил это изображение на терминале: Что не так с этим кодом?
1 ответ
occam-pi чувствителен к отступам
Несколько подсказок в коде могут помочь, а любезность TiO-IDE может предоставить место для онлайн-экспериментов:
#INCLUDE "course.module"
PROC main( CHAN BYTE keyboard, screen, error )
[32]INT x:
INT aux:
BOOL flag:
SEQ -- ------------------------- BoSEQ:
SEQ i = 0 FOR 31 -- SEQ used as <-an-iterator->
x[i] := i -- put values on the array
SEQ i = 0 FOR 10 -- SEQ used as <-an-iterator->
x[i] := -x[i] -- put values on the array
flag := TRUE
WHILE ( flag ) -- WHILE
SEQ -- SEQ as a bubble sort
SEQ i = 0 FOR 10 -- SEQ used as <-an-iterator->
IF -- IF
x[i] > x[i+1] -- CASE: x[i] > x[i+1]
SEQ -- SEQ of steps
aux := x[i] -- 1
x[i] := x[i+1] -- 2
x[i+1] := aux -- 3
-- -- -- -- -- -- -- -- -- -- -- -- -- --
-- INTERESTING [occam-pi] FEATURE IS, THAT
-- [occam-pi] CAN _SWAP_ IN-PLACE
-- USING JUST x[i], x[i+1] := x[i+1], x[i]
TRUE -- OTHERWISE:
SKIP
-- SEQ used above as <-an-iterator-> got exhausted
flag := FALSE -- SET FALSE
-- ----------------------------- EoSEQ:
: -- main()