詳しく言うとcal_gp()の()の中にテストの得点を入れることで0,1,2,3,4の成績を得れるという関数を作りたいです。成績の振り分けは、0~59は「0」、60~69は「1」、70~79は「2」、80~89は「3」、90~100は「4」、-5は履修中という意味でnonにしています。matrabを始めたばかりでまったくわかりません。助けていただけると幸いです。よろしくお願いします。
()の中に数値を入れて、その結果を0,1,2,3,4に振り分ける関数を作りたいのですが関数が認識されなく困っています
6 次查看(过去 30 天)
显示 更早的评论
function cal_gp(a)
if a<=100 & a>=90
cal_gp(a)==4.0
elseif a<=89 & a>=80
cal_gp(a)==3.0
elseif a<=79 & a>=70
cal_gp(a)==2.0
elseif a<=69 & a>=60
cal_gp(a)==1.0
elseif a<=59 & a>=0
cal_gp(a)==0
elseif a==-5
cal_gp(a)==non
end
end
回答(2 个)
Atsushi Ueno
2022-12-3
- 上記文法に従い関数の出力を定義する必要があります
- ”cal_gp(a)==**”は「関数cal_gp(a)の出力が**か否か」を出力します
- 上記では同じ関数の再起呼び出しが続く事になり、out of memoryエラーで停止してしまいます
- また比較「関数の出力が**か否か」ではなく代入「関数の出力を**にする」だと思います
- "non"は未定義の変数になるので、他の変数や値(例えばNaN)にする必要があります
- else if 文はありますが else 文がありません。無くても文法は問題ありませんが、入力が0以上100以下以外(-5を除く)の時は、cal_gp(a)から何も出力されない事になり「関数の出力が定義されない」旨のエラーが出力されます。
function output = cal_gp(a) % 関数の出力outputを定義
if a<=100 & a>=90
output = 4.0; % 以降すべてcal_gp(a)==**からoutput=**に変更
elseif a<=89 & a>=80
output = 3.0;
elseif a<=79 & a>=70
output = 2.0;
elseif a<=69 & a>=60
output = 1.0;
elseif a<=59 & a>=0
output = 0;
elseif a==-5
output = NaN; % nonをNaNに変更
else % else文を追加
disp('input a>100 or a<0 except a==-5');
output = NaN;
end
end
0 个评论
交感神経優位なあかべぇ
2022-12-3
MATLABでは、下記のような感じで関数を書きます。
grade = cal_gp(95); % 関数の呼び出し
disp(grade); % 結果の表示
dataType = class(grade) % リターン値のデータ型の確認。行の末尾にセミコロンを省略すると、実行結果が表示されます。
% grade : 出力引数(成績)
% a : 引数(テストの得点)
function grade = cal_gp(a)
% MATLABでは、定義した出力引数(grade)に値を代入することで、return値として認識されます。
if a<=100 & a>=90
grade = 4; % MATLABでは、入力した数値はdouble型(倍精度浮動小数点型)になります。(なので、4.0のような小数点表記はいりません)
% double型以外を代入したい場合は、uint32(4)などとデータ型をキャストする必要があります。
elseif a<=89 & a>=80
grade = 3;
elseif a<=79 & a>=70
grade = 2;
elseif a<=69 & a>=60
grade = 1;
elseif a<=59 & a>=0
grade = 0;
elseif a==-5
grade = NaN;
end
end
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!