ギリギリ行けるお一人様のライン

CASLIIの問題で、わからないものがあるので解き方と回答を教えていただきたいです。
入力された整数を辺の長さ(文字数)とする正方形を、文字*で出力する。
例)
****
* *
* *
****
↑辺の長さが4のときの正方形です。

REP3 START
IN REC,LEN
LD GR1,REC
(a) GR1,MSK
ST (b)
LAD GR1,-1,GR1
ST GR1,POS
OUT LN1,LEN
LOOP LAD (c)
CPA GR1,=0
(d) FIN
CPA GR1,=1
JMI SKIP
LD GR0,LN2
LD GR2,POS
ST (e)
OUT LN2,LEN
JUMP LOOP
SKIP OUT LN1,LEN
FIN RET
REC DS 256
LEN DS 1
POS DS 1
MSK DC #000F
LN1 DC (f)
LN2 DC '* '
END

(a)~(f)が答えの入る場所です。
答だけでもいいので、ご教示願います。

A 回答 (2件)

もう少し精細な仕様が無いとコードから推測するしかないが、


入力する整数は最初の一文字分だけが有効で9までのサイズの正方形を表示するということでいい?
0が先頭文字なら何も出力しない。
投稿時の空白文字制限で空白が一文字になってしまっているが、
ラベルLN2の文字定数は*の後に8個のスペースがあったと推測。
おおまかに動作を説明すると、
最初と最後の行はLN1のデータをサイズ分まで表示し、
途中の行は右辺の*をLN2の適切な位置に書き込んでからその位置まで表示する。
面倒なのでインデントのための空白やLN2の内容はそのまま削られるに任せる。
穴埋め問題なので分からなくはないと思う。

REP3 START
IN REC,LEN
LD GR1,REC
AND GR1,MSK ; (a)
ST GR1,LEN ; (b)
LAD GR1,-1,GR1
ST GR1,POS
OUT LN1,LEN
LOOP LAD GR1,-1,GR1 ; (c)
CPA GR1,=0
JMI FIN ; (d)
CPA GR1,=1
JMI SKIP
LD GR0,LN2
LD GR2,POS
ST GR0,LN2,GR2 ; (e)
OUT LN2,LEN
JUMP LOOP
SKIP OUT LN1,LEN
FIN RET
REC DS 256
LEN DS 1
POS DS 1
MSK DC #000F
LN1 DC '*********' ; (f)
LN2 DC '* '
END
    • good
    • 0
この回答へのお礼

長い穴埋め問題になると、途端にわからなくなってしまいます・・・。
これからじっくり見て、確認していきます。
有難うございました。

お礼日時:2010/07/23 00:37

> LD GR1,REC



LD GR1, LEN じゃない?

これだけじゃなんなので

> MSK DC #000F
> LN1 DC (f)
> LN2 DC '* '



> (a) GR1,MSK
> ST (b)

をみるに、15 文字を上限としてるようです。
(a): AND, (b): GR1, LEN

> LOOP LAD (c)
> CPA GR1,=0
> (d) FIN

(c) はループカウンタ減算、(d) は条件JUMPのどれか。

> LD GR0,LN2
> LD GR2,POS
> ST (e)

(e) は右側の '*'、GR2 でインデックスして GR0 を書き込む
    • good
    • 0
この回答へのお礼

> LD GR1,REC はこのままで大丈夫でした。
文字数として入力される整数は1以上9以下ということでした。
詳しく書かなくてすみません。
ありがとうございました。

お礼日時:2010/07/23 00:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報