04-04 2次元配列1 7/30

こんにちわ。kotaron7です。

いいねやコメントがないのでmotivationが下がりつつあります。頑張って書いてるのに(ノ`Д)ノ
さて、夏休みも中盤に差し掛かりました。課題が終わらないことを除けば、素晴らしい夏休みといえます。
高校二年生の夏休みが一番楽しいと聞いていたのに、しんどいことが二つ、三つ、重なってるおかげさまで開放的!!楽しい!!エクスタシー!!とはなりません。

本編へれっつご~~

練習問題4-4-1

二次元のリストを一次元で保存した時の問題点を三つ答えなさい。という問題です。

①リストの0番目をすべてのリストからとるのが面倒くさい
 →平均値などを求めたいときにいちいちすべてのデータを取ってくる必要がある。

②そもそも列が長くなればなるほどリストを作るのがしんどい
 →リストの数が増えまくって管理ができない。プログラムがめちゃ長い。見づらい。

③名字が同じ人がいる分、変数名も多くなっていく
 →変数名を探す手間が生じて不便

練習問題4-4-3

  1. 田中さん(0行目)の国語(0列目)の点数
  2. 佐藤さん(1行目)の数学(1列目)の点数
  3. 鈴木さん(2行目)の英語(2列目)の点数

を表示してみる

function setup() {
  let scores = [
    [85, 90, 78],
    [92, 88, 95],
    [76, 85, 82]
  ];

  print("田中の国語の点数は"+ scores[0][0]);
  print("佐藤の数学の点数は"+scores[1][1]);
  print("スズキの英語の点数は"+scores[2][2]);
  // ここにコードを書いてください
}

こうすると変数名に2つの意味を持たせたくなる。

例えば、name.scoresとか。左側の列が何を表しているのか?を変数名に入れたら見返したときにわかりやすいとおもう。むしろ[]の前に人名追加したいくらい…

練習問題4-4-5

科目名と名前を追加してみる

function setup() {
  // 成績データ:3人×3科目
  let scores = [
    [85, 90, 78],  // 0行目: 田中さんの国語、数学、英語
    [92, 88, 95],  // 1行目: 佐藤さんの国語、数学、英語
    [76, 85, 82]   // 2行目: 鈴木さんの国語、数学、英語
  ];

  let names = ["田中", "佐藤", "鈴木"];
  let subjects = ["国語", "数学", "英語"];
  
  // ここにコードを書いてください
  // 1. ヘッダー(科目名)を表示
  // 2. 各生徒の名前と成績を表示
  print("   ",subjects[0],subjects[1],subjects[2]);
  for (let i = 0; i < scores.length;i++)
  {
    print(names[i],scores[i][0]+"  ",scores[i][1]+"  ",scores[i][2]);
  }

}

空白でよく合わせたといった感じ。
なぜかネストで作り始めたせいで最後まで頭がこんがらがっていた。

練習問題4-4-6

生徒の合計点を出してみよう

function setup() {
  let scores = [
    [85, 90, 78],
    [92, 88, 95],
    [76, 85, 82]
  ];

  let names = ["田中", "佐藤", "鈴木"];
  for (let i = 0;i < scores.length;i++)
  {
    let sum = scores[i][0] + scores[i][1] + scores[i][2];
    print(names[i]+"の合計点:"+sum)
  }

}

できた。特に難しい点はない。

練習問題4-4-7

次は平均点を出してみる。

function setup() {
  let scores = [
    [85, 90, 78],
    [92, 88, 95],
    [76, 85, 82]
  ];

  let subjects = ["国語", "数学", "英語"];

  // ここにコードを書いてください
  for (let i = 0; i < scores.length; i++)
  {
    ave = ((scores[0][i] + scores[1][i] + scores[2][i])/3).toFixed(2);
    print(subjects[i]+"の平均点は"+ ave);
  }
}

できました~~。
toFixedを使うのがいいとこですね。使いやすいです。

平均点まで出たし、今日はこのへんで終わりにしようかな。それじゃあまた、今度!

コメントする