Simple program but wrong output

조회 수: 1 (최근 30일)
Dave Mosooka
Dave Mosooka 2016년 12월 15일
답변: Walter Roberson 2016년 12월 15일
My program gets three unique points (positive integers) and should rearrange them so they are in order from point 1 to 3 but when I print the variables at the end they are sometimes not in order. My code is pretty straight forward and I think it's obvious what I am trying to do but I must be doing something wrong here?
%get unique points
point1 = randomPoint();
point2 = point1;
point3 = point1;
while point1 == point2
point2 = randomPoint();
end
while point1 == point3 || point2 == point3
point3 = randomPoint();
end
%check ordering
if point1 > point2
temp = point1;
point1 = point2;
point2 = temp;
end
if point2 > point3
temp = point2;
point2 = point3;
point3 = temp;
end
display(point1);
display(point2);
display(point3);
-
function [point] = randomPoint()
%get random points
point = 0; %1, 4, 7, 10, 13, 16, 19, 22, 25, 28
while mod(point, 3) ~= 1 %fall on start of fsm state
point = randi([1,28]);
end
end
Example output: >> run main
point1 =
13
point2 =
10
point3 =
19

채택된 답변

Walter Roberson
Walter Roberson 2016년 12월 15일
After you swap point 3 down to point 2, you need to figure out whether it then needs to be swapped down to point 1. Consider for example, [6 5 4] then your first operation would swap to [5 6 4] and your second operation would swap that to [5 4 6] but you need to compare that 5 and 4.

추가 답변 (1개)

David Barry
David Barry 2016년 12월 15일
Instead of:
%check ordering
if point1 > point2
temp = point1;
point1 = point2;
point2 = temp;
end
if point2 > point3
temp = point2;
point2 = point3;
point3 = temp;
end
Try something like:
sortedPoints = sort([point1, point2, point3]);
point1 = sortedPoints(1);
point2 = sortedPoints(2);
point3 = sortedPoints(3);

카테고리

Help CenterFile Exchange에서 Solver Outputs and Iterative Display에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by