Diamond Pattern

Diamond Pattern in C++ (3 Programs With Output)

IntermediateTopic: Advanced Pattern Programs
Back

C++ Diamond Pattern Program

This program helps you to learn the fundamental structure and syntax of C++ programming.

Try This Code
#include <iostream>
using namespace std;

int main() {
    int rows;
    
    cout << "Enter number of rows (half): ";
    cin >> rows;
    
    // Upper part of diamond
    for (int i = 1; i <= rows; i++) {
        for (int j = 1; j <= rows - i; j++) {
            cout << " ";
        }
        for (int j = 1; j <= 2 * i - 1; j++) {
            cout << "*";
        }
        cout << endl;
    }
    
    // Lower part of diamond
    for (int i = rows - 1; i >= 1; i--) {
        for (int j = 1; j <= rows - i; j++) {
            cout << " ";
        }
        for (int j = 1; j <= 2 * i - 1; j++) {
            cout << "*";
        }
        cout << endl;
    }
    
    return 0;
}
Output
Enter number of rows (half): 5
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

Understanding Diamond Pattern

This program teaches you how to print a diamond pattern in C++ using nested loops. A diamond pattern is created by combining an upper pyramid (increasing stars) and a lower inverted pyramid (decreasing stars). This is a classic pattern printing problem that demonstrates advanced loop control and pattern recognition.

---

1. What This Program Does

The program prints a diamond pattern based on the number of rows entered. For example, with 5 rows (half-diamond), it creates:

Upper part: increasing stars forming a pyramid
Lower part: decreasing stars forming an inverted pyramid
Combined: forms a diamond shape

The diamond is symmetric - the upper and lower halves mirror each other.

---

2. Header File Used

This header provides:

cout for displaying output
cin for taking input from the user

---

#include <iostream>

3. Understanding Diamond Pattern

Structure

:

A diamond consists of two parts:

Upper pyramid: stars increase from 1 to maximum
Lower pyramid: stars decrease from maximum-1 to 1

Key Insight

:

The middle row has the maximum number of stars
Upper and lower parts are symmetric
Total rows = 2 * (input rows) - 1

Example

(input = 5):

Upper: 1, 3, 5, 7, 9 stars (5 rows)
Lower: 7, 5, 3, 1 stars (4 rows, excluding middle)
Total: 9 rows forming diamond

---

4. Declaring Variables

The program declares:

int rows;

rows stores the number of rows for half the diamond.
The full diamond will have (2 * rows - 1) total rows.

---

5. Taking Input From the User

The program asks:

cin >> rows;

The user enters a number, for example: 5

This represents half the diamond (upper part).

---

cout << "Enter number of rows (half): ";

6. Upper Part of Diamond

for (int i = 1; i <= rows; i++) {

for (int j = 1; j <= rows - i; j++) {

}

for (int j = 1; j <= 2 * i - 1; j++) {

cout << "*";

}

cout << endl;

}

        cout << " ";

How it works

:

Outer loop (i): iterates from 1 to rows (upper half)
First inner loop: prints (rows - i) spaces for centering
Second inner loop: prints (2*i - 1) stars (odd numbers: 1, 3, 5, ...)
Creates increasing pyramid from top

Output

(for rows = 5, upper part):

*

***

*

***

*

---

7. Lower Part of Diamond

for (int i = rows - 1; i >= 1; i--) {

for (int j = 1; j <= rows - i; j++) {

}

for (int j = 1; j <= 2 * i - 1; j++) {

cout << "*";

}

cout << endl;

}

        cout << " ";

How it works

:

Outer loop (i): iterates from (rows - 1) down to 1 (decreasing)
Starts from rows - 1 to avoid repeating the middle row
First inner loop: prints (rows - i) spaces for centering
Second inner loop: prints (2*i - 1) stars (decreasing: 7, 5, 3, 1)
Creates decreasing inverted pyramid

Output

(for rows = 5, lower part):

***

*

***

*

---

8. Complete Diamond Pattern

Combining both parts creates the full diamond:

Upper Part

(rows 1-5):

*

***

*

***

*

Lower Part

(rows 6-9):

***

*

***

*

Complete Diamond

:

*

***

*

***

*

***

*

***

*

---

9. Understanding the Algorithm

Why rows - 1 in lower loop?

:

Upper part goes from 1 to rows (includes middle row)
Lower part should start from rows - 1 (excludes middle row)
This prevents duplicating the middle row

Formula 2*i - 1

:

Ensures odd number of stars per row
Row 1: 1 star, Row 2: 3 stars, Row 3: 5 stars, etc.
Creates symmetric diamond shape

Spacing Logic

:

(rows - i) spaces center each row
More spaces at top, fewer at middle
Symmetric spacing in upper and lower parts

---

10. Other Patterns (Mentioned but not shown in code)

Hollow Diamond

:

Print stars only at edges
Use conditional: if (j == 1 || j == 2*i-1 || i == 1 || i == rows)
Creates outline of diamond

Number Diamond

:

Replace stars with numbers
Numbers can increase, decrease, or follow patterns
Creates numeric diamond shape

---

11. When to Use Diamond Patterns

Educational Purposes

:

Advanced nested loop practice
Understanding symmetric patterns
Developing pattern recognition skills

Interview Preparation

:

Common coding interview problem
Tests understanding of loops and patterns
Demonstrates logical thinking

Visual Programming

:

Creating geometric shapes
ASCII art generation
Pattern-based graphics

---

12. Important Considerations

Row Calculation

:

Input rows = half diamond size
Total rows = 2 * rows - 1
Middle row is at position: rows

Loop Boundaries

:

Upper: i from 1 to rows (inclusive)
Lower: i from rows - 1 to 1 (decreasing)
Careful with boundaries to avoid duplication

Spacing

:

Single space " " for centering
Consistent spacing creates symmetric appearance
Test with different row counts

---

13. return 0;

This ends the program successfully.

---

Summary

Diamond pattern combines upper pyramid and lower inverted pyramid.
Upper part: stars increase from 1 to maximum (2*rows - 1).
Lower part: stars decrease from (2*(rows-1) - 1) to 1, starting from rows - 1.
Formula 2*i - 1 ensures odd number of stars per row.
Spacing (rows - i) centers each row symmetrically.
Understanding symmetric patterns and loop control is essential.
Variations include hollow diamond and number diamond.
Diamond patterns demonstrate advanced nested loop mastery.

This program is fundamental for beginners learning advanced pattern printing, understanding symmetric patterns, and preparing for complex pattern problems in C++ programs.

Let us now understand every line and the components of the above program.

Note: To write and run C++ programs, you need to set up the local environment on your computer. Refer to the complete article Setting up C++ Development Environment. If you do not want to set up the local environment on your computer, you can also use online IDE to write and run your C++ programs.

Practical Learning Notes for Diamond Pattern

This C++ program is part of the "Advanced Pattern Programs" topic and is designed to help you build real problem-solving confidence, not just memorize syntax. Start by understanding the goal of the program in plain language, then trace the logic line by line with a custom input of your own. Once you can predict the output before running the code, your understanding becomes much stronger.

A reliable practice pattern is to run the original version first, then modify only one condition or variable at a time. Observe how that single change affects control flow and output. This deliberate style helps you understand loops, conditions, and data movement much faster than copying full solutions repeatedly.

For interview preparation, explain this solution in three layers: the high-level approach, the step-by-step execution, and the time-space tradeoff. If you can teach these three layers clearly, you are ready to solve close variations of this problem under time pressure.

Table of Contents