投稿
<(_ _)> FukanoShouki
自分は、配列変数が苦手で、色々な人の作品を見ていたら、配列変数が使われているものが多くて、やはり配列変数は理解しておかないとまずいと判断したのですが、初心者講座ではいまいち理解できませんでした。初心者講座以外でインターネットで配列変数について詳しく書いてあるものってありますか?あれば教えてください。よろしくお願いします。
1そうだね
プレイ済み
返信[1]
親投稿
ASA fusuian
僕は12/29の活動でクラスの出席番号に例えてみました。
0そうだね
プレイ済み
返信[2]
親投稿
Godot orz_127
配列のどの部分が解らないのでしょう? 既に初心者講座を参照しているのなら、別のページを見ても同じかもです。 何処まで解っていて何処が解らないのか? 説明されているけど、この文の意味が解らない。 2次元配列になると解らない。 と言った具体的にひっかかって解らなくなっている部分を書いてくれなければれば何処を説明していいか解りません。 解っていているところ、解らなくなっているところをここで書くことはできませんか?
0そうだね
プレイ済み
返信[3]
親投稿
<(_ _)> FukanoShouki
ASAさん、ありがとうございます。参考にさせてもらいます。
0そうだね
プレイ済み
返信[4]
親投稿
<(_ _)> FukanoShouki
Godotさん、わかりました。少し時間がかかるかもしれません。待たせてしまって本当にすみません。
0そうだね
プレイ済み
返信[5]
親投稿
私は野球のスコアボードで例えた事があります。身近な所にあったりするものですよ。
0そうだね
プレイ済み
返信[6]
親投稿
ASA fusuian
Godotさん、いらだちはもっともですが、プログラミング初心者が、配列の何がわからないか説明できないのはしょうがないです。 BASICの最初の難関のひとつだと思います。
0そうだね
プレイ済み
返信[7]
親投稿
ASA fusuian
そういえば10匹のインベーダーが動き回るプログラムは配列の実例でもありました。僕の11/30の活動です。
0そうだね
プレイ済み
返信[8]
親投稿
<(_ _)> FukanoShouki
みけらんジェロさん、なるほど、そんな風に覚えるといいのですね。せっかくなのでASAさんのクラス名簿で覚えてみます
0そうだね
プレイ済み
返信[9]
親投稿
Godot orz_127
苛立つているのではなく、単に何処を説明して良いのかわからなかったので、具体的に解らなくなっている所を質問しただけでした。 初心者講座をすでにみているということだつたので何処かピンと来ない説明とかがあってそこでひっかかっているのかな?と。 誤解させたなら、すみません m(__)m
0そうだね
プレイ済み
返信[10]
親投稿
<(_ _)> FukanoShouki
ASAさん、拝見させていただきました。とても分かりやすく解説されていて助かりました。本当にありがとうございます。
0そうだね
プレイ済み
返信[11]
親投稿
<(_ _)> FukanoShouki
自分で何処がわからないのかもう一回考えたところ、変数がいっぱいあって頭の整理ができなくなるのが原因でした。例えば、キーボード?のサンプルのプログラムで、for I= (数字) TO KCNTー1のところで、KCNTのようにTOの次に変数が来るとわからなくなるみたいです。
0そうだね
プレイ済み
返信[12]
親投稿
頭で理解できないのなら「紙に書きましょう」。プログラムだけでなく勉強や作業の基本でもあります。 個人的オススメは5mm方眼紙。ホームセンターや100均で売ってますよ。
1そうだね
プレイ済み
返信[13]
親投稿
<(_ _)> FukanoShouki
すみません、少し文章がおかしかったです。
0そうだね
プレイ済み
返信[14]
親投稿
<(_ _)> FukanoShouki
みけらんジェロさん、ありがとうございます。ちょうど今紙があったので早速やってみたいと思います。
0そうだね
プレイ済み
返信[15]
親投稿
変数は基本的に実行時にはその中身になると考えればいいんじゃないかと思います。なので上記の場合、KCNT=18となっていてDIMの時はその時点での値なのでN$[18]、FORが実行される時も値は変更されてなくてKCNT=18のままなので、FOR I=0 TO 18-1です。 (実は厳密にはループ時に判定されるので違うのですが) 都度頭の中で変数を展開してやれば変数が減って(?)わかりやすくなるかもです。
0そうだね
プレイ済み
返信[16]
親投稿
<(_ _)> FukanoShouki
でんぺんさん、なるほど、勉強になります。
0そうだね
プレイ済み
返信[17]
親投稿
Godot orz_127
配列自体ではなく、例題のプログラムで解らなくなってしまったみたいですね^^; 確かに初めの内は変数が多くなって来ると途中で何が何だか解らなくなってしまいます。 ノートにメモしたり、プログラムにコメントを入れながら見ていくと良いかと思います。 そのプログラム直すと以下のようになります。 サンプルを理解するだけなら直せるところは直してしまっても良いかもです。 DIM N$[18] FOR I=0 TO 17 READ N$[I] NEXT 「KCNT-1」のところ、KCNTの値は変化せず固定値です。 なので以下のようにコメントをいれておくとよいかと。 … TO KCNT-1 '=17
1そうだね
プレイ済み
返信[18]
親投稿
Godot orz_127
配列の定義は、入れ物の数を指定して定義します。 ここでは18個の文字列の入れ物を用意しています。 ここからが、はまりやすいところですが、入れ物を参照する際、最初の入れ物は、1番ではなく、0番からはじまります。 よって、ここでは、0~ 17が入れ物の番号となります。 0から初めて 配列を定義したときの数-1までとなります。 これは、配列を扱うときの決まり事なので、公式の様に覚えてしまう方がいいです。 KCNTの数で配列を 準備したので参照時のFOR文の終わりはもう自動的にKCNT-1ですw
1そうだね
プレイ済み
返信[19]
親投稿
Godot orz_127
ちなみにBASICでも、別のBASICでは、配列参照が0からではなく1から始まるものもあった、と記憶しています。 この仕様だったらわかりやすかったのですが、残念ながららプチコン3は0始まりです^^; でもBASIC以外の多くの言語でも配列の参照は0始まりが多ぃ(主流?)なので後に別な言語に移るにしても慣れておくと良いです。 そう言えばVisual Basicと言う言語はプログラムの始まりのところで定義しておくと、配列参照の始まりを0始まりか1始まりかを好きなようにえらべたかと。
1そうだね
プレイ済み
返信[20]
親投稿
<(_ _)> FukanoShouki
分かりやすく解説してくだって本当にありがとうございます。
0そうだね
プレイ済み
返信[21]
親投稿
Godot orz_127
だめ押しでもう少しw イメージ的な話ですが… ルービックキューブ 上から見ると(何処が上だ?という突っ込みはなしでw) 3x3の2次元配列です。 定義してみると以下のようになります。 DIM RC[3,3] しかし、なんと実は下に同じ2次元配列が後2つ有ります。 実体は、2次元配列が3層に重なった3次元配列です。 定義してみると以下の様になります。 DIM RC[3,3,3]
1そうだね
プレイ済み
返信[22]
親投稿
Godot orz_127
さてここからがややこしいw 一般に1次元は線、2次元は平面、3次元は立体となっていたかと。 あれ?待てよ… と言うことは、配列じゃない変数は、点の0次元配列か?w 話を戻すと、4次元は、縦軸横軸奥行きの立体に加えて時間軸が加わった様な。 プチコン3は確か4次元迄対応していたかと。
1そうだね
プレイ済み
返信[23]
親投稿
Godot orz_127
で、4次元配列のお話しですが… ルービックキューブをもうひとつ持って来てください。 3次元配列が2つの4次元配列の状態になります。 ていぎしてみると以下のような感じでしょうか? DIM RC[2,3,3,3] もしかしたら、以下のように書くのかもですが。 DIM RC[3,3,3,2] どちらにしても3x3x3の配列が2つということで用意した箱の総数は同じですw かえって混乱してしまったかも知れません^^; その場合は、ここら辺の話はなかったことに。 忘れてくださいw
1そうだね
プレイ済み
返信[24]
親投稿
Godot orz_127
3次元以上はややこしくなるので、 プログラム上わかりにくくなるならまだ使わない方が良いです。 例えば、以下の様に DIM RC1[3,3] DIM RC2[3,3] DIM RC3[3,3] 各層毎に2次元で分けてていぎらすれば3次元配列のルービックキューブも2次元だけで表せます。
1そうだね
プレイ済み
返信[25]
親投稿
<(_ _)> FukanoShouki
変な質問ですがRCは変数ですよね? 間違っていたらすみません
0そうだね
プレイ済み
返信[26]
親投稿
<(_ _)> FukanoShouki
頑張って解読してます。皆さんのおかげでだいぶわかるようになりました。
1そうだね
プレイ済み
返信[27]
親投稿
Godot orz_127
はい、ルービックキューブを例としたのでわかりやすいようにRCという変数名にしてみました。 言われてみれば… かえってわかりにくかったのかな^^; 最初のうちは、人のプログラムだとどれがコマンドか区別つきにくかった気がするし… 単純にAとかにしておけば良かったかも^^; すみません考慮不足でした。
0そうだね
プレイ済み
返信[28]
親投稿
人のプログラムを解析するときは変数の役割だけでも別にメモしておくとわかりやすいかもしれませんねー。 あと変数には普通の変数として使う以外に定数として使う場合もあります。定数というのは通常の変数はプログラム中で値が変わるようなコードを書きますが、定数の役割の変数は始めに一度値を設定したらもう二度と変更しません。 定数は言語によっては専用の命令を持っていますがプチコンにはないので通常の変数を定数として(自分で変更しないように気をつけて)使うことになります。 プログラムを読んでいるときに、そのどちらの役割で変数を使っているかがわかるとさらに読みやすくなると思いますよ。 (さっきのKCNTはおそらく定数としての変数です。プログラムを作る人によっては、定数には必ず頭にKをつけるなどの自分ルールをつけている場合もありますので、それもわかるとさらに読みやすいでしょうね)
0そうだね
プレイ済み
返信[29]
親投稿
<(_ _)> FukanoShouki
Godotさん、そんなことありません。とても分かりやすいです。 でんぺんさん、ありがとうございます。とても勉強になります。
0そうだね
プレイ済み