# Programmeren, de basis/Deelproblemen

Bij eenvoudige problemen lijkt de oplossing soms heel makkelijk. Toch is het belangrijk te leren één probleem op te splitsen in deelproblemen. Dat maakt het veel makkelijker om een complex probleem te kunnen oplossen. Bovendien is het zo dat als je dit goed kan, je de deelproblemen kan uitbesteden aan meerdere personen.
Heel wat zaken hebben niet rechtstreeks iets te maken met programmeren, maar wel met het opsplitsen van deelproblemen:
* Het bouwen van een huis is een mooi voorbeeld van het opsplitsen van deelproblemen, daar veel deelproblemen worden uitgevoerd door aparte personen. Zo heb je de metselaar, de vloerder, de loodgieter, de elektricien,... Uiteindelijk bekom je een volledig afgewerkt huis.
* Het maken van spaghetti.
* Lekke band op de weg? Dan moet deze vervangen worden.
* Een groepswerk van geschiedenis.
Iemand die heel goed deelproblemen kan onderscheiden, heeft zeker een groot voordeel bij het aanpakken van grotere programmeerprojecten. Zo zitten er 50 miljoen lijnen code in Windows Vista (ZDnet.be).

## Groepswerk geschiedenis

Vaak gaan we zonder dat we het beseffen deelprobleem uitvoeren. Stel bv. dat je een groepswerk van geschiedenis, dan zal je wellicht te maken hebben met volgende deelproblemen:
* informatie verzamelen
* informatie verwerken
* controle
* afdrukken
* indienen
Deze deelproblemen kan je op hun beurt terug opsplitsen in kleinere deelproblemen:
* informatie verzamelen
** samen naar de bibliotheek gaan.
** iedereen verzamelt thuis informatie
** iedereen verzamelt thuis de kranten
* informatie verwerken
** uit de informatie het bruikbare halen, hoofd- van bijzaken onderscheiden
** eventueel informatie uitknippen en/of inscannen
** tekstverwerker
* controle
** iedereen leest individueel het werk na.
** vragen aan anderen (bv. ouders) om het ook nog eens na te lezen.
** indien nodig moet het werk wat herwerkt worden.
* afdrukken
* indienen

## Oefeningen
### Taalrapport

De deelproblemen zijn:
* Berekenen van het totaal
** totaal = (nl + fr + en) / 3
* Tonen van de juiste afbeelding en boodschap

### Tekstvak met kleur

Er zijn hier niet echt deelproblemen.

### De prijsofferte

Pff, nu lijkt het blijkbaar zo héél eenvoudig niet om dit op 1-2-3 op te lossen. Dus trachten we te zoeken naar deelproblemen, die we dan verder in deze cursus stuk voor stuk gaan uitwerken, totdat we uiteindelijk iets bekomen dat werkt.

#### Stap 1

Er zijn drie abstracte deelproblemen:
* Totaalprijs = bedragExclBTW + BTW-bedrag
* Weergeven van de familienaam van de klant, van boven naar beneden;
* Weergeven afbetalingsplan.

#### Stap 2

Het eerste deelprobleem kunnen we concreter maken door het volgende te stellen:
* Totaalprijs = bedragExclBTW + BTW-bedrag
** bedragExclBTW = prijsOnderdelenMetWinst + prijsWerkuren + verplaatsingskosten;
** BTW-bedrag = bedragExclBTW * BTW-percentage;
* Weergeven van de familienaam van de klant, van boven naar beneden;
* Weergeven afbetalingsplan.

#### Stap 3

Tenslotte kunnen we zelfs nog een stap verder gaan door te komen tot:
* Totaalprijs = bedragExclBTW + BTW-bedrag
** bedragExclBTW = prijsOnderdelenMetWinst + prijsWerkuren + verplaatsingskosten;
*** prijsOnderdelenMetWinst = prijsOnderdelen + prijsOnderdelen * 0,30 = prijsOnderdelen (1 + 0,30) = prijsOnderdelen * 1,30;
*** prijsWerkuren = aantalWerkUren * 42,14;
*** verplaatsingskosten: afhankelijk van de provincie;
** BTW-bedrag = bedragExclBTW * BTW-percentage;
*** BTW-percentage is afhankelijk van de ouderdom van het huis
* Weergeven van de familienaam van de klant, van boven naar beneden;
* Weergeven afbetalingsplan.

#### Deelproblemen die nog verder uitgewerkt zullen moeten worden

Onderstaande (deel)problemen zullen nog verder uitgewerkt moeten worden, maar hoe we dat precies moeten doen moet nog geleerd worden.
* Het bepalen van de precieze verplaatsingskosten
* Het weergeven van de familienaam van de klant, van boven naar beneden;
* Het weergeven afbetalingsplan.