Printing 打印输入中给定的字符数

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

我必须编写一个Occam程序,从标准输入中读取字符,然后打印出尽可能多的“#”字符作为输入字符的值。 该程序必须有2个进程。 第一个过程过滤输入。 它接受数字和输入端的“q”字符

以下是一个输入示例:

ASDF2351 q

以及它传递的信息:

2 3 5 1

第二个过程必须打印出与数字值一样多的#字符

因此,示例输出如下:

############

我试着写,但我不熟悉奥卡姆

#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()