16. Meer data types
Long
Tot nu toe hebben we voor het opslaan van gehele getallen het data type integer gebruikt. Maar er is een maximum waarde dat je kan opslaan in een integer. De maximum waarde die opgeslagen kan worden hangt af van je compiler. Met de code INT_MIN
en INT_MAX
uit de <climits>
library kun je zien wat de minimum en maximum waarde van een integer voor jouw compiler is.
Tijdens programmeerwedstrijden komt het soms voor dat een integer niet groot genoeg is voor de testcases die gebruikt worden. In dat geval moet je gebruik maken van: long long int
.
In onderstaande code is de integer niet groot genoeg voor de variabele uitkomst.
Opdracht 16.1
Pas bovenstaande code aan zodat de uitkomst correct is.
Maak gebruik van een long long int
.
De grootte van de verschillende data types wordt uitgedrukt in bits. Meer bits betekent dat variabelen van dat type meer verschillende waardes kunnen opslaan. Een long long int
is minimaal 64-bits. Een int
is minimaal 16-bits maar kan ook 32-bits zijn afhankelijk van je compiler.
Opdracht 16.2 Waarom heeft INT32_MAX de waarde 2 147 483 647 en niet de waarde 4 294 967 296?
Opdracht 16.3
Wat is de grotere variant van het data type float
?
Opdracht 16.4 Maak de opdracht Subset Mex. Dit is een van de opgaves van de EGOI 2022 in Turkije.
Array STL
In het hoofdstuk Arrays hebben we geleerd hoe arrays werken. Naast de arrays die we gezien hebben in dat hoofdstuk is er ook een library <array>
die we kunnen gebruiken. De werking is hetzelfde, alleen de declaratie van de array is anders en er zijn nu meer built-in functies beschikbaar. De declaratie van de array lijkt nu meer op de declaratie van een vector.
Voorbeeld met de gebruik van de library <array>:
Nuttige functies zijn:
size() -> geeft de grootte van de array
front() -> geeft het eerste element in de array
back() -> geeft het laatste element in de array
swap() -> kopieert de inhoud van een array naar een andere array
empty() -> checkt of de array leeg is
fill() -> vul de hele array met dezelfde waarde
Opdracht 16.5 Maak een van de opdrachten in het hoofdstuk Arrays met een de Array STL.
Struct
Met een struct kun je meerdere variabelen groeperen. Een groenteboer wil bijvoorbeeld eigenschappen van fruit vastleggen. Zij wil dan vastleggen wat voor soort fruit het is en wat de prijs is en het aantal dat aanwezig is in de winkel. Hiervoor kunnen we een struct gebruiken.
In bovenstaande code kan je maar 1 fruitsoort opslaan. Je kan meerdere variabelen van het type struct_fruit aanmaken maar mooier is het om een array te declareren van het type struct_fruit.
Op deze manier kan je meerdere fruitsoorten opslaan. De eerste fruitsoort wordt dan:
Opdracht 16.6 Bij een hardloopwedstrijd worden de namen van de deelnemers en het aantal minuten dat de deelnemers gerend hebben opgeslagen. Schrijf een programma dat met deze invoer berekent wat de naam was van de snelste renner. Gebruikt een struct om de namen en tijden op te slaan.
Pointers
Pointers is een onderwerp dat lastiger is om te begrijpen. In dit hoofdstuk is een korte intro over pointers zodat jullie begrijpen wat een pointer is als je ze tegenkomt in een code. Een variabele is een naam die je geeft aan een plaats in het geheugen van je computer, zodat je daar gegevens op kunt slaan. De geheugenplaatsen hebben een adres, een uniek getal, om precies aan te geven waar in het geheugen de gegevens zich bevinden.
Je kunt zien wat het geheugenadres van een variabele is met de volgende code:
Opdracht 16.7 Wat is het geheugenadres van de variabele dier?
Een pointer variabele bevat een geheugenadres. Door het adres op te geven, wijst een pointer naar een unieke plaats in het geheugen. Op die plaats staat de daadwerkelijke waarde.
Schematisch ziet dat er zo uit:
Een pointer declareer je door een * na het type van de variabele te zetten:
string* dierPointer;
Dit kan je doen voor alle gegevenstypes, dus ook voor int , float etc. Als je een variabele hebt gedeclareerd dan heeft deze pointer nog geen waarde, ze wijzen dus nog nergens naar.
Een methode om een pointer variabele een waarde te geven is:
dierPointer = &dier;
nu wijst de pointer naar hetzelfde geheugenadres als de variabele dier, die de waarde Octopus heeft.
Opdracht 16.8 Wat is de uitvoer van onderstaand programma?
Bovenstaande code print het geheugenadres van de pointer, hier zijn we minder in geïnteresseerd. We willen graag weten wat de waarde is van de variabele waar de pointer naar toe wijst. Dit kan met de code *
dierPointer
.
Opdracht 16.9 Wat is de uitvoer van onderstaand programma?
Je kan de waarde van de variabele waar de pointer naar wijst ook aanpassen met de code:
*
dierPointer = "Zeekoe";
Opdracht 16.10 Wat is de uitvoer van onderstaand programma?
Last updated