Asked by Tristan Murphy
on 3 May 2019

function surround = surroundWith(a,b)

%function will take a given matrix 'a' and create a ring of numbers 'b' around

%it

surround = zeros(size(a,1)+2,size(a,2)+2); %sets the size of the matrix after the numbers b has been placed around 'a'

for ii = 1:size(a,1)+2

for jj = 1:size(a,2)+2

if (ii == 1 || ii == size(a,1)+2 || jj == 1 || jj == size(a,2)+2)

surround(ii,jj) = b; %setting the ring of pre-allocated zeros around 'a' to be 'b'

end

end

end

for kk = 1: size(a,1)

for ll = 1:size(a,2)

surround(kk+1,ll+1) = a(kk,ll);%setting the zeros within b to the numbers stored in 'a' at the corresponding locations

end

end

end

% if a = [1,2,3:4,5,6], and b = 5 the matrix should come out as:

5 5 5 5 5

5 1 2 3 5

5 4 5 6 5

5 5 5 5 5

im attempting to recreate this using only one parameter and to create a matrix with a 1 at the centre with a ring of numbers layered on top of eachother, increasing in value up to 'b' as the distance from the centre increases so:

%so layeredMatrix(5) should output:

5 5 5 5 5 5 5 5 5

5 4 4 4 4 4 4 4 5

5 4 3 3 3 3 3 4 5

5 4 3 2 2 2 3 4 5

5 4 3 2 1 2 3 4 5

5 4 3 2 2 2 3 4 5

5 4 3 3 3 3 3 4 5

5 4 4 4 4 4 4 4 5

5 5 5 5 5 5 5 5 5

ive been having a lot of trouble with this and would appriciate any help

Answer by Geoff Hayes
on 3 May 2019

Accepted Answer

Tristan - why not use a for loop

surround = 1;

for k = 2:5

surround = surroundWith(surround, k);

end

Tristan Murphy
on 3 May 2019

Geoff Hayes
on 3 May 2019

since you are told that this solution would be very helpful then I don't understand why you can't use it. :)

function layered = makelayered(a)

layered = 1;

for k = 2:a

layered = surroundWith(layered, k);

end

end

Tristan Murphy
on 3 May 2019

alrighty thanks for all the help :)

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.