投稿
けい kei0baisoku
少し慣れてきた人向けの問題です。 今回のお題は「配列の活用の仕方」。配列がよく分からん~たぶん分かった、くらいの方を対象にしています。 【問題】 これは、複数人のテストの点を入力し、平均点をプリントするプログラムです。17行目のリンゴマークの行に、なんと書けば完成するでしょうか?
7そうだね
プレイ済み
返信[1]
親投稿
けい kei0baisoku
ルールはいつもと同じ、回答はネタバレ設定で、分かる方は正解を見つけたら共感ボタンを押していただけると助かります。 約一日後を目処に、解説をネタバレなしで載せます。 (今度は普通の問題だから短く済むはず………(´ω`))
0そうだね
プレイ済み
返信[2]
親投稿
ヨ! kame1005
GOUKEI=GOUKEI+TENSU[I]
2そうだね
プレイ済み
返信[3]
親投稿
くろちく FoliageLamp
うう…何時間悩んだのかって気づいたら…休憩入れたら 1行書き忘れてた事に気づく、はははは。 式の意味はわからなかったです……煙 数学苦手だからかもしれないです。 GOUKEI=GOUKEI+TENSU[I]
2そうだね
プレイ済み
返信[4]
親投稿
けい kei0baisoku
>ヨ!さん 正解です。さすが熟練の初心者・ヨ!さん。 即答だったのではないでしょうか(-ω-) >LAMPさん 正解です。もしかして、難しく考えすぎてただけで気付けばすぐでした? だとしたら、配列の理解自体は全然大丈夫じゃないかと思います。 確かに、平均の計算が前提として分かってないと、意味が分からないかも知れないですね………
1そうだね
プレイ済み
返信[5]
親投稿
くろちく FoliageLamp
…でも、説明できないってことはまだ理解は…遠い目。 書き忘れで、1行抜けてたので、気づかず調べてて 気づいてからは、悩み中に調べた中にあったのでって感じです。 問題が難問になる初心者クオリティを発揮してしまった。 (主に1行まるごと書き忘れるとか…)
0そうだね
プレイ済み
返信[6]
親投稿
色んなやり取りを見てるとLAMPさんは配列の理解が出来てないと言うよりは利用イメージとのリンクがうまくいってないような印象を受けますね。(ちがかったらすいません) 問題の場合はどうしても問題のためのプログラムになりやすいので実際のプログラムとちょっと違う感じもあるし、使ってればわかってくることでもピンときにくいのかもしれませんね。
1そうだね
プレイ済み
返信[7]
親投稿
pinfu ANNAININ
PUSH、LEN・・・? ・・・・しかし、これをきっかけに! 答えは、 GOUKEI=GOUKEI+TENSU[I] 答え自体はいいと思うのだけど・・・ 考えてる時に、 PUSHで要素が追加ってのが、少し解らなく・・・ INPUTされた値が0より下でない場合はINPUTする度 TENSU[0]=INPUTされたTEN1の値 GOTO @でINPUTへ、INPUT入力。 TENSU[1]=・・・・・ この様な理解で良いのでしょうか?
1そうだね
プレイ済み
返信[8]
親投稿
けい kei0baisoku
私もでんぺんさんと同じような印象です。 LAMPさんの作られてる作品はプログラムが一本道を通る台本的なものが多いので、あえて配列を使う場面も少なくピンと来ないのかもしれません。シューティングとか敵を複数同時に管理するようなゲームを作ろうとすると必須なのですが。 配列も関数もあくまで道具なので、そういうのがあるのを覚えていれば、無理に使わなくても使えば便利かな?という所で初めて使ってみるでいいと思います。
2そうだね
プレイ済み
返信[9]
親投稿
けい kei0baisoku
>pinfuさん 正解です! pushとlenは、はじめのうちは馴染みのない命令だとは思ったのですが、知っているとすごく便利なのでコメントで補足した上で問題にチョイスしました。 pushだけ補足で説明してみます。
0そうだね
プレイ済み
返信[10]
親投稿
けい kei0baisoku
問題の答えとは直接関係ないので、push命令だけ先に詳しく補足します。 DIM A[0] {} ※空っぽ ↓ PUSH A,50 {50} ↓ PUSH A,100 {50,100} ↓ PUSH A,70 {50,100,70} こんな感じで、PUSHを呼ぶ度に配列のサイズが1つずつ大きくなり、追加された末尾のところに指定された値がセットされます。 ちなみに、PUSHと対になるPOPという命令もあり、呼ぶと末尾の要素が削られて配列のサイズが1つ小さくなります。
1そうだね
プレイ済み
返信[11]
親投稿
くろちく FoliageLamp
シューティングとか、プレイするのが苦手で。 あまり中身も、みたことが無かったです 初心者向けシューティング講座でも読んでみます。 でんぺんさんも、けいさんも、ありがとうございました。
0そうだね
プレイ済み
返信[12]
親投稿
シューティング以外でも同じような役割の物がたくさん出てくる場合は配列は必須ですよね。他にも競馬とかの馬とか、今回の例はちょっと省略していますがたくさんの生徒の成績を管理するとかになるとないと厳しいですね。 アドベンチャーとかでもフラグの管理は配列っぽくなりますね。(プチコンの場合は全部固有の変数に出来ますが)
1そうだね
プレイ済み
返信[13]
親投稿
pinfu ANNAININ
けいさん、ありがとうございます! 無事、納得出来ました。
1そうだね
プレイ済み
返信[14]
親投稿
けい kei0baisoku
あ、ゲーム自体も苦手ならそこから慣れるのは大変かも(^O^;) 馴染みのあるもので関連付けられると良いのですが。 テキストアドベンチャーだと、左のキャラと右のキャラでサイズ2の配列とかですかね?でも、使い方を共通化出来ないと配列にはまとめられない………(-ω-)
2そうだね
プレイ済み
返信[15]
親投稿
ヨ! kame1005
自分は配列変数はエクセルの表をイメージしています 問題の答えは15行目のGOUKEI=0でFORループ前にゲームで言うならタメ動作していたのでピンときました
1そうだね
プレイ済み
返信[16]
親投稿
けい kei0baisoku
エクセルの表はイメージするものとして良いかも知れませんね。 「点数」という列があって、生徒の人数だけ下に行が連なってる感じ。
2そうだね
プレイ済み
返信[17]
親投稿
KU kerorinU
GOUKEI=GOUKEI+TENSU[I]でしょうか。変数名間違ってたらどうしよう PUSH/POPとSHIFT/UNSHIFTは覚えていて損はないと思います。知識がないと、応用できないので。
1そうだね
プレイ済み
返信[18]
親投稿
けい kei0baisoku
>KUさん 正解です(^O^) 変数名はもし間違っててもオマケで正解にするつもりでしたが、今のところ間違えてる人はいないですね。 ただ、実際にプログラムの中で間違えると、平均点がゼロになったり、ゼロ除算エラーが発生したりするので、バグ対応に時間をとられそうですね。 中規模以上のプログラムを組んでる人でもし使っていなかったら、OPTION STRICTはオススメしておきたいです。
2そうだね
プレイ済み
返信[19]
親投稿
けい kei0baisoku
さて、解答と説明です。 決して全員正解なのを忘れているわけではありません。将来ここを見る初心者の方たちのためでもあります(`・ω・´)キリッ リンゴマークに入る処理は GOUKEI=GOUKEI+TENSU[I] ですね。 インプットの部分を経て、配列TENSU[]には人数分の点数が入っています。10人分なら0~9まで、40人分なら0~39まで、10万人分なら0~99999です。 配列は[と]の中に添字の数を指定して取り出しますので、10人分の点数なら TENSU[0]~TENSU[9] の10個の数字を全て足せば、全員の点数の合計になります。
1そうだね
プレイ済み
返信[20]
親投稿
けい kei0baisoku
直接の解答部分は以上です。 あと、伝えたかった事として配列を使うといったい何が便利なの?というのがあります。 主に二つです。 (1)複数のデータを1つのプログラムで処理できる (2)処理するデータの「数」を柔軟にできる 合計をFOR文で出しているあたりが(1)、PUSH命令でどんどん追加しているあたりが(2)です。 複数のデータを一括して扱うにはプログラマが法則性を見出ださないといけないのでその分ハードルは少し上がりますが、メリットはそれ以上に大きいです。 同じことが短いプログラムで書けるようになるのと、作るときに気にしないといけない部分が減るので、とっても楽になります。
2そうだね
プレイ済み
返信[21]
親投稿
くろちく FoliageLamp
前回の問題の時、OPTION STRICTのことを初めて知った… が正しかった…おおう、よく用語わかってなかった。 厳格な判断をするみたいな解説だったので。 エラーの発見が早期というのは、なんとなく。 調べた限りだと、ONとかOFFとかもいるのだろうか。
0そうだね
プレイ済み
返信[22]
親投稿
けい kei0baisoku
え、ONとOFF?(°Д°) ど、どれの事だろう……… せっかく話題に上がったので軽く説明をば。 OPTION STRICT を指定すると、そのプログラムでVARやDIM宣言してない変数を使おうとすると、エラーになり実行できません。 「えっ?それ不便なだけじゃない?」 と最初は思うかもしれませんが、宣言していない名前がエラーと言うことは、綴り間違いや、忘れて同じ名前の変数を違う所で使おうとしたら、プチコンが必ずすぐに見つけて知らせてくれます。 これらは気付かないと後々バグになって表面化するので、すぐに知らせてくれるのがとても助かるのです。
1そうだね
プレイ済み
返信[23]
親投稿
くろちく FoliageLamp
えっと調べたのが、違う言語?だったようなので OPTION STRICT ON OPTION STRICT OFF のような説明で、必要なのかなって思ったことをそのまま。 とりあえず内容は、そんな躓いてない…はず。 普通の変数と、配列宣言されてない配列変数が チェックされてしまうということかなと。 いつもながらのなんとなく、あいまいな理解です。
0そうだね
プレイ済み
返信[24]
親投稿
けい kei0baisoku
あ、なるほど、違う言語。 プチコン三号ではオンオフは付けないみたいですね(^O^) 曖昧ながら合ってますよー。強いて言うなら、配列だけはOPTION使わなくても常に宣言が必須です。
1そうだね
プレイ済み