05-01 関数の基本

練習問題5-1-1

上の関数化したコードを実行し、第4章の棒グラフと同じ見た目になることを確認しなさい。

私が作ったプログラムと所々違うので、完璧に同じではないかもしれませんが、できるものはほとんど同じでした。

次に、この記事の冒頭にある第4章のコードと見比べ、関数に分けたこと以外に変わった点を探し、先生に報告しなさい。

関数の外に変数があり、どの関数からもアクセスできるようになっている。

練習問題5-1-2

次のコードは、練習問題4-3-9と同じ棒グラフですが、まだ1つの setup にまとまっています。
drawGrid と drawAxes の2つの関数を作り、該当する処理を setup から切り出しなさい。
棒グラフの部分は setup に残して構いません。

ヒント:練習問題5-1-1で確認したとおり、drawGrid から grid を使う場合はファイルの先頭で let grid; と宣言し、setup の中で grid = 20; と代入します。

let rainfall = [13.0, 9.5, 86.0, 38.0, 137.0, 215.5, 163.0, 78.5, 119.5, 130.5, 25.0, 36.0];
let grid = 20;

function setup() {
  createCanvas(300, 300);
  background(255);
  drawGrid()
  drawAxes()
    // 棒グラフの描画
  stroke(0, 150, 200);
  strokeWeight(10);
  for (let n = 0; n < rainfall.length; n++) {
    let x1 = n * grid + (grid * 2);
    let y1 = height - grid;
    let x2 = x1;
    let y2 = y1 - rainfall[n];
    line(x1, y1, x2, y2);
  }
}

  // グリッド線の描画
function drawGrid(){
  stroke(200);
  strokeWeight(1);
  for (let x = 0; x <= width; x += grid) {
    line(x, 0, x, height);
  }
  for (let y = 0; y <= height; y += grid) {
    line(0, y, width, y);
  }
}

  // 座標軸の描画
function drawAxes(){
  stroke(0);
  strokeWeight(1);
  line(grid, 0, grid, height - grid);
  line(grid, height - grid, width, height - grid);
}
使い方の説明の部分をまねすればすぐにできると思っていましたが、様々な問題に直面して、以外にも学びになる部分が多かったです。

練習問題5-1-3

練習問題5-1-2の続きとして、棒グラフを描く処理を drawBarGraph という関数に切り出しなさい。
setup からは、3つの関数を順番に呼び出す形にまとめてください。
呼び出しの行末には、「3つの関数に分ける」のコードと同じように日本語コメントをつけてください。

let rainfall = [13.0, 9.5, 86.0, 38.0, 137.0, 215.5, 163.0, 78.5, 119.5, 130.5, 25.0, 36.0];
let grid = 20;

function setup() {
  createCanvas(300, 300);
  background(255);
  drawGrid()//グリッド線を描く関数
  drawAxes()//座標軸を書く関数
  drawBarGraph()//棒グラフを描く関数

  // 棒グラフの描画
  stroke(0, 150, 200);
  strokeWeight(10);
  for (let n = 0; n < rainfall.length; n++) {
    let x1 = n * grid + (grid * 2);
    let y1 = height - grid;
    let x2 = x1;
    let y2 = y1 - rainfall[n];
    line(x1, y1, x2, y2);
  }
}


// グリッド線の描画
function drawGrid(){
  stroke(200);
  strokeWeight(1);
  for (let x = 0; x <= width; x += grid) {
    line(x, 0, x, height);
  }
  for (let y = 0; y <= height; y += grid) {
    line(0, y, width, y);
  }
}


// 座標軸の描画
function drawAxes(){
  stroke(0);
  strokeWeight(1);
  line(grid, 0, grid, height - grid);
  line(grid, height - grid, width, height - grid);
}
 
// 棒グラフの描画
function drawBarGraph(){
  stroke(0, 150, 200);
  strokeWeight(10);
  for (let n = 0; n < rainfall.length; n++) {
    let x1 = n * grid + (grid * 2);
    let y1 = height - grid;
    let x2 = x1;
    let y2 = y1 - rainfall[n];
    line(x1, y1, x2, y2);
  }
}

多分こういうことであっていると思います。

コメントする