Print symmetric double triangle pattern in C language

CServer Side ProgrammingProgramming

Given with number of lines the program must print the symmetric double triangle pattern with least complexity.

Example

Input: 5
Output:  X
X
O X
O X
X O X O X
X O
X O
X
X

The entire problem contains 3 different partitions −

• Print upper half with n-1 lines for odd n or n-2 lines for even n.

• Print middle lines, 1 line for odd n or 3 lines for even n.

• Print lower half, with n-1 lines for odd n or n-2 lines for even n

Algorithm

START
STEP 1: IF (n % 2 == 0) then
x = x - 1;
Define p as n – 1 for spaces
Define s = 1 for characters
STEP 2: LOOP FOR i= 1 AND i <= (x - 1) / 2 AND i++
LOOP FOR j = 1 AND j <= p AND j++
PRINT SPACE
END LOOP
IF i % 2 != 0 then
GOTO STEP 11 Printx(s)
ELSE
GOTO STEP 12 Printo(s)
END
PRINT NEW LINE
INCREMENT p BY 1
LOOP FOR j = 1 AND j <= p AND j++
PRINT SPACE
END LOOP
IF i % 2 != 0 then,
GOTO STEP 11 Printx(s)
ELSE
GOTO STEP 12 Printo(s)
END IF
PRINT NEWLINE
DECREMENT p BY 1
INCREMENT s BY 1
END LOOP
STEP 3: IF n % 2 == 0 {
LOOP FOR i = 1 AND i <= p AND i++
PRINT SPACE
IF n % 4 != 0 then,
GOTO STEP 11 Printx(n/2)
ELSE
GOTO STEP 12 Printo(n/2)
END IF
PRINT SPACE
END IF
STEP 4: IF n % 2 != 0 then,
GOTO STEP
ELSE
IF n % 4 != 0 then,
DIVIDE n BY 2 AND GOTO STEP 11 Printx(n/2) and Printx(n/2)
ELSE
DIVIDE n BY 2 AND GOTO STEP 11 Printx(n/2) and Printo(n/2)
DIVIDE n BY 2 AND GOTO STEP
END IF
END IF
PRINT NEW LINE
STEP 5: IF n % 2 == 0 then, {
PRINT SPACE
DIVIDE n BY 2 AND GOTO STEP 11 Printx(n/2)
PRINT NEWLINE
END IF
STEP 6: SET p = 1
STEP 7: IF n % 2 == 0
DECREMENT x BY 1
SET p = 2
END IF
STEP 8: SET q = x / 2
STEP 9: LOOP FOR i = 1 AND i <= x AND i++) {
LOOP FOR j = 1 AND j <= p AND j++
PRINT SPACE
END FOR
PASS q TO STEP 11 Printx(q)
IF i % 2 == 0 THEN
DECREMENT q BY 1
END IF
PRINT NEWLINE
INCREMENT p BY 1
END FOR
STEP 10: PRINT NEWLINE
STEP 11: Printx(n)
LOOP FOR i = 1 AND i< = n AND i++
IF i % 2 != 0 then,
PRINT x
ELSE
PRINT o
END IF
END FOR
STEP 12: Printo(n)
LOOP FOR i = 1 AND i< = n AND i++
IF i % 2 != 0 then,
PRINT o
ELSE
PRINT x
STOP

Example

#include <stdio.h>
// printing alternate x o starting with x
int printx(int n) {
int i;
for ( i = 1; i < = n; i++) {
if (i % 2! = 0)
printf("x ");
else
printf("o ");
}
return 0;
}
// printing alternate x o starting with o
int printo(int n) {
int i;
for ( i = 1; i < = n; i++) {
if (i % 2! = 0)
printf("o ");
else
printf("x ");
}
return 0;
}
// To print the pattern for n
int printpattern(int n) {
// upper half
// n-1 lines for odd, n-2 lines for even
int x = n;
int i, j;
if (n % 2 == 0)
x = x - 1;
// number of spaces to leave in each line
int p = n - 1;
// number of characters in each line
int s = 1;
// prints double lines in each iteration
for ( i = 1; i < = (x - 1) / 2; i++) {
for ( j = 1; j < = p; j++) {
printf(" ");
}
if (i % 2! = 0)
printx(s);
else
printo(s);
printf("\n");
p++;
for ( j = 1; j < = p; j++)
printf(" ");
if (i % 2! = 0)
printx(s);
else
printo(s);
printf("\n");
p--;
s++;
}
// extra upper middle for even
if (n % 2 == 0) {
for ( i = 1; i < = p; i++)
printf(" ");
if (n % 4! = 0)
printx(n / 2);
else
printo(n / 2);
printf("\n");
}
// middle line
if (n % 2! = 0)
printx(n);
else {
if (n % 4! = 0) {
printx(n / 2);
printx(n / 2);
} else {
printx(n / 2);
printo(n / 2);
}
}
printf("\n");
// extra lower middle for even
if (n % 2 == 0) {
printf(" ");
printx(n / 2);
printf("\n");
}
// lower half
p = 1;
if (n % 2 == 0) {
x--;
p = 2;
}
int q = x / 2;
// one line for each iteration
for ( i = 1; i < = x; i++) {
for (int j = 1; j < = p; j++)
printf(" ");
printx(q);
if (i % 2 == 0)
q--;
printf("\n");
p++;
}
printf("\n");
return 1;
}
int main() {
int n = 5;
printpattern(n);
return 0;
}

Output

If we run above program then it will generate following output.

      X
X
O X
O X
X O X O X
X O
X O
X
X
Published on 22-Aug-2019 09:19:07