Asked by James
on 7 Aug 2011

Hi

I want to be able to select c = 2 3 5 6 8 9 12 13 15 16 18 19 22 23 25 26 28 29 32....

I need to do this all the way up to 89. Can i do this in a loop?

*No products are associated with this question.*

Answer by Neels
on 7 Aug 2011

hi James, can you tell if the series follows a specific sequence or just some random values

Answer by Tim Mottram
on 7 Aug 2011

Hi James,

So you want all numbers accept those ending in a 0,1 or 4? If this is correct then put an IF statement inside your FOR loop with something like: if a~= 0 && a~= 1 && a~=4, where a is the last digit of the current step being used by the for loop. Put the for loop incrementer (i = i+1) after the END of this IF statement. How you calculate, a, is up to you...

Regards

Tim

James
on 7 Aug 2011

i suppose when you look at it that way then yes i need to skip all numbers ending in 0,1,4 and 7

how do i select the last digit of the current step?

Tim Mottram
on 7 Aug 2011

see Jan's comment for selecting the last digit, or transform the number into a string,(string = num2str(current for loop)) then ask for its length, (digit = length(string)) and if digit (this will always be the last digit) of string is not equal to 0,1,4 or 7, then proceed. some rough code..

for i = 0:YourEndPoint

s = num2str(i);

d = length(s);

if s(d) ~= 0 && ~=1 && ~= 4 && ~= 7

your code for what you want

end

i = i+1

end

Sorry about the late reply, people are really on it here and you probably already have your solution.

Answer by Jan Simon
on 7 Aug 2011

for i = 0:90 if all(mod(i, 10) ~= [0,1,4,7]) disp(i) end end

James
on 7 Aug 2011

how does the if line work?

all(mod(i, 10) ~= [0,1,4,7])

Jan Simon
on 7 Aug 2011

@James: Read it loud: if all (reminder of i divided by 10) are not equal to an element of [0, 1, 4, 7].

Example: i = 18, mod(i, 10)=8, (8~=[0,1,4,7]) = [1,1,1,1], all([1,1,1,1]) = TRUE.

i = 17, mod(i, 10)=7, (7~=[0,1,4,7])=[1,1,1,0], all([1,1,1,0]) = FALSE

Answer by Jan Simon
on 7 Aug 2011

Another method:

for a = 0:10:80 for b = [2,3,5,6,8,9] k = a + b; disp(k); end end

Answer by Jan Simon
on 7 Aug 2011

And if I'm on the way:

ind = bsxfun(@plus, 0:10:80, [2,3,5,6,8,9]'); for i = reshape(ind, 1, []) disp(i) end

Answer by James
on 7 Aug 2011

Thanks. I was also just wondering if you can help me with something else similar:

for c = 11:20 if c~=11 && c~=14 && c~=17 && c~=20 break end

% how can I loop through for all values of r, which are r=11,14,17,20????

end

Jan Simon
on 7 Aug 2011

@James: ??? Do you mean: for r = [11, 14, 17, 20], ... end

Tim Mottram
on 7 Aug 2011

for i = 11:3:20 ??

Answer by Paulo Silva
on 7 Aug 2011

yet another way

r=9; %number of repetitions of the sequence, ex 9, max is 89 b=[2 3 5 6 8 9]; %original sequence c=repmat(b,r,1); %repeat the sequence in each row d=0:10:10*r-1; %create vector with sum values e=repmat(d,6,1)'; %create array from vector f=(c+e)'; %now all in the right place do the sum f(:)' %put the values in just a vector

Answer by Andrei Bobrov
on 7 Aug 2011

a=1:90; k = reshape(a,10,[]); k(1:3:end,:)=[]; c = k(:)'

ADD

a = reshape(1:90,10,[])'; c = []; for j1 = 1:size(a,1) for j2 = 1:3 c = [c a(j1,j2*3-[1 0])]; end end

MORE

a = reshape(1:90,10,[]); c=reshape(a(bsxfun(@minus,(3:3:9),[1 0]'),:),1,[])

Related Content

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
## 0 Comments