Programmeren in C++ voor beginners



Dovnload 0.56 Mb.
Pagina9/22
Datum26.08.2016
Grootte0.56 Mb.
1   ...   5   6   7   8   9   10   11   12   ...   22

2.10.Debuggen

Nu onze programma's complexer worden, is het nuttig en leerzaam om de debugger te leren gebruiken. Een fout wordt ook wel een bug genoemd. Debuggen is dus het verwijderen van fouten.


Voor het debuggen is het nuttig de volgende icoontjes in je menubalk te hebben. Dit kan door met de rechtermuisknop op de menubalk te klikken en dan 'Customize | Commands' en dan de icoontjes te slepen naar de gewenst plek op de menubalk.


Icoon

Naam

Sneltoets

Omschrijving



Run

F9

Start het programma



Reset

Ctrl-F2

Stop het programma



Trace Into

F7

Ga met de debugger in een functie



Step Over

F8

Ga met de debugger naar de volgende regel code



View Breakpoints

Ctrl-Alt- B

Bekijk alle breakpoints

Alle programmeurs maken fouten. Onderstaande code zorgt dat het programma hangt, wegens het vergeten van een is-teken.


void __fastcall TForm1::Button1Click(TObject *Sender)

{

for (int i=-10; i!=10; ++i)

{

if (i=0) //Expres fout! Moet 'if (i==0)' zijn

{

break;

}

}

}


De compiler denkt de fout al te zien en geeft dit aan met de volgende melding:
[C++ Warning] Unit1.cpp(21): W8060 Possibly incorrect assignment
Met de debugger is deze fout gemakkelijk te ontdekken. Dit doen we met een breakpoint. Een breakpoint is een punt in het programma, waarop het programma pauzeert. Een breakpoint kan geplaats worden door links in de 'gutter' te klikken.


Een breakpoint
Als we het programma starten en op Button1 klikken, dan stopt het programma op deze breakpoint.



Kylix wacht
Met 'Step Over' (F8) kunnen we naar de volgende regel code gaan. Door met de muiscursor over een variabele te zweven, krijgen we de waarde van deze variabele te zien.

De debugger laat ons de waarde van i zien


Omdat i nog geen waarde heeft gekregen, maar wel een plekje in het computergeheugen heeft, laat de debugger zien wat er op dit moment op het plekje van i staat. Dit kan elke willekeurige waarde zijn. Een 82 in dit geval. Na nog een 'Step Over' wordt i pas op de waarde -10 gezet.
Na een paar keer 'Step Over' wordt duidelijk dat de waarde van i steeds op nul wordt gezet, inplaats van dat er getest wordt of i gelijk is aan nul. De fout is gevonden.

2.11.Volgende week


Volgende week leren we hoe we functies kunnen maken. Ook leren we hoe we de voorgeprogrammeerde functie assert aan kunnen roepen. assert is een belangrijke debug functie. De TStringGrid wordt behandeld: een Component voor een twee dimensionale tabel.

3.Dag 3






Een mogelijk eindprogramma van vandaag.


Onze code gaat er steeds groter en onoverzichtelijker uitzien. Ook zal er regelmatig een stuk code gekopieerd worden. Om dit te voorkomen leren we vandaag onze eigen functies te maken. We leren ook de standaard functie assert gebruiken, die helpt met het debuggen van onze grote programma's. De TStringGrid is het Component van vandaag, een 2-dimensionale tabel van Strings.


3.0.TStringGrid

Het StringGrid kan gebruikt worden als een 1- of 2-dimensionale tabel van Strings.


Onderstaande code vult alle vakjes van een StringGrid met hun x en y coordinaat.
int maxy = StringGrid1->RowCount;

int maxx = StringGrid1->ColCount;
for (int y=0; y!=maxy; ++y)

{

for (int x=0; x!=maxx; ++x)

{

String s = "(" + IntToStr(x) + "," + IntToStr(y) + ")";



StringGrid1->Cells[x][y] = s;

}

}


Merk het volgende op:

* Inplaats van het aantal rijen en kolommen in de for-loop

te zetten, is gekozen deze eerst maxx en maxy te noemen.

Dit hoeft niet.

* Een bepaald vakje wordt met de blokhaken geselecteerd. De

blokhaken worden dan ook wel de index-operator genoemd.

Omdat een StringGrid 2-dimensionaal is, moet er met twee

paar blokhaken worden gewerkt.

* Het eerste vakje heeft index nul. C en C++ beginnen te

tellen bij nul.

* De for-loop loopt van nul tot het aantal kolommen/rijen.

Als het aantal kolommen/rijen gelijk is aan 10, loopt de

for-loop dus van 0 tot en met 9. Dit zijn dus wel het

gewenst aantal van 10 iteraties.

* Een String kan bestaan uit meerdere opgetelde Strings.
Een StringGrid kan gebruikt worden om veel Strings op te slaan en deze op index aan te spreken. Omdat we al Strings kunnen converteren naar int en double, kunnen we ook getallen (als Strings) erin opslaan.



1   ...   5   6   7   8   9   10   11   12   ...   22


De database wordt beschermd door het auteursrecht ©opleid.info 2019
stuur bericht

    Hoofdpagina