2009-10-25
問題
勉強会 |
問1
名前を尋ねて、その人に挨拶するプログラムを書いてください。
余裕があれば:エディタ部品やボタン部品も使ってみてください。
問2
ひつじを1秒ごとに10匹数えるプログラムを書いてください。
余裕があれば:しゃべらせてみてください。
問3
年を尋ねて、その年の13日の金曜日をすべて表示するプログラムを書いてください。
問4
九九の表を表示するプログラムを書いてください。数字は揃えて表示してください。
ヒント:「継続表示」は文字を表示した後、改行しない命令です。
問5
なでしこがインストールされているフォルダ以下に含まれているすべての「.nako」ファイルのファイル名と、その個数を表示するプログラムを書いてください。
ヒント:なでしこのインストールされているフォルダは「ランタイムパス」です。
問6
コンピュータとじゃんけんをするプログラムを書いてください。ただし、人間対人間用にも改造できるようにしてください。
命令:「ボタン選択」
ヒント:勝ち負けの判定は、手を数に変換すると簡単になります。
問7
3桁の数を尋ねて、それを漢数字に変換するプログラムを書いてください。
(例:256→二百五十六 101→百一)
余裕があれば、3桁以外の数にも対応させてみてください。
回答
勉強会 |
答1
「お名前は?」と尋ねて名前に代入。 「{名前}さん、こんにちは!」と言う。
答2
エージェントマーリン召喚 10回 「ひつじが{回数}匹」をエージェント言う 1秒待つ エージェント終了
MS Agentのマーリンを使用しました。声を出すには、必要なファイルを以下のページを参考にインストールしてください。
http://codezine.jp/article/detail/867?p=2
答3
「何年を調べますか?」と尋ねて年に代入 12回 調査日は「{年}/{回数}/13」 もし、調査日の曜日が「金」ならば 調査日を表示
答4
Iで1から9まで繰り返す Jで1から9まで繰り返す I*Jを3で文字列右寄せして継続表示 改行を継続表示
ただ単に答を表示しただけでは表が綺麗にそろいません。そのため、「文字列右寄せ」で整形しています。
答5
ランタイムパス&「*.nako」の全ファイル列挙 NAKOファイル=それ ファイル数=NAKOファイルの要素数 NAKOファイルを言う ファイル数を言う
会場では反復していちいち比較する方を紹介しましたが、こちらの方が明らかにスマートですね…
全ファイル列挙を使わないで書いてみると再帰関数の勉強になるかもしれません。
答6
人間手=「じゃんけん!」を「グー チョキ パー」でボタン選択 人間手の「グー」を0に置換 人間手=人間手の「チョキ」を1に置換 人間手=人間手の「パー」を2に置換 コンピュータ手=3の乱数 コンピュータ手を表示 (人間手-コンピュータ手)で条件分岐 0ならば 「あいこ」を表示 1ならば 「負け」を表示 2ならば 「勝ち」を表示 -1ならば 「勝ち」を表示 -2ならば 「負け」を表示
このソースでは少々泥臭いのですが、下のクジラさんのソースのように「(先手N - 後手N + 3) % 3」とするとたったこれだけで勝ち負けを判定できます!
答7
数字=「数は?」を尋ねる 漢数字=「,一,二,三,四,五,六,七,八,九」を「,」で区切る 漢字位=「百,十,」を「,」で区切る 3回 数字の回数から1文字抜き出す もし、それ<>1 || 回数=3ならば 漢数字[それ]を継続表示 漢字位[回数-1]を継続表示
「名前は?」と尋ねる。
「{それ}さん、こんにちは」と言う。
===
普通ですが・・・
~~~~~
!「aquestalk.nako」を取り込む
10回
母艦=回数
「ひつじ;が」とAQT話す
「<NUMK VAL={回数} COUNTER=ひき>」とAQT話す
1秒待つ。
終わる。
~~~~~
~~~
#-----------------------------------------------------------------------
# じゃんけんプログラム
#-----------------------------------------------------------------------
相手一覧=「人間
コンピューター」
手一覧=「0:ぐー
1:ちょき
2:ぱー」
「誰と勝負しますか?」を相手一覧で、
ボタン選択して相手に代入。
真の間
勝負実行
勝負判定
「続けますか?」と二択。
もし、それがいいえならば、終わる。
●勝負実行
「先手:どの手を出しますか」を手一覧でボタン選択して、
先手に代入。
もし、相手=「人間」ならば
「後手:どの手を出しますか」を手一覧でボタン選択して、
後手に代入。
違えば
手番号=3の乱数
後手=手一覧¥手番号
●勝負判定
先手N=INT(先手)
後手N=INT(後手)
判定番号は、(先手N - 後手N + 3) % 3
判定番号で条件分岐
0ならば
結果=「あいこ」
1ならば
結果=「後手の勝ち」
2ならば
結果=「先手の勝ち」
「先手:{先手} 後手:{後手}」を表示
「結果:{結果}」を表示。
#-----------------------------------------------------------------------
~~~
候補=「,壱,弐,参,四,五,六,七,八,九」を「,」で区切る。
「数字を入力してください」と尋ねて、NOに代入。
NOを文字列分解
「{候補\それ\0}百{候補\それ\1}十{候補\それ\2}」を表示
~~~
~~~
LIST=ランタイムパス&「*.nako」の全ファイル列挙
F個数=LISTの要素数
「ファイルの個数:{F個数}
{LIST}」をメモ記入。
~~~
「回」を使うと、「回数」が混乱するということですが、
変数を使うことで回避できます。
~~~
文字サイズは12
9回
Tateは回数。
10,Tate*30へ回数を文字表示。
Tate*50-10,0へ「{回数}の段」を文字表示。
9回
Yokoは回数。Kekka=Tate*Yokoを2で文字列右寄せ。
Yoko*50,Tate*30へKekkaを文字表示。
~~~