<配列の復習、2次元配列、Array関数で配列の初期化>
こんにちは、三流プログラマーのKen3です。 今回は、 配列の復習、2次元配列、Array関数で初期化 そんなお話です。/* * 1.今回のキッカケ */
前回、Sessionを使用した名前の管理、 じゃんけんプログラムを作りました。 今回はそのプログラムを改良して、 配列を使用したプログラムを書いてみたいと思います。 ※変に複雑にやせている女性より、ふっくらした女性がいいと思うけど・・・ えっ、でもCtrl+CとCtrl+Vで着膨れしたセンスないプログラム(女性)はチョット? う~ん、いい表現が、、あっ、外見同じでも体脂肪の違いって感じで・・/* * 2.勝手な流れの仕様書 */
「先輩、仕様書ください、口頭じゃなくて紙で。でないと組めませんよ」 ちぇ、しょうがねえなぁ、簡単にテキストファイルで書くか。 仕様.TXT ~~~~~~~~ 言語はASPで動作するVBScriptで。 (※言語も書いとくか) 関数名は Sub HANTEI(strNO) (※関数名なんて好きでいいんだけど) 受け取りは文字列で"1","2","3"を受け取る 1 グー 2 チョキ 3 パー (※受け取りパラメータの説明を書いて) 処理 ^^^^ 入力値の判断、エラーならメッセージを表示させ抜ける エラーメッセージは [XXXX]は不正な入力です (※メッセージなんてそれらしく作ってよ、 えっ、仕様書で指定しないくせに、あとから文句言うなって?) 乱数でコンピュータの手を発生させる グー・チョキ・パーを乱数で。 結果の判断と勝負手の表示 USER_NAME(←グローバル変数に格納されてます)さんの手は、グーです コンピュータの手はパーです 引き分けです アナタの勝ちです 私(コンピュータ)の勝ちです と、結果を画面に出力する リターン値は無しで、関数を終了する 関数仕様書作りのポイント ~~~~~~~~~~~~~~~~~~~~ まず重要なのは、入力(INパラメータ)・処理を詳しく・出力(戻り値) 何を受け取って、XXXXと処理をして、XXXと上位関数に結果を返す。 リターン値無しでも私は気にしないけど、 ~~~~~~~~~~~~~~ 無い場合でも必ず0を返す(0正常)と書かないと気になる君も居ます。 ほかに必要なのは、処理に入れるんだけど、 エラー処理は?どうするか? と 意外と質問が多いのが、メッセージの文章。 メッセージ適当でいいよとお任せで渡すけど、 プログラムよりメッセージ考えてた/メッセージに悩んでいた(笑) なんてプログラマーが居るのも事実。 あとは、簡単な仕様書を元に、説明時に詰めていくんだけど。 ※ここで、問題点を話し合って、仕様変更。 パラメータは0~2にしてほしいとか、処理方法とか。 でも仕様書はそのまま。 そんなんで、初期の仕様書のまま納品なんてパターン多いかも。 お客はわからないよ・・なんて思わないで更新しようね仕様書の。 でもそんなことしていると、 プログラマーってより、ワープロ屋って感じ(これホント)/* * 3.この仕様書から作られたプログラム */
こんな仕様書を書くなら、自分で作ったほうがハヤイな・・・ と 思いつつ、仕様書を渡し作業をお願いする。 自分は、上位ルーチンの作成(Sessionで名前管理)や次の関数仕様書を作成する And 3が月前に納品した他のシステムのバグ対応、新規システムの打ち合わせ と平行して業務を実行する。 作成された(できあがった)サブ関数をもらいました。
Sub HANTEI(strNO) 'ユーザーの手を受取り判断する Dim nCON 'コンピュータの手1~3の数値が入る Dim nPC 'ユーザーさんの手 Dim strTE(3) '(*1)配列変数を宣言 strTE(1) = "グー" '(*2)配列にメッセージを代入 strTE(2) = "チョキ" strTE(3) = "パー" '入力値の判断、エラーならメッセージを表示させ抜ける 'If文で1,2,3以外を判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then Response.Write "[" & strNO & "]は不正な入力です" Exit Sub '<--Exit Subを使用してここでプログラムを抜ける End If 'コンピュータの手を決定 Randomize ' 乱数発生ルーチンを初期化します。 nCON = Int((3 * Rnd) + 1) '1 から 3 までの乱数を発生させます。 '結果判断と表示 'ユーザーの手を表示する nPC = CInt(strNO) 'CInt関数で数値型に変換する Response.Write USER_NAME & "さんの手は、" Response.Write strTE(nPC) & "です<br>" '(*3)ここでnPC番目を表示 '(*4)同様にコンピュータの手を表示する Response.Write "コンピュータの手は" & strTE(nCON) & "です<br>" '結果の判断 'まず、引き分けを判断 If nPC = nCON Then Response.Write "引き分けです<br>" '次に自分が勝ちの手を判断 グーvsチョキ,チョキvsパー,パーvsグー If nPC = 1 And nCON = 2 Then Response.Write "アナタの勝ちです<br>" If nPC = 2 And nCON = 3 Then Response.Write "アナタの勝ちです<br>" If nPC = 3 And nCON = 1 Then Response.Write "アナタの勝ちです<br>" 'コンピュータが勝ちか判断 グーvsパー,チョキvsグー,バーvsチョキ If nPC = 1 And nCON = 3 Then Response.Write "私(コンピュータ)の勝ちです<br>" If nPC = 2 And nCON = 1 Then Response.Write "私(コンピュータ)の勝ちです<br>" If nPC = 3 And nCON = 2 Then Response.Write "私(コンピュータ)の勝ちです<br>" End Sub |
Sub HANTEI(strNO) 'ユーザーの手を受取り判断する Dim nCON 'コンピュータの手1~3の数値が入る Dim nPC 'ユーザーさんの手 Dim strTE(3) '(*1)配列変数を宣言 strTE(1) = "グー" '(*2)配列にメッセージを代入 strTE(2) = "チョキ" strTE(3) = "パー" Dim nMSGNO 'メッセージの番号 Dim strMSG(3) 'メッセージ表示用の配列 strMSG(1) = "アナタの勝ちです<br>" 'メッセージの代入 strMSG(2) = "引き分けです<br>" strMSG(3) = "私(コンピュータ)の勝ちです<br>" '入力値の判断、エラーならメッセージを表示させ抜ける 'If文で1,2,3以外を判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then Response.Write "[" & strNO & "]は不正な入力です" Exit Sub '<--Exit Subを使用してここでプログラムを抜ける End If 'コンピュータの手を決定 Randomize ' 乱数発生ルーチンを初期化します。 nCON = Int((3 * Rnd) + 1) '1 から 3 までの乱数を発生させます。 '結果判断と表示 'ユーザーの手を表示する nPC = CInt(strNO) 'CInt関数で数値型に変換する Response.Write USER_NAME & "さんの手は、" Response.Write strTE(nPC) & "です<br>" '(*3)ここでnPC番目を表示 '(*4)同様にコンピュータの手を表示する Response.Write "コンピュータの手は" & strTE(nCON) & "です<br>" '結果の判断 ' グー(1) チョキ(2) パー(3) ←コンピュータの手 'グー(1) 2引き分け 1勝ち 3負け 'チョキ(2) 3負け 2引き分け 1勝ち 'パー(3) 1勝ち 3負け 2引き分け '↑自分の手 '勝負の結果表を作る Dim strCHK(3, 3) '3x3の結果の表 strCHK(1, 1) = 2 : strCHK(1, 2) = 1 : strCHK(1, 3) = 3 strCHK(2, 1) = 3 : strCHK(2, 2) = 2 : strCHK(2, 3) = 1 strCHK(3, 1) = 1 : strCHK(3, 2) = 3 : strCHK(3, 3) = 2 '結果を代入 nMSGNO = strCHK(nPC, nCON) '結果表の値を代入 '結果のメッセージを表示する(メッセージ番号を使用して) Response.Write strMSG(nMSGNO) End Sub |
Sub HANTEI(strNO) 'ユーザーの手を受取り判断する Dim nCON 'コンピュータの手1~3の数値が入る Dim nPC 'ユーザーさんの手 '配列にメッセージを代入 strTE = Array("", "グー", "チョキ", "パー") Dim nMSGNO 'メッセージの番号 'メッセージ表示用の配列 strMSG = Array("", "アナタの勝ちです<br>", "引き分けです<br>", _ "私(コンピュータ)の勝ちです<br>" ) '入力値の判断、エラーならメッセージを表示させ抜ける 'If文で1,2,3以外を判断する If strNO <> "1" And strNO <> "2" And strNO <> "3" Then Response.Write "[" & strNO & "]は不正な入力です" Exit Sub '<--Exit Subを使用してここでプログラムを抜ける End If 'コンピュータの手を決定 Randomize ' 乱数発生ルーチンを初期化します。 nCON = Int((3 * Rnd) + 1) '1 から 3 までの乱数を発生させます。 '結果判断と表示 'ユーザーの手を表示する nPC = CInt(strNO) 'CInt関数で数値型に変換する Response.Write USER_NAME & "さんの手は、" Response.Write strTE(nPC) & "です<br>" '(*3)ここでnPC番目を表示 '(*4)同様にコンピュータの手を表示する Response.Write "コンピュータの手は" & strTE(nCON) & "です<br>" '結果の判断 ' グー(1) チョキ(2) パー(3) ←コンピュータの手 'グー(1) 2引き分け 1勝ち 3負け 'チョキ(2) 3負け 2引き分け 1勝ち 'パー(3) 1勝ち 3負け 2引き分け '↑自分の手 '勝負の結果表を作る strCHK = Array( "", Array( 0, 2, 1, 3 ), _ Array( 0, 3, 2, 1 ), _ Array( 0, 1, 3, 2 ) ) '結果を代入 nMSGNO = strCHK(nPC)(nCON) '結果表の値を代入 '結果のメッセージを表示する(メッセージ番号を使用して) Response.Write strMSG(nMSGNO) End Sub |
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]
まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。
次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません
広告:
DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く
VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]