Filter löschen
Filter löschen

Nested if statements under for loop

1 Ansicht (letzte 30 Tage)
Ernest Adamtey
Ernest Adamtey am 8 Aug. 2021
Beantwortet: Awais Saeed am 8 Aug. 2021
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 Kommentar
Rik
Rik am 8 Aug. 2021
You should compare to a tolerance. (i.e. abs(value-target)<=tol;)
You should also remove those eval calls.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Awais Saeed
Awais Saeed am 8 Aug. 2021
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

Weitere Antworten (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by