## Introduction

### Decomposition of programming problems

Decomposition of programming programming problems is about breaking the program down into smaller component parts. The process consists of the following components/steps:

**1. Understand the problem**

Identify the main problem or task that needs to be addressed. This is the high-level objective that the program should achieve.

**2. Break down the primary problem**

Break down the primary problem into smaller, more manageable subproblems. Identify the key components or functionalities that need to be implemented to solve the primary problem.

**3. Break down the subproblems**

For each subproblem identified in the previous step, further break it down into smaller subproblems. Continue this process until you reach a level where each subproblem is easily solvable.

**4. Solve the subproblems**

Start solving the subproblems one by one, beginning with the lowest-level subproblems. Implement the necessary logic, algorithms, or functions to address each subproblem individually.

**5. Integrate and test**

As you solve the subproblems, gradually integrate the solutions together. Test the program as a whole to ensure that the subproblems work together correctly and achieve the desired outcome.

## Stepwise Refinement

### Stepwise Refinement

One method of decomposition is the method known as stepwise refinement, a problem-solving technique that involves progressively breaking down a complex problem into simpler and more manageable subproblems. Each subproblem is further refined and detailed until it can be easily solved or implemented.

## Structure Diagrams

### Structure Diagrams

When breaking down problems using stepwise refinement it is often useful to use a structure diagram during the process.