Can someone help me with this matlab code

  • #1
590
0
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?
 

Answers and Replies

  • #2
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)
 
  • #3
thats what i thought must be happening, but i cannot find where, could you show me
 
  • #4
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.
 
  • #5
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
 
  • #6
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:
  • #7
thanks, works pefrectly
 

Suggested for: Can someone help me with this matlab code

Replies
1
Views
766
Replies
15
Views
481
Replies
7
Views
521
Replies
2
Views
704
Replies
1
Views
615
Replies
5
Views
719
Replies
3
Views
445
Back
Top