if文を使って、点数(0以上100以下の整数)が与えられたときに次の表に従った評価を表示するコードを書いてください。
点数 | 評価 |
---|---|
90点~100点 | 秀 |
80点~89点 | 優 |
70点~79点 | 良 |
60点~69点 | 可 |
0点~59点 | 不可 |
score = randi(101)-1 %乱数で0以上100以下の整数を与える
if score >= 90
display("秀")
elseif score >= 80 %「80 <= score && score < 90」としてもよいが、elseifの意味を考えると冗長な書き方である
display("優")
elseif score >= 70
display("良")
elseif score >= 60
display("可")
else
display("不可")
end
score = 74 良
次のような書き方も可能ですが、scoreの値がいくつであっても条件判定を最後まで行うことになるため、コードの効率(実行にかかる時間)は良くありません。見た目も上のコードの方がきれいです。
score = randi(101)-1 %乱数で0以上100以下の整数を与える
if 90 <= score && score <= 100
display("秀")
end
if 80 <= score && score < 90
display("優")
end
if 70 <= score && score < 80
display("良")
end
if 60 <= score && score < 70
display("可")
end
if 0 <= score && score < 60
display("不可")
end
score = 28 不可
for文を使って、条件「nの階乗が10000以上」を満たす最小のnとその階乗の値を求めてください。ただし、関数factorialを使用しないこと。
result = 1; %階乗を計算するので、初期値は0ではなく1
for k = 1:50 %50はある程度大きな数なら何でもよい
result = result*k; %「result *= k」としてもよいが、複合代入演算子(+=、-=、*=、/=)が使えるのはMATLABではなくOctaveだから
if result >= 10000
break
end
end
printf("条件「nの階乗が10000以上」を満たす最小のnは%d、その階乗の値は%d",k,result)
条件「nの階乗が10000以上」を満たす最小のnは8、その階乗の値は40320
while文を使って、条件「nの階乗が10000以上」を満たす最小のnとその階乗の値を求めてください。ただし、関数factorialを使用しないこと。
result = 1;
k = 1;
while result < 10000 %ここを「true」や「k <= 50」にして、演習2と同様にif文で「result >= 10000」を判定しbreakするという方法もある
k = k+1; %この行と下の行を入れ替えると、while文が終わったときのkの値がずれてしまう
result = result*k;
end
printf("条件「nの階乗が10000以上」を満たす最小のnは%d、その階乗の値は%d",k,result)
条件「nの階乗が10000以上」を満たす最小のnは8、その階乗の値は40320
演習2と演習3のコードを比較すると、kの終わりの値を指定する必要がない分、while文の方がスマートです。一方で、繰り返しがその回数以内に必ず終わるという意味では、for文の方が安全と言えます。
新しく何かしらの関数を定義してください。定義した関数を呼び出す例も付けてください。
function value = my_fibonacci(n) %MATLABには関数fibonacciがあるので名前の重複を一応避けているが、そもそもOctaveでは使えない模様
if n == 1
value = 1;
elseif n == 2
value = [1,1];
else
x = [1,1];
for k = 3:n
x(k) = x(k-2)+x(k-1); %MATLABでは、配列の未定義の成分にも値が代入できる(Pythonだとエラーになる)
end
value = x;
end
end
my_fibonacci(30)
ans = Columns 1 through 8: 1 1 2 3 5 8 13 21 Columns 9 through 16: 34 55 89 144 233 377 610 987 Columns 17 through 24: 1597 2584 4181 6765 10946 17711 28657 46368 Columns 25 through 30: 75025 121393 196418 317811 514229 832040