slide07



slide07

0 0


slide07


On Github sfcjs2016s / slide07


				

情報基礎2#7

慶應義塾大学環境情報学部 清水智公 (chiko@tom.sfc.keio.ac.jp)

前回の復習

var i = 0, sum = 0;
while(i < 10){
  sum = sum + i;
  i = i + 1;
}
console.log(i);
  • while文:条件が成立してい間 {} 内を繰り返し実行する
  • 上記の例では 1 から 10 までの整数の総和を求めている

前回の復習

var list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var i = 0, sum = 0;
while(i < list.length){
  sum = sum + list[i];
  i = i + 1;
}
console.log(i);
  • 配列:複数の値の列
  • 要素:配列中のそれぞれの値のこと
  • 長さ:配列の要素数

練習問題 1

  • 1 から 引数に指定された数までの二乗和を求める関数 squareSum を定義せよ
  • 1 より小さい数は引数に指定されてないとする
  • 定義は js/sigma.js に記述せよ
  • テストケース
    • 引数に 10 を指定した場合の返り値は 385 である
    • 引数に 1000 を指定した場合の返り値は 333833500 である

練習問題 2

  • 1 より小さい数を引数に指定できるようにした改良版 squareSum を定義せよ
  • 関数名は squareSum2 とする
  • 定義は js/sigma.js に記述せよ
  • テストケース
    • 引数に 10 を指定した場合の返り値は 385 である
    • 引数に -10 を指定した場合の返り値は 386 である
    • 引数に -1000 を指定した場合の返り値は 333833501 である

練習問題 3

  • 数値を要素として持つ配列を 1 つ引数にとり、その総和を求める関数を定義せよ
  • 関数名は sum とし、定義は js/sigma.js に記述せよ
  • テストケース
    • 配列 N10 を引数に指定した場合、返り値は 55 である

練習問題 4

  • 数値を要素として持つ配列を 2 つ引数にとる関数を定義せよ
  • 第 1 引数の配列には売上高が、第 2 引数の配列には費用が記載されているとする
  • 2 つの配列の長さは等しいことを仮定して定義して良い
  • 返り値は 2 つの配列から計算された、その期間の利益総額とする
  • 関数名は totalProfit とし、定義は js/sigma.js に記述せよ

前回の練習問題 1

  • 3 つの情報が引数で与えられる
    • 年齢:数値
    • 性別:数値(0が女性、1が男性、2がその他)
    • 配偶者の有無:真偽値(trueが配偶者あり)
  • 次の返り値を返せ
    • 30 歳以上の配偶者のある男性には 1 番
    • 20 代の独身女性には 2 番
    • 配偶者のある女性には 3 番
    • その他の人には 4 番

まとめたい

  • 次の 3 つの値は、1 つの対象を記述している
    • 年齢:数値
    • 性別:数値(0が女性、1が男性、2がその他)
    • 配偶者の有無:真偽値(trueが配偶者あり)
  • まとめて 1 つの変数にできないか

オブジェクト:複数の値の組み合わせ

var user1 = {
  age: 24,
  sex: 1,
  married: false
};
  • { } の間に属性と値のペアを, で区切って列挙
  • 属性と値のペアは、属性名 : 値、で記述する

属性値の参照

function isMarried30yearoldMale(person){
  return person.married &&
    person.sex == 1 &&
    person.age === 30;
}
  • 変数名に . をつけ、属性名を書くことで、そのオブジェクトの該当属性の値を参照できる

属性値の代入

var user1 = {
  age: 24,
  sex: 1,
  married: false
};
console.log(user1.age); // 24
user1.age = user1.age + 1;
console.log(user1.age); // 25
  • 通常の変数と同様、属性にも代入できる

オブジェクトを作成する関数

function createUser(age, sex, married){
  var user = {
    age: age,
    sex: sex,
    married: married
  }
  return user;
}
  • オブジェクトは関数の返り値にできる

練習問題 5

  • ユーザからキャンペーン番号を得る関数を定義せよ
  • 関数名は campaignNumber とし、js/campaign.js に定義せよ
  • ユーザは次の属性を持つオブジェクトとする
属性名 データ型 説明 age number 年齢 sex number 性別(0が女性、1が男性、2がその他) married boolean 配偶者の有無(trueが配偶者あり)

練習問題 5(つづき)

  • 引数:ユーザ
  • 次の返り値を返せ
    • 30 歳以上の配偶者のある男性には 1 番
    • 20 代の独身女性には 2 番
    • 配偶者のある女性には 3 番
    • その他の人には 4 番

オブジェクトの配列

var userList = {
  {age: 24, sex: 1, married: true},
  {age: 24, sex: 1, married: false},
  {age: 20, sex: 0, married: false},
  {age: 34, sex: 1, married: false},
  {age: 18, sex: 3, married: true},
  {age: 48, sex: 0, married: true}
};
  • オブジェクトも配列の要素とできる

オブジェクトの配列

var userList = {
  createUser(24, 1, true),
  createUser(24, 1, false),
  createUser(20, 0, false),
  createUser(34, 1, false),
  createUser(18, 3, true),
  createUser(48, 0, true)
};

オブジェクトの配列に対する走査

var i = 0;
var sum = 0;
while(i < userList.length){
  var user = userList[i];
  sum = sum + user.age;
}
console.log(sum); // 年齢の合計を出力

練習問題 6

  • ユーザの配列を受け取り、キャンペーン 1 の対象者数を返す関数を定義せよ
  • 関数名は countCampaign1Targets とし、js/campagin.js に定義せよ

文字列

var hello = "Hello";
var world = "World";
var empty = "";
  • 0 文字以上の文字の列
  • " もしくは ' で囲んだものは文字列となる

文字列の結合

var hello = "Hello";
var world = "World";
var empty = "";
var helloWorld = hello + world;
var newHello = hello + empty;
  • + 演算子で文字列同士を結合する
  • 新しい文字列が作成される

文字列同士の比較

var hello = "Hello";
if(hello == "hello"){
  doSomething();
}
if(hello > "hello"){
  doAnother();
}
  • 比較演算ができる
  • 大小は比較は辞書式に行われる
  • 漢字が含まれる文字列の大小比較には注意が必要

文字列への変換

var number = 10;
var empty = ""
var inString = number + empty; // "10"
  • 長さ 0 の文字列と結合することで、文字列変換される
  • "10" と 10 は別物であることに注意
    • 前者は文字列、後者は数値
    • == で比較すると評価値が true となるのは、暗黙的に文字列へ変換されるため

文字列の長さ

var hello = "Hello";
var empty = "";
console.log(hello.length); // 5
console.log(empty.length); // 0
  • 文字列中の文字数のことを、その文字列の長さと呼ぶ
  • length 属性を参照することで、長さを得られる
  • length 属性のデータ型は数値

練習問題 7

  • 練習問題 5 で定義した関数の返り値に応じて、キャンペーン名を返す関数を定義せよ
  • 引数には数値を 1 つとり、文字列を返す
  • 関数名は campaignLabel とし、定義は js/campaign.js に記述せよ
  • キャンペーン名は適切に設定せよ

練習問題 8

consoe.log("キャンペーン1:10名");
consoe.log("キャンペーン2:20名");
  • ユーザの配列を引数として受け取り、各キャンペーンの対象者数をコンソールに出力する関数を定義せよ
  • 上記のように console.log を呼ぶことで、コンソールへ文字列を出力できる
  • 関数名は histgram として、定義は js/campaign.js に記述せよ
情報基礎2#7 慶應義塾大学環境情報学部 清水智公 (chiko@tom.sfc.keio.ac.jp)