130 likes | 274 Views
湘南工科大学. 2013 年 10 月 29 日. 情報理論2. 湘南工科大学情報工学科 准教授 小林 学. [ 前回の課題1 ]. Page 2. (1) double 型の変数 x, y を用意する. (2) x を -2 から 2 まで 0.1 刻みで次式を計算. (3) 各 x, y の値を画面に表示するプログラム作成. [ 実行例 ]. Page 3. [ 課題1解答例 ]. #include<stdio.h> void main(void){ double x, y;
E N D
湘南工科大学 2013年10月29日 情報理論2 湘南工科大学情報工学科 准教授 小林 学
[前回の課題1] Page 2 (1) double 型の変数 x, y を用意する. (2) xを -2 から 2 まで 0.1 刻みで次式を計算. (3) 各 x, y の値を画面に表示するプログラム作成 [実行例]
Page 3 [課題1解答例] #include<stdio.h> void main(void){ double x, y; for(x=-2; x<=2; x=x+0.1){ y = 5*x*x*x + (2*x-3)*x + 4; printf("%f,%f\n",x, y); } } for(初期値; 繰り返し条件; 変数の更新 ){ 文; }
Page 4 [前回の課題2] (1) double 型の配列 x[5]={2,4,6,8,10} を用意する. (2) double 型の変数 sum を用意し,x[0]~x[4] の和を計算. (3) double 型の変数 ave を用意し, x[0]~x[4] の平均を計算. (4) double 型の変数 var を用意し, x[0]~x[4] の分散を計算. (5) sum,ave,var をそれぞれ表示するプログラム作成 [参考] 計算方法 sum = x[0] + x[1] + x[2] + x[3] + x[4] ave = sum / 5 var =( (x[0]–ave)2+ (x[1]–ave)2+ (x[2]–ave)2 + (x[3]–ave)2+ (x[4]–ave)2 )/5
Page 5 [課題2解答例] #include<stdio.h> void main(void){ int i; double x[5]={2,4,6,8,10} , sum, ave, var; sum = 0; for(i=0;i<5;i++) sum += x[i]; ave = sum / 5; var = 0; for(i=0;i<5;i++) var += (x[i]-ave)*(x[i]-ave); var /= 5; printf("sum=%f, ave=%f, var=%f\n", sum, ave, var); }
Page 6 [前回の課題3] 40項までのフィボナッチ数列を表示するプログラム作成 フィボナッチ数列とは以下のように続く数列 0 1 1 2 3 5 8 13 21 34 55 89 144 [参考] フィボナッチ数列は,前の2項の和 0 13 = 5 + 8 1 21 = 8 + 13 1 = 0 + 1 34 = 13 + 21 2 = 1 + 1 55 = 21 + 34 3 = 1 + 2 89 = 34 + 55 5 = 2 + 3144 = 55 + 89 8 = 3 + 5233 = 89 + 144
Page 7 [課題3解答例] #include<stdio.h> void main(void){ int i, fibo[41]; fibo[0] = 0; fibo[1] = 1; printf("fibo[0]=0\nfibo[1]=1\n"); for(i=2 ; i<=40 ; i++){ fibo[i] = fibo[i-1] + fibo[i-2]; printf("fibo[%d]=%d\n", i, fibo[i]); } }
Page 8 アルゴリズム:数を数える(カウント) [1] [4] Data [0] [3] [2] 実行結果 用意する変数: count(1の数を入れる) 初期値: count = 0
Page 9 アルゴリズム:数を数える(カウント) i Data[i] count 初期値: 0 繰り返し: 0 10→1 1 0 1 2 0 1 3 1 1→2 4 1 2→3 if(Data[i]==1) count++;
Page 10 [例題のプログラム] #include<stdio.h> void main(void){ int i, Data[5]={1, 0, 0, 1, 1}; //データの初期化 int count; count = 0; //カウントの初期化 for(i=0;i<5;i++){ if(Data[i]==1) count++; //Data[i]が1ならば //countを1増やす printf("%d, %d, %d\n", i, Data[i], count); } printf("Data中の1の数:%d\n",count); }
Page 11 アルゴリズム:最大値・最小値 最大の位置 [1] [4] Data [0] [3] [2] void main(void){ int Data[5]={5, 3, 6, 8, 2};//配列Dataの初期化 実行結果 用意する変数: max(最大値の候補), position(最大の位置の候補) 初期値: max = Data[0] position = 0
アルゴリズム:最大値・最小値 Page 12 i Data[i] max position 初期値: 5 0 繰り返し: (for文) 1 3 5 0 2 6 62 3 8 83 4 2 8 3 if(Data[i]>max){ max = Data[i]; position = i; }
Page 13 [例題のプログラム] #include<stdio.h> void main(void){ int i, Data[5]={5, 3, 6, 8, 2}, max, position; max = Data[0]; // maxの初期化 position = 0; // positionの初期化 for(i=1; i<5; i++){ if(Data[i]>max){ // maxとpositionの更新 max = Data[i]; position = i; } printf("%d, %d, %d, %d\n", i, Data[i], max, position); } }