情報基礎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)