How to Adjust MATLAB Code to Correctly Draw a Diamond with Even Sizes?

AI Thread Summary
The discussion focuses on adjusting MATLAB code to draw a diamond shape based on user-defined size, specifically addressing issues with even sizes resulting in extra asterisks at the corners. The original code uses nested loops and conditional statements to create the diamond but fails for even heights due to overlapping conditions in the if statements. It is suggested to utilize "elseif" statements to prevent multiple conditions from executing simultaneously, particularly at the diamond's top and bottom rows. Debugging techniques, such as using breakpoints, are recommended to identify and resolve the issue effectively. The proposed adjustments lead to a successful correction of the diamond drawing functionality.
Dell
Messages
555
Reaction score
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?
 
Physics news on Phys.org
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

You could use a break statement, but this is considered very poor programming form.
 
Last edited by a moderator:
thanks, works pefrectly
 

Similar threads

Replies
3
Views
1K
Replies
0
Views
163
Replies
1
Views
2K
Replies
1
Views
2K
Replies
6
Views
2K
Replies
1
Views
1K
Replies
3
Views
2K
Back
Top