Professional Documents
Culture Documents
Programmeren in C++: Handleiding Voor de Studierichtingen: Elektriciteit/Elektronica Industriële Wetenschappen
Programmeren in C++: Handleiding Voor de Studierichtingen: Elektriciteit/Elektronica Industriële Wetenschappen
Programmeren in C++: Handleiding Voor de Studierichtingen: Elektriciteit/Elektronica Industriële Wetenschappen
C++
Handleiding voor de studierichtingen:
Elektriciteit/Elektronica
Industriële Wetenschappen
1 Inleiding
1.1 Wat is C++?
C++ is een programmeertaal gebaseerd op C.
In tegenstelling tot C is C++ een multi-paradigma programmeertaal, er kunnen
verschillende programmeertechnieken worden gebruikt. De taal is ontworpen door
Bjarne Stroustrup voor AT&T Labs, als verbetering van C. De naam is afkomstig van de
programmaopdracht "C++", wat betekent: verhoog de waarde van de variabele C met 1.
1.3 Compilers
De voorbeelden in deze handleiding zijn console programma’s. Dit betekent dat tekst
wordt gebruikt om met de gebruiker te communiceren. Alle C++ compilers
ondersteunen het compileren van console programma’s. Sla er even de handleiding van
jouw compiler op na hoe dit precies in zijn werk gaat.
Er bestaan verschillende C++ compilers die gratis te downloaden zijn, o.a.:
- Bloodshed Dev-C++
- Open Watcom C/C++
- Code::Blocks C++ IDE
Links wordt de broncode (source code) van ons eerste programma getoond. Rechts
daarvan het resultaat na compilatie en uitvoering. De manier van compileren is
afhankelijk van de gebruikte compiler.
Met dit kleine programma zet haast elke C++ programmeur zijn eerste stappen. Het
schrijft de woorden “Hello World” op je computerscherm. Ondanks al zijn eenvoud bevat
het toch alle componenten van een C++ programma. Laten we de broncode even
overlopen.
//mijn eerste programma in C++
Dit is een commentaarlijn. Elke lijn code die begint met een dubbele schuine streep (//),
wordt door de compiler als commentaar beschouwd en heeft bijgevolg geen enkel
invloed op het verloop van het programma.
#include <iostream>
Lijnen die beginnen met een hekje (hash #) zijn richtlijnen of directives voor de
preprocessor. Dit zijn geen programmalijnen! In dit geval zal de directive #include
<iostream> de preprocessor zeggen om het standaardbestand iostream in het
programma op te nemen. Dit bestand bevat de declaraties van de basis in- en uitvoer
(input/output) bibliotheek (library) in C++ en wordt aan het programma toegevoegd
omdat we later een paar functies uit deze bibliotheek gebruiken. Deze bestanden
noemen we ook header files.
using namespace std;
Alle elementen van de standaard C++ bibliotheek worden gedeclareerd in wat een
namespace wordt genoemd, de namespace met de naam std. Een namespace is eigenlijk
een container die alle uitdrukkingen, ed. bevat.
int main ()
Deze lijn duidt aan waar het hoofdprogramma of main function begint en dit
onafhankelijk van de plaats in de broncode. Het doet er niet of er code voor of na deze
functie is gedefinieerd, alle instructies binnen deze functie worden eerst uitgevoerd in
elke C++ programma. Daarom is het belangrijk dat elk C++ een main function bevat.
Het woord main wordt gevolgd door een paar haakjes (). Dit komt omdat main een
functiedeclaratie is. In C++ maakt dit het verschil tussen een functie en elke andere
declaratie. Optioneel kan tussen de haakjes een lijst met parameters worden
opgenomen.
Onmiddellijk na de haakjes vinden we de inhoud van het hoofdprogramma ingesloten
tussen accolades (braces {}). Wat er tussen de accolades staat is wat de functie doet
wanneer ze wordt uitgevoerd.
cout <<”Hello World”!;
Dit is een C++ instructie of statement. Een uitdrukking is een enkele of samengestelde
uitdrukking die iets kan uitvoeren of realiseren. In ons programma is dit de enige
instructie die een zichtbaar effect heeft.
cout is gedeclareerd in de iostream bibliotheek binnen de std namespace. Nu begrijp je
meteen waarom we eerder deze bibliotheek moesten toevoegen en dienden te
vermelden dat we de specifieke namespace willen gebruiken.
Het valt meteen op dat de instructie eindigt met kommapunt (semicolon ;). Dit karakter
geeft het einde van een instructie aan. In feite dit karakter aan het einde van elke C++
instructie moeten worden toegevoegd. De meest voorkomende fout in C++ is het
vergeten toe te voegen van een “;” aan het einde van een instructie.
return 0;
Deze instructie beëindigd het hoofdprogramma en mag worden gevolgd door een
returncode (in ons voorbeeld is return gevolgd door de code 0). Een returncode 0 wordt
geïnterpreteerd als “het programma werkt zoals verwacht en zonder fouten”.
Het is je opgevallen dat niet alle programmalijnen in ons voorbeeld effectief iets “doen”
wanneer het programma wordt uitgevoerd. Er zijn commentaarlijnen (lijnen die
beginnen met //). Er zijn programmalijnen die richtlijnen geven aan de preprocessor
(lijnen die beginnen met #). En er zijn lijnen die een functie declareren (de functie main
in ons geval) en last but not least, programmalijnen met instructies of statements (cout
bijvoorbeeld).
Het programmavoorbeeld is structureel opgebouwd, voor de leesbaarheid is de code
opgedeeld in verschillende lijnen. Maar in C++ bestaan er geen strikte regels over hoe
we broncode moeten indelen. Zo hadden we bijvoorbeeld in plaats van:
int main()
{
cout << "Hello world!";
return 0;
}
net zo goed:
int main() {cout <<”Hello World!”; return 0;}
kunnen schrijven. Alles op één lijn en dit zo exact dezelfde betekenis hebben als de
voorgaande code.
Programmeren in C++ - ing. Roger D’Joos 5
Beginselen van C++
In dit geval hebben we een extra instructie cout toegevoegd. Ook hier is voor de
duidelijkheid de broncode opgedeeld in één instructie per lijn. Het hoofdprogramma kan
ook als volgt worden geschreven:
int main(){cout << “Hello world!”;cout << “I’m a C++ program.”;return 0;}
int main ()
{
cout <<
"Hello World!";
cout
<< "I'm a C++ program";
return 0;
}
2.2 Commentaar
Commentaar(lijnen) worden door de compiler genegeerd. Maar voor de programmeur
zijn ze van onschatbaar belang, zij laten immers toe om het programma te
documenteren en te verduidelijken. Zonder het verloop van het programma te
beïnvloeden maken zij toch een deel uit van de broncode.
In C++ kan men commentaar als volgt invoegen:
//lijn commentaar
/*blok commentaar*/
In het eerste geval wordt alles vanaf de // tot het einde van de lijn beschouwd als
commentaar.
In het tweede geval, de block comment, wordt alles tussen /* en */ als commentaar
beschouwd. Hier bestaat de mogelijkheid om de commentaar over meer dan één lijn te
spreiden.
Laten we nu wat meer commentaar aan ons tweede programma toevoegen:
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World! "; // prints Hello World!
cout << "I'm a C++ program"; // prints I'm a C++ program
return 0;
}
Opdracht:
Schrijf een programma dat volgende boodschap op het scherm zet:
“Hallo, ik ben <voornaam> en zet mijn eerste stappen in het programmeren in C++.”
Voorzie je code van de nodige commentaar.
3 Variabelen en datatypes
3.1 Inleiding
Het nut van het “Hello World!” programma is twijfelachtig. Verschillende lijnen
broncode schrijven, compileren en uitvoeren. Met als resultaat: één enkele zin op het
scherm. Deze zin meteen op het scherm zetten zou beslist sneller zijn geweest.
Programmeren is veel meer dan enkel één of meerdere lijnen tekst op een
computerscherm plaatsen. Voor we een programma kunnen schrijven dat iets zinvols
doet, eerst een woordje meer over variabelen.
Stel dat je wordt gevraagd om het cijfer 5 te onthouden, daarna ook het cijfer 2. Je hebt
dus twee cijfers in je geheugen opgeslagen. Nu moet je 1 optellen bij het eerste cijfer dat
je hebt opgeslagen. In je geheugen staat nu 6 (5+1) en 2. Je kan nu beide cijfers van
elkaar aftrekken en dat resultaat ook onthouden. In je geheugen staat nu, 6, 2 en 4.
Dit hele proces van opslaan, bewerken en terug opslaan is gelijkaardig aan wat een
computer kan doen met twee cijfers. Het ganse proces kan als volgt in C++ worden
uitgedrukt
a = 5;
b = 2;
a = a + 1;
result = a – b;
Dit is een heel eenvoudig voorbeeld met twee gehele getallen (integers). Bedenk dat een
computer duizenden cijfers en getallen kan opslaan en de meest ingewikkelde
wiskundige bewerkingen kan uitvoeren. Daarom kunnen we een gedeelte van het
geheugen reserveren voor een variabele (cijfer, getal, tekst, etc.) en er een bepaalde
inhoud in opslaan.
Elke variabele heeft een unieke naam (identifier) nodig. In het stukje code hierboven zijn
a, b en result de namen van de verschillende variabelen. We hadden net zo goed een
andere naam kunnen verzinnen, zolang deze maar een geldige naam is.
3.2 Identifiers
Een geldige naam (identifier) voor een variabele bestaat uit letters, cijfers of _ karakters.
Spaties of andere symbolen zijn niet toegelaten. Bovendien dient een naam met een
letter te beginnen maar in uitzonderlijke gevallen kan een naam ook met een _ beginnen.
Bijkomende voorwaarde is dat je bij het verzinnen van je namen rekening moet houden
met het feit dat een naam geen door C++ of je compiler voorbehouden woord kan zijn.
Deze noemt men reserved keywords.
Op de volgende bladzijde vind je een lijst met voorbehouden woorden.
Het is best mogelijk dat je compiler buiten deze lijst nog meer gereserveerde woorden
heeft.
Let op: C++ is wat men noemt een “case sensitive language”. Een naam in hoofdletters is
niet dezelfde als een naam in kleine letters. Zo is bijvoorbeeld RESULTAAT niet hetzelfde
als Resultaat of resultaat.
short int (short) Kort (geheel) 2 bytes Met tekenbit: -32768 tot 32767
getal Zonder tekenbit: 0 tot 65535
long int (long) Lang getal 4 bytes Met tekenbit: -2147483648 tot
2147483647
Zonder tekenbit: 0 tot
4294967295
De eerste lijn creëert een variabele van het type integer met als naam a, de tweede lijn
creëert een variabele van het type float met als naam mijn_getal.
Hier worden drie variabelen: a, b en c van het datatype int gedeclareerd en heeft
dezelfde betekenis als:
int a;
int b;
int c;
De data types char, short, long en int kunnen signed of unsigned zijn, afhankelijk van
het bereik dat we willen gebruiken. Een signed datatype kan positieve en negatieve
getallen weergeven, een unsigned datatype enkel positieve getallen, nul inbegrepen.
Het gebruik van deze datatypes kan worden gespecificeerd door voor de naam signed of
unsigned te vermelden. Bijvoorbeeld:
unsigned short int NumberOfSisters;
signed int MyBalance;
Wanneer we een variabele niet expliciet als signed of unsigned declareren, zullen de
meeste compilers het data type automatisch als signed declareren. In het voorgaande
voorbeeld hadden we dus mogen schrijven:
int MyBalance;
De data types short en long kunnen zonder verdere specificatie worden gebruikt. Zij
verwijzen automatisch naar gehele getallen int. Volgende declaraties hebben dezelfde
betekenis:
short Year;
short int Year;
Een voorbeeld:
//globale en lokale variabelen
#include <iostream>
using namespace std;
//declaratie van globale variabelen
int Integer;
char aCharacter;
char String [20];
unsigned int NumberOf;
int main ()
{
unsigned short Age; //lokale variabele
float aNumber, AnotherOne; //lokale variabelen
cout<< ”Uw Leeftijd? ”;
cin>>Age;
…
}
int a(0);
// initialization of variables 6
#include <iostream>
using namespace std;
int main ()
{
int a=5; // initial value = 5
int b(2); // initial value = 2
int result; // initial value undetermined
a = a + 3;
result = a - b;
cout << result;
return 0;
}
3.7 Strings
Een variabele die niet numerieke waarden langer dan één karakter bevat, is een string.
Omdat het data type string geen fundamenteel type is, moet de C++ bibliotheek string
aan het programma worden toegevoegd.
// my first string This is a string
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string mystring = "This is a string";
cout << mystring;
return 0;
}
Net zoals alle andere basis C++ variabelen hoeft een string geen initiële waarde te
krijgen bij de declaratie, ook kan tijdens de uitvoering van het programma een waarde
worden toegewezen.
3.8 Constanten
Een constante is een uitdrukking met een vaste waarde.
Deze stellen gehele getallen voor. Om een getalwaarde voor te stellen hoeven we geen
aanhalingstekens (“) of andere karakters te gebruiken. Er kan ook geen twijfel over
bestaan dat dit een constante waarde is.
Buiten de getallen uit het decimale talstelsel, kunnen met C++ ook getallen uit het octale
talstelsel (grondtal 8) en het hexadecimale talstelsel (grondtal 16) worden gebruikt.
Om een octaal getal uit te drukken dient voor het getal een 0 te worden geplaatst. Bij een
hexadecimaal getal dient voor het getal 0x te worden geplaatst.
Voorbeeld:
75 //decimaal
0113 //octaal
0x4b // hexadecimaal
Voor het achtervoegsel kunnen zowel hoofd- als kleine letters worden gebruikt.
Dit zijn reële getallen. Het eerste is PI, het tweede is het getal van Avogrado, het derde is
de elektrische lading van een elektron en het laatste is gewoon het cijfer 3 in reële
notatie.
Het standaardtype voor reële getallen is double maar we kunnen er ook een ander
datatype aan toekennen, bijvoorbeeld float of long double. Dit kan door achter het
getal de letter f of l te plaatsen.
Voorbeeld:
3.14159l //long
6.02e23f //float
Elke letter die tot een reëel getal behoort (e, f of l) kan zowel als hoofd- of kleine letter
worden geschreven.
De twee eerste lijnen stellen karakters voor, de twee laatste een string van karakters.
Het valt je meteen op dat om een enkel karakter voor te stellen enkele aanhalingstekens
(‘) worden gebruikt, om een string voor te stellen worden dubbele aanhalingstekens (“)
gebruikt.
Bij het gebruik van karakters en strings dient men er steeds op toe te zien om
aanhalingstekens te gebruiken. Om die manier kan het onderscheid worden gemaakt
met een variabele of een gereserveerd woord.
Voorbeeld:
x
‘x’
In het voorbeeld verwijst x naar een variabele met de naam x, terwijl ‘x’ verwijst naar
het karakter x.
Er zijn bij de karakter- en string constanten een paar buitenbeentjes: de escape codes.
Deze hebben een speciale betekenis en het is moeilijk om deze in de broncode op een
andere manier weer te geven.
Een paar voorbeelden: een tabpositie of een nieuwe lijn. Om het onderscheid te maken
tussen een karakter en een escape code worden escape codes steeds vooraf gegaan door
een back slash \.
Een lijst met vaak gebruikte escape codes:
\n newline
\r carriage return
\t tab
\v vertical tab
\b backspace
\f form feed
\a alert (beep)
\\ backslash (\)
Bijvoorbeeld:
‘\n’
‘\t’
“Left \t Right”
“one\ntwo\nthree”
Bovendien kan op deze manier eender welk karakter door middel van zijn ASCII-waarde
(zie cursus Digitale elektronica 3ELEA) op het scherm worden geplaatst. De ASCII-
waarde dient echter als octaal of hexadecimaal getal te worden uitgedrukt. Bv: \23
In het eerste geval moet de \ onmiddellijk worden gevolgd door het octaal getal. In het
tweede geval moet de \ worden gevolgd door een x met daarna het hexadecimale getal.
Bv: \x23
Een string constante kan over meer dan één lijn broncode worden gespreid door op het
einde van de lijn een backslash (\) te plaatsen.
Bijvoorbeeld:
#define PI 3.14159
#define NEWLINE ‘\n’
In dit voorbeeld zijn breedte en tabulator constanten van respectievelijk het int type en
het char type. Ze worden door de compiler behandeld net zoals alle andere variabelen.
Enkel de waarde kan niet worden gewijzigd.
4 Operators (bewerkingen)
4.1 Inleiding
We kennen variabelen en constanten, we kunnen met beide datatypes bewerkingen
gaan uitvoeren. In tegenstelling tot andere programmeertalen gebruikt C++ vaak tekens
en karakters die geen deel uitmaken van het alfabet maar die toch op ons toetsenbord
aanwezig zijn. Voordeel is dat C++ minder gebruik maakt van bestaande (Engelse)
woorden.
a = 5;
Deze instructie kent de waarde 5 toe aan de variabele a. De toekenning gebeurt steeds
van links naar rechts en nooit andersom!
a = b;
#include <iostream>
using namespace std;
int main ()
{
int a, b; // a:?, b:?
a = 10; // a:10, b:?
b = 4; // a:10, b:4
a = b; // a:4, b:4
b = 7; // a:4, b:7
return 0;
}
Deze code geeft als resultaat dat de waarde van a = 4 en de waarde van b = 7. Merk op
dat de waarde van a niet beïnvloed werd door de waarde van b, ondanks het feit dat we
eerder a = b hebben gesteld (van links naar rechts regel!).
In bovenstaande declaraties is a = lvalue en b = rvalue.
Een voordeel dat C++ heeft ten opzichte van andere programmeertalen is dat een
toewijzing kan worden gebruikt als de rvalue of een gedeelte van de rvalue bij een
volgende toewijzing. Voorbeeld:
a = 2 + (b = 5);
b = 5;
a = 2 + b;
In mensentaal: ken de waarde 5 toe aan variabele b, ken daarna de waarde 2 toe aan
variabele a, vermeerderd met de waarde van de vorige toewijzing. Dit betekent: a = 7.
Volgende uitdrukking is eveneens geldig in C++
a = b = c = 5;
+ optelling
- aftrekking
* vermenigvuldiging
/ deling
% modulo
a = 11 % 3;
4.4 Samengestelde bewerkingen (+=, -=, *=, /=, >>=, <<=, &=, ^=, |=)
Wanneer we de waarde van een variabele willen wijzigen door een bewerking uit te
voeren op de huidige waarde van deze variabele kunnen we de zogenaamde
samengestelde bewerkingen gebruiken.
a -= 5; a = a – 5;
a /= b a = a/b;
Voorbeeld:
// compound assignment operators 5
#include <iostream>
using namespace std;
int main ()
{
int a, b=3;
a = b;
a+=2; // equivalent to a=a+2
cout << a;
return 0;
}
c++;
c += 1;
c = c+1;
Een eigenschap van deze operator is dat we hem als voor- en als achtervoegsel kunnen
gebruiken. Met andere woorden, voor de variabele (++a) of na de variabele (a++).
Maar…in simpele bewerkingen zoals a++ of ++a heeft dit dezelfde betekenis, in andere
uitdrukkingen waarin het resultaat van deze bewerking wordt geëvalueerd, kan er een
verschil van betekenis ontstaan.
Even verduidelijken: in het geval van ++a wordt a vermeerderd voor het resultaat van
deze bewerking wordt geëvalueerd en verder wordt gebruikt. In het geval a++ wordt de
vermeerderde waarde pas in a opgeslagen na dat het resultaat van de bewerking is
geëvalueerd.
b=3; b=3;
a=++b: a=b++;
//a = 4 en b=4 //a = 3 en b = 4
== gelijk aan
(7 == 5) //levert false op
(5 > 4) //levert true op
(3 != 2) //levert true op
(6 >= 6) //levert true op
(5 < 5) //levert false op
a b a && b
a b a || b
Wanneer aan de voorwaarde is voldaan, levert de uitdrukking waarde 1 op, is niet aan
de voorwaarde voldaan dan levert de uitdrukking waarde 2 op.
// voorwaardelijke operator 7
#include <iostream>
using namespace std;
int main ()
{
int a, b, c;
a = 2 : b = 7;
c = (a > b) ? a : b;
cout << c;
return 0
}
In het voorbeeld is a gelijk aan 2 en b gelijk aan 7. De evaluatie a > b levert false op zodat
het resultaat gelijk is aan 7.
De operator << mag meer dan eens in één instructie (statement of programmalijn)
worden gebruikt.
cout << “Hallo, “ << “ik ben ” << “een C++ uitdrukking.”;
De laatste instructie toont Hallo, ik ben een C++ uitdrukking op het scherm.
Een combinatie van karakters en variabelen of meer dan één variabele kunnen op deze
manier op het scherm worden getoond.
cout << “Hallo, ik ben “, << leeftijd << “jaar oud en mijn postnummer is “ << postcode
Belangrijk om weten is dat cout na uitvoering niet automatisch naar het begin van een
nieuwe lijn gaat.
Wanneer we aan het begin van een nieuwe lijn willen starten, dan moeten we dit
expliciet vermelden in de statements. In C++ kennen we \n (backslash n) als de
uitdrukking die zegt om aan een nieuwe lijn te beginnen.
De statements
Eerste lijn.
Volgende lijn.
Laatste lijn.
Eerste lijn.
Volgende lijn.
int leeftijd;
cin >> leeftijd;
Het eerste statement declareert een variabele van het type integer met als naam leeftijd.
Het tweede statement wacht op invoer via het toetsenbord.
Cin kan de invoer pas verwerken wanneer op de “Return”- of “Enter”- toets wordt
gedrukt.
int main ()
{
int i;
cout << "Geef een geheel getal: ";
cin >> i;
cout << "Het ingevoerde getal is: " << i;
cout << " en het dubbele hiervan is: " << i*2
<< ".\n";
return 0;
}
De gebruiker van een computerprogramma ligt zeer vaak aan de basis van optredende
fouten, zelfs in een relatief eenvoudig programma zoals dat hierboven. Er wordt een
geheel getal verwacht maar stel dat de gebruiker een naam (string) ingeeft. Resultaat:
een foutmelding! Later zullen we zien dat we dit kunnen omzeilen.
Het kan ook voorkomen dat wordt gevraagd om meer dan één gegeven tegelijkertijd in
te voeren.
int a, b;
cin >> a >> b;
/* dit is hetzelfde als
cin >> a;
cin >> b
*/
De gebruiker dient hier twee waarden in te voeren, één waarde voor variabele a en één
waarde voor variabele b. Beide waarden worden gescheiden door één van volgende
blanco karakters: een spatie, een TAB of een nieuwe lijn \n.
Maar, zoals reeds eerder gezegd, wordt de invoer gestopt wanneer een blanco karakter
in de string voorkomt. Soms nuttig maar vaak erg vervelend, vooral wanneer
bijvoorbeeld een hele zin moet worden ingelezen.
Dit kunnen we omzeilen door de functie getline te gebruiken.
// Invoer van karakterstrings met cin What's your name? Kris Kras
#include <iostream> Hallo Kris Kras.
#include <string>
Wat is uw favoriete voetbalploeg? ‘t
using namespace std; Hoekske
Ik vind ‘t Hoekske ook goed!
int main ()
{
string mystr;
cout << "Wat is uw naam? ";
getline (cin, mijnstring);
cout << "Hallo " << mijnstring << ".\n";
cout << "Wat is uw favoriete voetbalploeg? ";
getline (cin, mijnstring);
cout << "Ik vind " << mijnstring << " ook
goed!\n";
return 0;
}
5.5 Stringstream
Het standaardbestand sstream bevat een functie stringstream. Deze laat ons toe om op
een eenvoudige manier karakters in of uit strings te halen. Dit is bijzonder handig
wanneer men karakters naar een getalwaarde wenst te converteren of omgekeerd. Een
voorbeeld: we wensen een getalwaarde uit een string te halen.
string mijnstr ("1204"); // declarative van een stringvariabele met als inhoud 1204
int mijnint; // declaratie van een variabele van het type integer
stringstream(mijnstr) >> mijnint; // de inhoud van mijnstr wordt omgezet naar een getalwaarde
// en in de variabele mijnint geplaatst.
int main ()
{
string mijnstr;
float prijs = 0;
int aantal = 0;
In dit voorbeeld dienen we een aantal numerieke waarden (prijs en aantal) in te voeren.
In plaats van deze als getallen in te voeren, worden ze als karakterstrings ingelezen. Met
behulp van stringstream worden ze daarna omgevormd en in de respectievelijke
variabelen geplaatst.
Door deze methode toe te passen hebben we meer controle over wat er met de invoer
van numerieke waarden, getallen dus, gebeurt. Het ingeven door de gebruiker en de
interpretatie door de computer zijn nu volledig van elkaar gescheiden. Deze methode
wordt dan ook toegepast wanneer veel numerieke waarden dienen te worden ingevoerd
door de gebruiker.
6 Controlestructuren
6.1 Inleiding
De opbouw van een programma blijft meestal niet beperkt tot een sequentie van
instructies. Zo kunnen bepaalde programmaonderdelen worden herhaald, beslissingen
worden genomen, etc. Om deze redenen beschikt C++ over een aantal
controlestructuren om dit mogelijk te maken.
Met de invoer van deze controlestructuren dienen we een nieuw concept in te voeren:
de samengestelde instructie of blok. Dit is een groep van instructies gescheiden door ;
(net zoals alle C++ instructie) maar gegroepeerd in een blok omgeven door accolades { }.
{ instructie 1; instructie 2; instructie 3}
If (x == 100)
cout << “x is gelijk aan 100”;
Willen we meer dan één instructie uitvoeren wanneer aan een voorwaarde is voldaan,
dan gebruiken we een blok of samengestelde instructie.
If (x == 100)
{
Cout << “x is “;
Cout << x;
}
We kunnen ook specificeren wat er moet gebeuren wanneer niet aan de voorwaarde is
voldaan. Dit doen we door het gereserveerde woord else te gebruiken.
If (voorwaarde) instructie 1 else instructie 2
Een voorbeeld:
if (x ==100)
cout << “x is gelijk aan 100”;
else
cout << “x is niet gelijk aan 100”;
if (x > 0)
cout << "x is positief";
else if (x < 0)
cout << "x is negatief";
else
cout << "x is gelijk aan 0";
Hier wordt de instructie herhaald zolang aan de uitdrukking is voldaan. Een voorbeeld
vindt u op volgende bladzijde:
int main ()
{
int n;
cout << "Geef het begincijfer: ";
cin >> n;
while (n>0)
{
cout << n << ", ";
--n;
}
Bij de start van het programma wordt de gebruiker gevraagd om het getal in te geven
van waar de aftelling moet beginnen. Het blok tussen de accolades wordt herhaald
zolang aan de voorwaarde n > 0 wordt voldaan.
Bij het maken van een while loop moeten we rekening houden met het feit dat deze
eindig moet zijn, er moet een ogenblik zijn waarop niet langer aan de gestelde
voorwaarde wordt voldaan. Gebeurt dit niet dan zal de while lus oneindig lang duren. In
het voorbeeld hebben we er voor gezorgd dat telkens de lus wordt doorlopen de
variabele n met 1 wordt verminderd. Wanneer n gelijk wordt aan nul, is niet langer aan
de voorwaarde voldaan en zal de lus eindigen.
Ook hier wordt een instructie herhaald zolang aan een voorwaarde is voldaan. In
tegenstelling tot de voorgaande herhalingsopdrachten waar niet exact was bepaald hoe
vaak deze werd doorlopen, is bij de for loop vooraf geweten hoe vaak hij wordt
uitgevoerd. Een voorbeeld:
int main ()
{
int n;
for (n=10; n>0; n..)
{
cout << n << ", ";
if (n==3)
{
cout << "aftellen gestopt!";
break;
}
}
return 0;
}
int main ()
{
for (int n=10; n>0; n..)
{
if (n==5) continue;
cout << n << ", ";
}
cout << "FIRE!\n";
return 0;
}
Het bijzondere aan de switch structuur is dat er labels worden gebruikt in plaats van
samengestelde instructies of blokken. Dit maakt dat we na een groep instructies die
wordt uitgevoerd bij een bepaalde voorwaarde een break moeten gebruiken. Doen we
dit niet dan wordt alle code volgend aan de switch instructie uitgevoerd.
switch (x)
{
case 1:
case 2:
case 3:
cout << "x is 1, 2 or 3";
break;
default:
cout << "x is not 1, 2 nor 3";
}
7 Functies