Nested if statements under for loop

I have this nested if statements under a for loop. I want the for loop to calculate 3.1*5^2. And if the answer is 77.5, it should solve 3.1*3^2. Also if that equals 27.9. It should stop the for loop. But it seems to continue. Please help.
clc
A=['3' '.' '1' '*' '^' '2']
for n=0:length(A)
try
d=[A(1:n) '5' A(n+1:end)]
c=eval(d)
if c==77.5
e=[A(1:n) '3' A(n+1:end)]
j=eval(e)
if j==27.9
return
end
end
end
end

1 Comment

You should compare to a tolerance. (i.e. abs(value-target)<=tol;)
You should also remove those eval calls.

Sign in to comment.

 Accepted Answer

eval(e) will never be equal to 27.9. To know the reason you have to set the output format from short(default) to long. After doing
format long
you will see that
eval(e) = 27.900000000000002
The workaround would be to remove unwanted numbers after decimal point and then compare. This is how I did it
clc
A=['3' '.' '1' '*' '^' '2']
for n=0:length(A)
try
d=[A(1:n) '5' A(n+1:end)]
c=eval(d)
if c==77.5
e=[A(1:n) '3' A(n+1:end)]
j=eval(e)
S = sprintf('%f',j); % convert it to string
[idx,~]=regexp(S,'[.]'); % search for decimal point
S(idx+2:end) = []; % delete everything from idx+2 till end
if isequal(S,'27.9') % compare S (modified eval(e)) with '27.9' char
return
end
end
end
end

More Answers (0)

Categories

Tags

Community Treasure Hunt

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

Start Hunting!