MATLAB Answers

0

Repeating If statement after variable change

Asked by Melissa Rosie on 6 Apr 2017
Latest activity Commented on by Joseph Cheng
on 6 Apr 2017
Hello! I have a question about the usage of 'return' and/or 'repeat.' I have an if statement that takes in an m x 1 vector (lets call it SS) and outputs a common number vector between specified arrays above it in the function. However, if the length of the common number vector is greater than one, then I would change the SS input and repeat the first if statement. How would I do this without making a nested or subfunction? Thank you!
%A simplified example:
A = [1 2 3 4];
B = [1 2 6];
C = [1 7];
if SS(1)==1;
commonnums = intersect(A,B); %commonnums would be [1 2]
if length(commonnums)>1;
SS = SS + 1;
%repeat first if statement with SS(1)==2;
else
commonnums = commonnums;
end
elseif SS(1)==2;
commonnums = intersect(A,C); %commonnums would now be [1]
if length(commonnums)>1;
SS = SS + 1;
%repeat first if statement with SS(1)==3;
else
commonnums = commonnums;
end
elseif SS(1)==3;
commonnums = intersect(B,C); %commonnums would be [1] also
if length(commonnums)>1;
SS = SS - 2;
%repeat first if statement with SS(1)==1;
else
commonnums = commonnums;
end
end

  0 Comments

Sign in to comment.

1 Answer

Answer by Joseph Cheng
on 6 Apr 2017
 Accepted Answer

not sure what you mean by repeat first with SS(1)==# as it wouldn't do the first if statement but the lower elseif statement. if thats the case make them seperate ifs? i can't figure out what youre trying to do but a shorter way is to do something like this and then you can determine which combination you want without having to make an if statement with the specific variable hard coded in.
commonnums = [0 0];
SS = [1 2 3];
A = [1 2 3 4];
B = [1 2 6];
C = [1 7];
ABC = {A;B;C}
combos = nchoosek(1:3,2);
whichcombo = SS(1);
while length(commonnums)>1
commonnums = intersect(ABC{combos(whichcombo,1)},ABC{combos(whichcombo,2)});
if length(commonnums)>1
SS=SS+1;
whichcombo=SS(1);
else
disp('done')
end
end

  2 Comments

I suppose my example was kinda confusing... I apologize. I'm trying to solve a Sudoku puzzle using recursion, and the SS value determines which area in the puzzle there's the fewest number of missing values-- a box, a row, or a column. For example if SS(1) = 1 (box) and num==1 then I would use the if statement to check box 1, and then find the empty spaces in box 1, check the missing values in the first empty space's row, and then its column and find the possible values it could be. But if there's more than one number that could go in that space, I'd change SS(1) to be 2, so it would find the area with the next least number of missing values, for example a row, etc. and repeat with the elseif SS(1)==2 condition. I know it's possible to just copy/paste a repeated code inside, but my function is already a couple hundred lines long so I'm trying to avoid that.
So how are you defining the sudoku grid? there maybe a faster easier way to go through and find these items.
But either way did my thing help? I'd hate to leave you unanswered.

Sign in to comment.