Help debugging a code? Says function makes an error but when I run it, it returns the correct output...
Show older comments
I'm having trouble with the following assignment:
Write a function called sort3 that takes a 3-element vector as its sole arguments. It uses if-statements, possibly nested, to return the three elements of the vector as three scalar output arguments in non- decreasing order, i.e., the first output argument equals the smallest element of the input vector and the last output argument equals the largest element. NOTE: Your function may not use any built-in functions, e.g., sort, min, max, median, etc.
Here is what I've done so far:
function [a,b,c]=sort3(A)
a= A(1); b=A(2); c=A(3);
if (a<=b)&& (b<=c)
if a<b && b<c
output= [a b c]
elseif(a==b)&& b<c
output= [a b c]
elseif a<b && (b==c)
output= [a b c]
else a==b==c
output= [a b c]
end
elseif (a<= c)&& (c<=b)
if (a<c)&& (c<b)
output= [a c b]
elseif (a==c)&& a<b
output= [a c b]
elseif a<c && (c==b)
output= [a c b]
else a==c==b
output= [a c b]
output = [a c b]
end
elseif (b<=c) && (c<=a)
if b<c && c<a
output= [b c a]
elseif (b==c)&& c<a
output= [b c a]
elseif b<c &&(c==a)
output= [b c a]
else b==c==a
output= [b c a]
end
elseif (b<=a) && (a<=c)
if b<a && a<c
output= [b a c]
elseif (b==a)&& b<c
output= [b a c]
elseif b<c &&(c==a)
output= [b a c]
else b==c==a
output= [b a c]
end
elseif (c<=a) && (a<=b)
if c<a && a<b
output= [c a b]
elseif (c==a)&& a<b
output= [c a b]
elseif c<a && (a==b)
output= [c a b]
else c==a==b
output= [b c a]
end
else (c<=b) && (b<=a)
if c<b && b<a
output= [c b a]
elseif (c==b)&& b<a
output= [c b a]
elseif c<b && (b==a)
output= [c b a]
else b==c==a
output= [b c a]
end
end
I ran it through an autograder and it said:
Feedback: Your function performed correctly for argument(s) [1 2 3]
Feedback: Your function made an error for argument(s) [1 3 2]
But when I set A= [1 3 2], it seems to return the output [1 2 3].
Also -- I totally realize that my code is very inefficient. What are some ways I could make my code more efficient?
Thank you!
Answers (1)
per isakson
on 20 Aug 2017
Edited: per isakson
on 20 Aug 2017
IMO: Your code is a nightmare to debug and I will not try.
There is a problem with output. It's not used as output.
function [a,b,c]=sort3(A)
by
function varargout = sort3(A)
and all the
output = [ ...]
by
varargout = { ... }; % e.g.
varargout = { b, c, a };
In response to comment:
Add this line at the end of your code
a = out(1); b = out(2); c = out(3);
Replace
else b==c==a
by
elseif b==c && c==a
or whatever it's intended to be
3 Comments
Hye Sun Choi
on 20 Aug 2017
per isakson
on 20 Aug 2017
Edited: per isakson
on 20 Aug 2017
What do you regard as a built-in function? varargout ???
I added an alternative solution to my answer.
Categories
Find more on Shifting and Sorting Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!