投稿
<(_ _)> FukanoShouki
54行で DIM N$(KCNT)と書いてあったのに、56行で N$[I]となっているのですが、KNCTがどこでIに変わったのかと、IじゃなくてKNCTだけにしてもプログラムは動くのか、です。 よろしくお願いします<(_ _)>
1そうだね
プレイ済み
返信[1]
親投稿
DIMのところはN$という名前の配列をいくつ用意するかという意味でKCNTを使っています。なのでKCNTには18が入っているので18個の値が入るN$を用意している感じになります。 それに対してFORの方は実際にこのN$にREAD命令で読み込んできた値を入れているわけですが、この時は全ての箱に値を入れたいのでIで正解です。Iは0〜KCNT-1(つまり17)まで変化するので、N$[0],N$[1]...と次々に値を入れていく感じになるからです。(KCNTを-1しているのは配列は0から始まるからです) もしREADの部分のIをKCNTにしてしまったらREADで読み込んだ値をKCNTであるN$[18]に入れようとしてエラーになります。( 配列は0から始まるので宣言した値-1までしか利用できないので)
2そうだね
プレイ済み
返信[2]
親投稿
otta777 otta777a
54行目の変数KCNTは文字列配列変数の変数の数で 56行目の変数Iは何番目の文字列配列変数にデータを読み 込むかを指定するものです。 56行目をREAD N$[KCNT]としてしまうとN$[10]にデータを 読み込もうとしてエラーになってしまいます。 DIM N$[10]としたばあいN$[0]~N$[9]までの10個の 文字列配列変数が使用可能なためN$[10]は扱えません。
2そうだね
プレイ済み
返信[3]
親投稿
余談ですが、このKCNTという変数は定数という意味で使っています。定数というのは変わらない数みたいな意味で、専用の命令がある言語もありますがSMILE BASICにはないので変数で代用している感じです。 なぜそうするかというと直接数値を書いてしまうと後からやっぱり数を変えようかなと思ったときに上記だとDIMの場所とFORの場所の2箇所を変える必要が出ててしまいます。しかしこの定数を使えば、1箇所の値を変えるだけで全てに対応出来るので便利です。(今回の場合は2箇所で済みますが実際はもっと変更箇所が出るのが普通です) 他にもコードの可読性が良くなるなどの理由もあるので、自分でも積極的に活用するといいと思いますよ。
2そうだね
プレイ済み
返信[4]
親投稿
けい kei0baisoku
ふむぅ、見た感じ「変数」が何なのかがまだピンと来てないのかな?と感じました(´ω`) 変数と言うのは、プログラマが好きな名前を付けて好きな数字を覚えておくためのものです。 だから、同じ変数をいろんな所で使うことも出来ますし、同じ配列の添字にいろんな変数を使ってアクセスすることもできます。 写真のプログラムですと、KCNTは「配列Nのサイズ」を覚えている変数で、Iは「配列Nにアクセスするために一つずつ増やしたい変数」ですね。 役割が違うので、途中でアクセスする変数がKCNTからIに変わっているのです。
2そうだね
プレイ済み
返信[5]
親投稿
<(_ _)> FukanoShouki
皆さん、分かりやすく解説していただきありがとうございます。<(_ _)> 皆さんのおかげで、ずっと悩んでいたことが解決出来てスッキリしました。
1そうだね
プレイ済み