10. Functies - deel 2

In het hoofdstuk Functies - deel 1 heb je over parameters geleerd. Bij een functie zijn er 2 soorten parameters:

  • Call by value: een kopie van de variabele wordt als parameter doorgegeven. Dit betekent dat als de variabele in de functie van waarde veranderd, de originele variabele nog steeds dezelfde waarde heeft.

  • Call by reference: de variabele zelf wordt als parameter doorgegeven. Dit betekent dat als de variabele in de functie van waarde veranderd, de originele variabele ook van waarde is veranderd. Met een & teken voor de parameter geef je aan dat dit een call by reference variabele is.

Voorbeeld van call by value:

#include <iostream> 
using namespace std;

void hoogOp (int getal_in_functie){
    getal_in_functie++; //Lokaal in de functie wordt de waarde van getal 1
}

int main(){
  int getal = 0; //De variabele getal wordt gedeclareerd met de waarde 0
  hoogOp(getal);
  cout << "Waarde van getal = " << getal; //De waarde in de main is niet opgehoogd 
                                          //en er zal dus 0 geprint worden
  return 0;              
}

Voorbeeld van call by reference:

#include <iostream> 
using namespace std;

void hoogOp (int &getal_in_functie){
    getal_in_functie ++; //In dit geval is getal een kopie van getal uit de main 
                         //en dus worden beide nu opgehoogd met 1
}

int main(){
  int getal = 0; //De variabele getal wordt gedeclareerd met de waarde 0
  hoogOp(getal);
  cout << "Waarde van getal = " << getal; //Er wordt nu 1 geprint
  return 0;   
}

Opdracht 10.1 Probeer beide voorbeelden uit. Wat is het verschil tussen de 2 voorbeelden?

Een vector kun je ook call-by-value en call-by-reference aan een functie doorgeven:

void func(vector<int> vect) //call-by-value void func(vector<int> &vect) //call-by-reference

Voorbeeld met vector als call-by-reference parameter:

#include <iostream>
#include <vector>
using namespace std;
 
void voegtoe (vector<int> &vect, int getal) {
    vect.push_back(getal);
}   
 
int main() {    
  vector<int> vect;
  voegtoe(vect, 30);
  voegtoe(vect, 20);
  voegtoe(vect, 50);
  for (int getal: vect)
    cout << getal << endl;
  return 0;
}

Voorbeeld met 2D vector als call-by-value parameter:

#include <iostream>
#include <vector>
using namespace std;
 
void printVector (vector <vector <int> > vect) {
  for (int i = 0; i < vect.size(); i++){
    for (int j = 0; j < vect[i].size(); j++){
      cout << vect[i][j] << " ";
    }    
    cout << endl;
  }
}   
 
int main() {    
  vector <vector <int> > vect = {{1,2,3},{4,5,6},{7,8,10}}; 
  printVector(vect);
  return 0;
}

Opdracht 10.2 Schrijf de eerste opgave van het hoofdstuk Vectors nu met een functies voor elk commando. Geef de vector aan de functies door als parameter.

Built-in functies C++ bevat nuttige functies die je kan gebruiken. Bijvoorbeeld: - min: geeft de kleinste van 2 getallen - max: geeft de grootste van 2 getallen - swap: hiermee kun je de waardes van 2 variabelen omwisselen - sqrt: berekent de wortel. Deze kot - pow: berekent de macht - ceil: naar boven afronden - floor: naar beneden afronden - sort: sorteert de waardes in een array Voor sommige functies moet je wel een extra library toevoegen aan je code. Bijvoorbeeld:

#include <iostream>     
#include <string>    
#include <vector>
#include <algorithm>    
#include <cmath>

Op de pagina https://en.cppreference.com/w/cpp/header kun je een reference vinden van alle libraries. Als je bijvoorbeeld de library <cmath> selecteert dan kan je alle built-in functies zien van deze library.

Opdracht 10.3 Bepaal de kleinste van 3 getallen met de functie min. Kijk op de reference pagina hoe je de functie min kan gebruiken.

Opdracht 10.4 Schrijf een programma dat de cijfers in onderstaande vector sorteert. Maak gebruik van de functie sort. Kijk op de reference pagina hoe je de functie sort kan gebruiken. vector cijfers = { 5, 4, 9, 12, 8, 7, 13, 15, 4, 2, 1, 0, 4, 2, 5, 0, 4, 2, 10, 5, 20, 1, 7, 23, 16};

Zoals je kan zien zijn er veel verschillende standaard libaries die je kan toevoegen aan je code. Je kunt alle standaard libraries ook in een keer toevoegen met de code:

#include <bits/stdc++.h> Deze code is tijdens programmeerwedstrijden heel nuttig omdat het je tijd bespaart. Maar het heeft ook zeker nadelen dus buiten programmeerwedstrijden is het beter dit niet te gebruiken.

Last updated