#include <stdio.h>
#include <stdlib.h>
//drawTriangle: Called on to draw the triangle
void drawTriangle( int size, char direction, char pattern) ;
//main: Gathers input and calls drawTriangle
//lowercase a c character by reference
char tolower ( char & c)
{
if ( c > 0x40 && c < 0x5B )
c + = 0x20 ;
return c;
}
int strlen ( char * str)
{
char * c = str;
int i;
for ( i = 0 ; * c! = 0 ; ++ i, ++ c) ;
return i;
}
bool strstr ( char * in, char c)
{
char * str = in;
for ( int i = 0 ; i < strlen ( in) ; ++ str, ++ i)
if ( * str== c)
return true ;
return false ;
}
void ScanInputChar( const char * prompt, char & input, int len, char * expected)
{
do
{
char buf[ 16 ] ;
printf ( prompt) ;
fgets ( buf, 16 , stdin ) ;
input = buf[ 0 ] ;
tolower ( input) ;
}
while ( ! strstr ( expected, input) ) ;
}
void ScanInputNum( const char * prompt, int & input, int expectedmin, int expectedmax)
{
do
{
char buf[ 16 ] ;
printf ( prompt) ;
fgets ( buf, 16 , stdin ) ;
input = atoi ( buf) ;
}
while ( input < expectedmin || input > expectedmax) ;
}
int main( ) {
//Variables which will be filled by user
int size;
char direction, pattern;
//Getting input from user
ScanInputNum( "Please enter the size of your triangle (Must be between 1-15)\n " , size, 1 , 15 ) ;
ScanInputChar( "Please enter the direction of your triangle (Either F or B)\n " , direction, 1 , "FBfb" ) ;
ScanInputChar( "Please enter the pattern for your triangle (V for vertical, H for horizontal, or N for none)\n " , pattern, 1 , "VHNvhn" ) ;
printf ( "\n \n Here is your triangle:\n \n " ) ;
//Calling drawTirangle and sending the user input
drawTriangle( size, direction, pattern) ;
system ( "pause" ) ;
return 0 ;
}
//drawTriangle: Draws the triangle using the users parameters
void drawTriangle( int size, char direction, char pattern)
{
int iStart = 0 ;
int iPos = 0 ;
int iSize = size;
int iIncrement = 0 ;
bool bDirection = ( direction == 'b' ) ; //true if backward
if ( bDirection)
iIncrement = - 1 ;
else
iIncrement = 1 ;
for ( int i = 0 ; i < size; ++ i, iPos+ = iIncrement)
{
if ( bDirection)
{
for ( int k = size- i; k> 1 ; k-- )
printf ( " " ) ;
}
for ( int j = 0 ; j ! = iPos + iIncrement; j+ = iIncrement)
{
if ( bDirection)
printf ( " " ) ;
if ( pattern == 'v' )
{
if ( ( j + ( ( i% 2 ) * bDirection) ) % 2 == 0 )
printf ( "#" ) ;
else
printf ( "*" ) ;
}
else if ( pattern == 'h' )
{
if ( i% 2 == 0 )
printf ( "#" ) ;
else
printf ( "*" ) ;
}
else
{
printf ( "*" ) ;
}
if ( ! bDirection)
printf ( " " ) ;
}
printf ( "\n " ) ;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCgovL2RyYXdUcmlhbmdsZTogQ2FsbGVkIG9uIHRvIGRyYXcgdGhlIHRyaWFuZ2xlCnZvaWQgZHJhd1RyaWFuZ2xlKGludCBzaXplLCBjaGFyIGRpcmVjdGlvbiwgY2hhciBwYXR0ZXJuKTsKCi8vbWFpbjogR2F0aGVycyBpbnB1dCBhbmQgY2FsbHMgZHJhd1RyaWFuZ2xlCgovL2xvd2VyY2FzZSBhIGMgY2hhcmFjdGVyIGJ5IHJlZmVyZW5jZQpjaGFyIHRvbG93ZXIoY2hhciAmYykKewoJaWYoYyA+IDB4NDAgJiYgYyA8IDB4NUIpCgkJYyArPSAweDIwOwoJcmV0dXJuIGM7Cn0KCmludCBzdHJsZW4oY2hhciAqc3RyKQp7CgljaGFyICpjID0gc3RyOwoJaW50IGk7Cglmb3IoaSA9IDA7ICpjIT0wOyArK2ksICsrYyk7CgoJcmV0dXJuIGk7Cn0KCmJvb2wgc3Ryc3RyKGNoYXIgKmluLCBjaGFyIGMpCnsKCWNoYXIgKnN0ciA9IGluOwoJZm9yKGludCBpID0gMDsgaSA8IHN0cmxlbihpbik7ICsrc3RyLCArK2kpCgkJaWYoKnN0cj09YykKCQkJcmV0dXJuIHRydWU7CgoJcmV0dXJuIGZhbHNlOwp9Cgp2b2lkIFNjYW5JbnB1dENoYXIoY29uc3QgY2hhciAqcHJvbXB0LCBjaGFyICZpbnB1dCwgaW50IGxlbiwgY2hhciogZXhwZWN0ZWQpCnsKCWRvCgl7CgkJY2hhciBidWZbMTZdOwoJCXByaW50Zihwcm9tcHQpOwoJCWZnZXRzKGJ1ZiwgMTYsIHN0ZGluKTsKCQlpbnB1dCA9IGJ1ZlswXTsKCQl0b2xvd2VyKGlucHV0KTsKCX0KCXdoaWxlKCFzdHJzdHIoZXhwZWN0ZWQsIGlucHV0KSk7Cn0KCnZvaWQgU2NhbklucHV0TnVtKGNvbnN0IGNoYXIgKnByb21wdCwgaW50ICZpbnB1dCwgaW50IGV4cGVjdGVkbWluLCBpbnQgZXhwZWN0ZWRtYXgpCnsKCWRvCgl7CgkJY2hhciBidWZbMTZdOwoJCXByaW50Zihwcm9tcHQpOwoJCWZnZXRzKGJ1ZiwgMTYsIHN0ZGluKTsKCQlpbnB1dCA9IGF0b2koYnVmKTsKCX0KCXdoaWxlKGlucHV0IDwgZXhwZWN0ZWRtaW4gfHwgaW5wdXQgPiBleHBlY3RlZG1heCk7Cn0KCmludCBtYWluKCkgewogICAgLy9WYXJpYWJsZXMgd2hpY2ggd2lsbCBiZSBmaWxsZWQgYnkgdXNlcgogICAgaW50IHNpemU7CiAgICBjaGFyIGRpcmVjdGlvbiwgcGF0dGVybjsKCiAgICAvL0dldHRpbmcgaW5wdXQgZnJvbSB1c2VyCglTY2FuSW5wdXROdW0oIlBsZWFzZSBlbnRlciB0aGUgc2l6ZSBvZiB5b3VyIHRyaWFuZ2xlIChNdXN0IGJlIGJldHdlZW4gMS0xNSlcbiIsIHNpemUsIDEsIDE1KTsKCVNjYW5JbnB1dENoYXIoIlBsZWFzZSBlbnRlciB0aGUgZGlyZWN0aW9uIG9mIHlvdXIgdHJpYW5nbGUgKEVpdGhlciBGIG9yIEIpXG4iLCBkaXJlY3Rpb24sIDEsICJGQmZiIik7CglTY2FuSW5wdXRDaGFyKCJQbGVhc2UgZW50ZXIgdGhlIHBhdHRlcm4gZm9yIHlvdXIgdHJpYW5nbGUgKFYgZm9yIHZlcnRpY2FsLCBIIGZvciBob3Jpem9udGFsLCBvciBOIGZvciBub25lKVxuIiwgcGF0dGVybiwgMSwgIlZITnZobiIpOwoKICAgIHByaW50ZigiXG5cbkhlcmUgaXMgeW91ciB0cmlhbmdsZTpcblxuIik7CgogICAgLy9DYWxsaW5nIGRyYXdUaXJhbmdsZSBhbmQgc2VuZGluZyB0aGUgdXNlciBpbnB1dAogICAgZHJhd1RyaWFuZ2xlKHNpemUsIGRpcmVjdGlvbiwgcGF0dGVybik7CgoJc3lzdGVtKCJwYXVzZSIpOwogICAgCglyZXR1cm4gMDsKfQoKLy9kcmF3VHJpYW5nbGU6IERyYXdzIHRoZSB0cmlhbmdsZSB1c2luZyB0aGUgdXNlcnMgcGFyYW1ldGVycwp2b2lkIGRyYXdUcmlhbmdsZShpbnQgc2l6ZSwgY2hhciBkaXJlY3Rpb24sIGNoYXIgcGF0dGVybikgCnsKCWludCBpU3RhcnQgPSAwOwoJaW50IGlQb3MgPSAwOwoJaW50IGlTaXplID0gc2l6ZTsKCWludCBpSW5jcmVtZW50ID0gMDsKCWJvb2wgYkRpcmVjdGlvbiA9IChkaXJlY3Rpb24gPT0gJ2InKTsgLy90cnVlIGlmIGJhY2t3YXJkCgoJaWYoYkRpcmVjdGlvbikKCQlpSW5jcmVtZW50ID0gLTE7CgllbHNlCgkJaUluY3JlbWVudCA9IDE7CgoJZm9yKGludCBpID0gMDsgaSA8IHNpemU7ICsraSwgIGlQb3MrPWlJbmNyZW1lbnQpCgl7CgkJaWYoYkRpcmVjdGlvbikKCQl7CgkJCWZvcihpbnQgayA9IHNpemUtaTtrPjE7IGstLSkKCQkJCXByaW50ZigiICAiKTsKCQl9CgoJCWZvcihpbnQgaiA9IDA7IGogIT0gaVBvcyArIGlJbmNyZW1lbnQ7IGorPWlJbmNyZW1lbnQpCgkJewoJCQlpZihiRGlyZWN0aW9uKQoJCQkJcHJpbnRmKCIgIik7CgoJCQlpZihwYXR0ZXJuID09ICd2JykKCQkJewkKCQkJCWlmKChqICsgKChpJTIpKmJEaXJlY3Rpb24pKSUyPT0wKQoJCQkJCXByaW50ZigiIyIpOwoJCQkJZWxzZQoJCQkJCXByaW50ZigiKiIpOwoJCQl9CgkJCWVsc2UgaWYocGF0dGVybiA9PSAnaCcpCgkJCXsKCQkJCWlmKGklMj09MCkKCQkJCQlwcmludGYoIiMiKTsKCQkJCWVsc2UKCQkJCQlwcmludGYoIioiKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXByaW50ZigiKiIpOwoJCQl9CgkJCQoJCQlpZighYkRpcmVjdGlvbikKCQkJCXByaW50ZigiICIpOwoJCQkKCQl9CgkJcHJpbnRmKCJcbiIpOwoJfQp9