<配列の復習、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記事 バックナンバー目次]