04-04 2次元配列1

練習問題4-4-1

// 1次元配列で成績を管理(大変!)
let tanakaScores = [85, 90, 78];  // 田中さんの成績
let satoScores = [92, 88, 95];    // 佐藤さんの成績
let suzukiScores = [76, 85, 82];  // 鈴木さんの成績

1次元配列で成績を管理する場合、どのような問題があるか考えてみましょう。上記のコードを見て、3つの問題点を挙げなさい。

問題点
・この場合は人が増えるほど、変数を用意しなければなりません。
・たくさんの別の配列があるため、どれがどれを現しているかわかりずらい。
二つしかわかりませんでした。
ですが、少し読んでいくと、問題点の解決のように書かれている場所があり、そこから推測すると、
・forなどでの使用が難しい。
と、いうふうな回答が正しいのでしょうか?

練習問題4-4-3

例題4-4-2を参考に、次の値を表示するプログラムを作りなさい。

  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]);
}
このプログラムを作っている時に、二次元変数を見ていたら、気になって調べたのですが、この二次元変数は、縦になって見やすくはなっていますが、[[], [], []]という形を見やすくしているだけだったので、意外となじみがある形なのだということがわかりました。

練習問題4-4-5

例題4-4-4では、数字だけが表示されて分かりづらい表になりました。表題(科目名)と名前を追加して、見やすい表にしてみましょう。

以下の雛形に、表題と名前を表示するコードを追加しなさい。

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

  let names = ["田中", "佐藤", "鈴木"];
  let subjects = ["国語", "数学", "英語"];

  for(let i=0; i<scores.length; i++){
    for(let j=0; j<scores.length[i]; j++){
      print(names[i]+"さんの"+subjects[j]+"の点数"+scores[i][j])
    }
  }
}

私が真っ先に思い付いたのは、この書き方でした。
ですが、これでは指定されている答えとは異なる形になってしまいます。
ここで私が、つまずいていたのは、printには後から数字を追加できないものであると私は認識しています。その場合一つのprintの中に、数字が同時にが三つ入らなければならないということです。何らかの変数でないと、汎用性が足りません。
ですがどれだけ考えても、分からなかったので、この課題はこれが私の限界だと思います。

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


  let names = ["田中", "佐藤", "鈴木"];
  let subjects = ["国語", "数学", "英語"];
  for(let i=0;i<subjects.length;i++){
    table=table+"\t"+subjects[i]
  }
  print(table)
  
  for(let i=0; i<scores.length; i++){
    table=""
    for(let j=0; j<scores[i].length; j++){
      table=table+scores[i][j]+"\t"
    }
    print(names[i]+"\t"+table)
  }
}
一日考えてもわからなかったので、わからない箇所をAIに伝えて、ヒントを出してもらいながら作りました。
学んだのは¥tと、printでどうやって配列を何回か読み込むかという問題についてです。

練習問題4-4-6

成績データから、各生徒の合計点を計算して表示しなさい。

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

  let names = ["田中", "佐藤", "鈴木"];
  let total = 0

  for(let i=0; i<scores.length; i++){
    total=0
    for(let j=0; j<scores[i].length; j++){
      total=total+scores[i][j]
    }
    print(names[i]+"さんの合計点数:"+total)
  }
}
前の問題で苦戦した分、こちらの問題はさくさく解けました。

練習問題4-4-7

成績データから、各科目の平均点を計算して表示しなさい。

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

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

  for(let i=0; i<scores.length; i++){
    average=0
    for(let j=0; j<scores[i].length; j++){
      average=average+scores[i][j]
    }
    average=Math.round((average/scores.length)*100)
    average=average/100
    print(subjects[i]+"の平均点数は"+average)
  }
}
小数点第何位を指定する方法がわからなかったので、AIに聞きました。
それ以外は特に問題なかったです。

コメントする