필터 지우기
필터 지우기

How do you have a logical operator of true and false as your type but 0 and 1 as your value?

조회 수: 23 (최근 30일)
Hi. I am having trouble with this homework question: Write a function called eligible that helps the admission officer of the Graduate School of Vanderbilt University decide whether the applicant is eligible for admission based on GRE scores. The function takes two positive scalars called v and q as input. They represent the percentiles of the verbal and quantitative portions of the GRE respectively. You do not need to check the input. The applicant is eligible if the average percentile is at least 92% and both of the individual percentiles are over 88%. The function returns the logical true or false. What I have attempted is below:
function [true, false] = eligible(v, q)
if mean(v, q)>= 92 && v>88 && q>88
fprintf('true\n');
elseif mean(v, q)<92
fprintf('false\n');
elseif v<=88
fprintf('false\n');
elseif q<=88
fprintf('false\n');
I think my problem is that I need the false to appear as the type but 0 to appear as my value and true to appear as the type but 1 to appear as my value.
  댓글 수: 2
Pranav nair
Pranav nair 2020년 7월 17일
function admit = eligible(v,q)
c = (v+q)/2;
if (c>= 92 && v>88 && q>88)
admit = true;
else (v < 88 && q < 88)
admit = false;
end

댓글을 달려면 로그인하십시오.

채택된 답변

Image Analyst
Image Analyst 2016년 8월 8일
You used mean() incorrectly. Look at this:
>> mean(10,30) % WRONG!
ans =
10
>> mean([10,30]) % Right way uses brackets.
ans =
20
So instead of
if mean(v, q)>= 92 && v>88 && q>88
fprintf('true\n');
elseif mean(v, q)<92
fprintf('false\n');
elseif v<=88
fprintf('false\n');
elseif q<=88
fprintf('false\n');
use
if mean([v, q]) >= 92 && v > 88 && q > 88
fprintf('true\n');
isEligible = true;
else
fprintf('false\n');
isEligible = false;
end
  댓글 수: 3
the cyclist
the cyclist 2018년 2월 18일
Or, if you are playing Cody ...
function ans = eligible(v,q)
((v+q)>=184)&&(v>88&&q>88);
[This is not a serious comment. Please do not take it as such!]

댓글을 달려면 로그인하십시오.

추가 답변 (7개)

the cyclist
the cyclist 2016년 8월 8일
You are on the right track. Here is a hint ...
Instead of outputting two variables named true and false, I think you'd want to just output one variable -- maybe call it isEligible -- that takes on the values true/false.
It looks like you know how to calculate the value of isEligible, because you have used it to determine what to display to the screen.

Jorge Briceño
Jorge Briceño 2018년 1월 28일
Hi Alexandra,
Maybe another alternative would be:
function [isEligible]=eligible( v,q )
Your_Output_Name= v>88 && q>88 && ((q+v)/2)>=92
end
Cheers, Jorge
  댓글 수: 2
Walter Roberson
Walter Roberson 2018년 1월 28일
Your_Output_Name would have to be isEligible for this to work.
Jorge Briceño
Jorge Briceño 2018년 2월 5일
Ok, I had a silly typo. Thanks, Walter.
function [Your_Output_Name]=eligible( v,q )
Your_Output_Name= v>88 && q>88 && ((q+v)/2)>=92
end

댓글을 달려면 로그인하십시오.


ledinh lam
ledinh lam 2016년 11월 25일
편집: DGM 2023년 3월 3일
I think it will be :
function el=eligible(v,q)
if mean([v,q]) >= 92 && v>88 && q >88
el=true;
else
el=false;
end
end

Duddela Sai Prashanth
Duddela Sai Prashanth 2018년 9월 23일
function [out] = eligible(v, q)
if v > 88 && q > 88 && (v+q)/2 >= 92
out = true;
else
out = false;
end

Yamen Al-Jajan
Yamen Al-Jajan 2019년 11월 23일
function admit=eligible(v,q)
if v>=88 & q>=88
ave=(v+q)/2;
if ave>=92
admit=true;
else
admit=false;
end
else
admit=false;
end

Rahul Krishna
Rahul Krishna 2021년 5월 31일
function admit = eligible(v,q)
if (q +v)/2 >=92 && (v>88 && q>88)
admit = true
fprintf(' the candidate is eligible \n')
else
admit = false
fprintf(' the candidate is not eligible \n')
end

MALK adil
MALK adil 2021년 12월 29일
function out = eligible(v,q)
out = (v+q)./2 >= 92 && v > 88 && q > 88;
if out==1
out= true;
else out= false;
end
  댓글 수: 1
Image Analyst
Image Analyst 2021년 12월 29일
편집: Image Analyst 2021년 12월 29일
@MALK adil your if block is totally unnecessary.
out is already a boolean (true or false) by how you define it. You do not need to check if it's a 1 (double) and then assign it to true (which it already is). I believe that when you compare a logical to a double (like bln == 7) it converts the logical to a double (false converts to 0, and true converts to 1) and then it compares that double to the number (7) and returns a double.
out = true
out = logical
1
result = out == 7 % Convert out to double then compare the two doubles and return a logical
result = logical
0
And if it's not 1 (the only other choice is false) there is no need to set it to false. It's already false!
So you could simply have done
function out = eligible(v,q)
out = (v+q)./2 >= 92 && v > 88 && q > 88;

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Introduction to Installation and Licensing에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by