Source: https://dept-info.labri.fr/ENSEIGNEMENT/programmation1/cours/CM_1___Introduction.pdf