Printing 打印输入中给定的字符数
我必须编写一个Occam程序,从标准输入中读取字符,然后打印出尽可能多的“#”字符作为输入字符的值。 该程序必须有2个进程。 第一个过程过滤输入。 它接受数字和输入端的“q”字符 以下是一个输入示例: ASDF2351 q 以及它传递的信息: 2 3 5 1 第二个过程必须打印出与数字值一样多的#字符 因此,示例输出如下: ############ 我试着写,但我不熟悉奥卡姆Printing 打印输入中给定的字符数,printing,occam-pi,Printing,Occam Pi,我必须编写一个Occam程序,从标准输入中读取字符,然后打印出尽可能多的“#”字符作为输入字符的值。 该程序必须有2个进程。 第一个过程过滤输入。 它接受数字和输入端的“q”字符 以下是一个输入示例: ASDF2351 q 以及它传递的信息: 2 3 5 1 第二个过程必须打印出与数字值一样多的#字符 因此,示例输出如下: ############ 我试着写,但我不熟悉奥卡姆 #USE "course.lib" PROC main(CHAN BYTE keyboard, screen, erro
#USE "course.lib"
PROC main(CHAN BYTE keyboard, screen, error)
CHAN INT numberinput:
BYTE character:
PROC justnumbers(CHAN BYTE input, CHAN INT output)
BYTE ch:
BOOL reading:
INT ret:
SEQ
reading := TRUE
WHILE reading
SEQ
input ? ch
IF
-- idk that if i can do the following part like this:
-- (ch>='0') AND (ch<='9')
-- ret := ch - '0'
-- ch = 'q'
-- ret := -1
-- TRUE
-- SKIP
ch = '0'
ret:=0
ch = '1'
ret:=1
ch = '2'
ret:=2
ch = '3'
ret:=3
ch = '4'
ret:=4
ch = '5'
ret:=5
ch = '6'
ret:=6
ch = '7'
ret:=7
ch = '8'
ret:=8
ch = '9'
ret:=9
ch = 'q'
SEQ
ret:=-1
reading := FALSE
TRUE
SKIP
output ! ret
:
PROC printer(CHAN INT input)
INT num:
BOOL reading:
SEQ
reading := TRUE
WHILE reading
SEQ
input ? num
IF
num <> -1
WHILE num > 0
SEQ
-- here i wanna print the '#' character
num := num - 1
num = -1
reading := FALSE
:
SEQ
PAR
justnumbers(keyboard, numberinput)
printer(numberinput)
out.string("*n",0,screen)
:
#使用“course.lib”
PROC main(字节键盘、屏幕、错误)
成龙国际号码输入:
字节字符:
PROC JustNumber(通道字节输入,通道整数输出)
字节ch:
布尔阅读:
国际网:
序号
阅读:=正确
读书时
序号
输入?中国
如果
--idk表示,如果我能像这样做以下部分:
--(ch>='0')和(ch 0
序号
--这里我要打印“#”字符
num:=num-1
num=-1
读数:=假
:
序号
标准杆数
仅数字(键盘、数字输入)
打印机(数字输入)
out.string(“*n”,0,屏幕)
:
让我们一步一步走,好吗?
这里:打印
让我们一步一步走,好吗?
这里:打印
PROC printer( CHAN INT input,
CHAN BYTE output
)
INT aNUM:
BOOL aReadingFLAG IS TRUE:
WHILE aReadingFLAG
SEQ
input ? aNUM
IF
aNUM = -1 -- num = -1
aReadingFLAG := FALSE -- SET aReadingFLAG, FALSE
aNUM > 0 -- num > 0
SEQ repeat FOR aNUM -- SEQ <-an-iterator-syntax->
out.string( "#", 0, output ) -- OUT print the '#' character
TRUE -- num < -1
SKIP -- num = 0
: -- printer()
PROC justnumbers( CHAN BYTE input,
CHAN INT output
)
BYTE aCHAR:
BOOL aReadingFLAG IS TRUE:
WHILE aReadingFLAG
SEQ
input ? aChar
CASE aChar -- SWITCH( aChar ):
'q' -- CASE 'q':
SEQ SEQ
aReadingFLAG := FALSE -- SET aReadingFLAG, FALSE
output ! -1 -- OUT -1
'1', '2', '3', '4', '5', '6', '7', '8', '9'
output ! ( ( INT aChar ) - ( INT '0' ) )
: -- justnumbers()