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.

#include <iostream>
using namespace std;
#include <climits>
 
int main()
{
  cout << INT_MAX << endl;
  cout << INT_MIN << endl;
  return 0;
}

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.

#include <iostream>
using namespace std;
 
int main()
{
  int getal1 = 100000; 
  int getal2 = 100000;
  int uitkomst = getal1 * getal2;
  cout << uitkomst << endl;
  return 0;
}

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>:

#include <array>
#include <iostream>
using namespace std;
 
int main(){
  array <int , 10> rij;
  int getal;
  for(int i=0;i<10;i++){
    cin >> getal;
    rij[i]= getal;
  }
  for(int i=0;i<10;i++){
    cout << rij[i] << endl;
  }
  return 0;
}

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.

#include <iostream>
#include <string>
using namespace std;

int main() {
  
  struct struct_fruit {
    string soort;
    float prijs;
    int aantal;
  };

  struct_fruit fruit;

  fruit.soort = "Appel";
  fruit.prijs = 1.70;
  fruit.aantal = 10;

  cout << "Soort = " << fruit.soort << endl;
  cout << "Prijs = " << fruit.prijs << endl;
  cout << "Aantal = " << fruit.aantal << endl;
}

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.

struct_fruit fruit[10];

Op deze manier kan je meerdere fruitsoorten opslaan. De eerste fruitsoort wordt dan:

fruit[0].soort = "Appel";
fruit[0].prijs = 1.70;
fruit[0].aantal = 10;

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:

string dier = "Octopus"; // Een variabele met de naam dier krijgt de waarde Octupus
cout << dier;  // Deze code print de waarde van de variabele dus Octupus
cout << &dier; // Deze code print het geheugenadres van de variabele

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?

string dier = "Octopus";
string* dierPointer = &dier;
cout << dierPointer;

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?

string dier = "Octopus";
string* dierPointer = &dier;
cout << *dierPointer;

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?

string dier = "Octopus";
string* dierPointer = &dier;
*dierPointer = "Zeekoe";
cout << dier;

Last updated