# Can someone help me with this matlab code

• Dell

#### Dell

i need to build a code which asks the user for the size of the desired diamond and then draws it, i can get this to workl perfectly by using the fprintf command and building the diamond out of 4 parts,: see code-

Code:
clc
clear
h=input('enter height of diamond :');
y=1;
while y<=h/2
for x=1:h-1
if x<=((h)/2-(y-1))
fprintf(1,'*\t');
end
if x>(h)/2-(y-1) & x<(h)/2+(y-1)
fprintf(1,'\t');
end
if x>=((h)/2+(y-1)) &x<=h-1
fprintf(1,'*\t');
end
end
y=y+1;
fprintf(1,'\n')
end

while y>h/2 &y<=h
for x=1:h-1
if x<=((h)/2-(h-y))
fprintf(1,'*\t');
end
if x>(h)/2-(h-y) & x<(h)/2+(h-y)
fprintf(1,'\t');
end
if x>=((h)/2+(h-y)) &x<=h-1
fprintf(1,'*\t');
end
end
y=y+1;
fprintf(1,'\n')
end

but for any even numbers i put in as my size, i get 2 extra asterixs on the corners, can anyone see how i chan get rid of them?

Look inside the loops that create the horizontal rows of asterisks. You actually have a degenerate case where two of the if statements get executed! (At the very top and very bottom rows)

thats what i thought must be happening, but i cannot find where, could you show me

I think I mentioned this in a different thread to you, but it's absolutely essential to learn how to use the debugging features of MATLAB, and especially breakpoints:
http://ieee-uffc.org/ultrasonics/software/MATLAB/Lecture8/Lecture8_2.htm
http://en.wikibooks.org/wiki/MATLAB_Programming/Debugging_M_Files

By stepping through, you'll find that the two cases are happening right at the middle (h/2) of the line. Use this information to learn how to use breakpoints.

i think that the problem comes fro the 1st line, where (y-1)=0 therefore, (h)/2-(y-1) is equal to x>(h)/2+(y-1) and so both the 1st and 3rd if commands are executed,
so i tried making one <= and one > but that messed up my whole diamond

Use some elseif statements to prevent the execution of more than one of the if statements:
http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/brqy1c1-1.html#brqy1c1-3 [Broken]

You could use a break statement, but this is considered very poor programming form.

Last edited by a moderator:
thanks, works pefrectly