Source: http://wp.unil.ch/risk/files/2014/01/3.-Principes-de-programmation-Corrig%25C3%25A9.pdf