6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces...

191
6 Les fonctions Peter Schlagheck Universit ´ e de Li ` ege Ces notes ont pour seule vocation d’ˆ etre utilis ´ ees par les ´ etudiants dans le cadre de leur cursus au sein de l’Universit´ e de Li ` ege. Aucun autre usage ni diffusion n’est autoris ´ e, sous peine de constituer une violation de la Loi du 30 juin 1994 relative au droit d’auteur.

Transcript of 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces...

Page 1: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6 Les fonctions

Peter Schlagheck

Universite de Liege

Ces notes ont pour seule vocation d’etre utilisees par les etudiants dans le cadrede leur cursus au sein de l’Universite de Liege. Aucun autre usage ni diffusionn’est autorise, sous peine de constituer une violation de la Loi du 30 juin 1994

relative au droit d’auteur.

Page 2: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6 Les fonctions

6.1 Un exemple

6.2 La structure generale d’une fonction

6.3 Les routines

6.4 La recursion

6.5 Quelques fonctions standards

Page 3: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple

On a besoin d’effectuer une certaine action plusieurs fois dans

des contextes differents:

include <iostream>

using namespace std;

int main()

{a ...

a 〈action〉;a ...

a if ( ... )

a {a a 〈action〉;a a ...

a }a 〈action〉;a ...

}

ou 〈action〉 effectue p. ex.

〈instruction1〉;〈instruction2〉;while ( 〈expression〉 )

{

a 〈instruction3〉;a 〈instruction4〉;}

〈instruction5〉;

...chaque fois avec d’autres variables

Page 4: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

Programme pour calculer des nombres entiers k , l , m qui

satisfont a kn + ln = mn pour un exposant n > 0 donne

−→ probleme de Fermat

Calcul de la puissance n d’un nombre entier:

int k, n;

cout << ''entrez les deux entiers k et n:'';

cin >> k >> n;

int kn = 1;

for ( int i = 1; i <= n; i++ )

kn *= k;

cout << k << ''ˆ'' << n << '' = '' << kn << endl;

Page 5: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

Programme pour calculer des nombres entiers k , l , m qui

satisfont a kn + ln = mn pour un exposant n > 0 donne

−→ probleme de Fermat

Calcul de la puissance n d’un nombre entier:

int k, n;

cout << ''entrez les deux entiers k et n:'';

cin >> k >> n;

int kn = 1;

for ( int i = 1; i <= n; i++ )

kn *= k;

cout << k << ''ˆ'' << n << '' = '' << kn << endl;

Execution:

entrez deux entiers k et n: 3

4

3ˆ4 = 81

Page 6: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

Programme pour calculer des nombres entiers k , l , m qui

satisfont a kn + ln = mn pour un exposant n > 0 donneint n, Nmax;

cout << ''exposant:'';

cin >> n;

cout << ''nombre maximal:'';

cin >> Nmax;

for ( int k = 1; k <= Nmax; k++ )

for ( int l = 1; l <= Nmax; l++ )

for ( int m = 1; m <= Nmax; m++ )

{fo// calcul de kˆn

foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

fo// calcul de lˆn

foint ln = 1;

fofor ( int i = 1; i <= n; i++ )

fofoln *= l;

fo// calcul de mˆn

foint mn = 1;

fofor ( int i = 1; i <= n; i++ )

fofomn *= m;

foif ( kn + ln == mn )

fofocout << k << ''ˆ'' << n << '' + ''

fofocout << l << ''ˆ'' << n << '' = ''

fofocout << m << ''ˆ'' << n << endl;

}

Page 7: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

Programme pour calculer des nombres entiers k , l , m qui

satisfont a kn + ln = mn pour un exposant n > 0 donneint n, Nmax;

cout << ''exposant:'';

cin >> n;

cout << ''nombre maximal:'';

cin >> Nmax;

for ( int k = 1; k <= Nmax; k++ )

for ( int l = 1; l <= Nmax; l++ )

for ( int m = 1; m <= Nmax; m++ )

{fo// calcul de kˆn

foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

fo// calcul de lˆn

foint ln = 1;

fofor ( int i = 1; i <= n; i++ )

fofoln *= l;

fo// calcul de mˆn

foint mn = 1;

fofor ( int i = 1; i <= n; i++ )

fofomn *= m;

foif ( kn + ln == mn )

fofocout << k << ''ˆ'' << n << '' + ''

fofocout << l << ''ˆ'' << n << '' = ''

fofocout << m << ''ˆ'' << n << endl;

}

Execution:

exposant: 2

nombre maximal: 10

3ˆ2 + 4ˆ2 = 5ˆ2

4ˆ2 + 3ˆ2 = 5ˆ2

6ˆ2 + 8ˆ2 = 10ˆ2

8ˆ2 + 6ˆ2 = 10ˆ2

Page 8: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

Programme pour calculer des nombres entiers k , l , m qui

satisfont a kn + ln = mn pour un exposant n > 0 donneint n, Nmax;

cout << ''exposant:'';

cin >> n;

cout << ''nombre maximal:'';

cin >> Nmax;

for ( int k = 1; k <= Nmax; k++ )

for ( int l = 1; l <= Nmax; l++ )

for ( int m = 1; m <= Nmax; m++ )

{fo// calcul de kˆn

foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

fo// calcul de lˆn

foint ln = 1;

fofor ( int i = 1; i <= n; i++ )

fofoln *= l;

fo// calcul de mˆn

foint mn = 1;

fofor ( int i = 1; i <= n; i++ )

fofomn *= m;

foif ( kn + ln == mn )

fofocout << k << ''ˆ'' << n << '' + ''

fofocout << l << ''ˆ'' << n << '' = ''

fofocout << m << ''ˆ'' << n << endl;

}

Execution:

exposant: 3

nombre maximal: 10

Page 9: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

Programme pour calculer des nombres entiers k , l , m qui

satisfont a kn + ln = mn pour un exposant n > 0 donneint n, Nmax;

cout << ''exposant:'';

cin >> n;

cout << ''nombre maximal:'';

cin >> Nmax;

for ( int k = 1; k <= Nmax; k++ )

for ( int l = 1; l <= Nmax; l++ )

for ( int m = 1; m <= Nmax; m++ )

{fo// calcul de kˆn

foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

fo// calcul de lˆn

foint ln = 1;

fofor ( int i = 1; i <= n; i++ )

fofoln *= l;

fo// calcul de mˆn

foint mn = 1;

fofor ( int i = 1; i <= n; i++ )

fofomn *= m;

foif ( kn + ln == mn )

fofocout << k << ''ˆ'' << n << '' + ''

fofocout << l << ''ˆ'' << n << '' = ''

fofocout << m << ''ˆ'' << n << endl;

}

Execution:

exposant: 3

nombre maximal: 100

Page 10: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

Programme pour calculer des nombres entiers k , l , m qui

satisfont a kn + ln = mn pour un exposant n > 0 donneint n, Nmax;

cout << ''exposant:'';

cin >> n;

cout << ''nombre maximal:'';

cin >> Nmax;

for ( int k = 1; k <= Nmax; k++ )

for ( int l = 1; l <= Nmax; l++ )

for ( int m = 1; m <= Nmax; m++ )

{fo// calcul de kˆn

foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

fo// calcul de lˆn

foint ln = 1;

fofor ( int i = 1; i <= n; i++ )

fofoln *= l;

fo// calcul de mˆn

foint mn = 1;

fofor ( int i = 1; i <= n; i++ )

fofomn *= m;

foif ( kn + ln == mn )

fofocout << k << ''ˆ'' << n << '' + ''

fofocout << l << ''ˆ'' << n << '' = ''

fofocout << m << ''ˆ'' << n << endl;

}

Probleme:

on doit ecrire trois fois la meme

iteration

Solution:

copier & coller dans l’editeur. . .

ou la definition d’une fonction

Page 11: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

Programme pour calculer des nombres entiers k , l , m qui

satisfont a kn + ln = mn pour un exposant n > 0 donneint n, Nmax;

cout << ''exposant:'';

cin >> n;

cout << ''nombre maximal:'';

cin >> Nmax;

for ( int k = 1; k <= Nmax; k++ )

for ( int l = 1; l <= Nmax; l++ )

for ( int m = 1; m <= Nmax; m++ )

foif ( puissance( k, n ) +

foif ( puissance( l, n ) ==

foif ( puissance( m, n ) )

fofocout << k << ''ˆ'' << n << '' + ''

fofocout << l << ''ˆ'' << n << '' = ''

fofocout << m << ''ˆ'' << n << endl;

Probleme:

on doit ecrire trois fois la meme

iteration

Solution:

copier & coller dans l’editeur. . .

ou la definition d’une fonction

puissance( k, n )

Page 12: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

Page 13: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint n, Nmax;

focout << ''exposant:'';

focin >> n;

focout << ''nombre maximal:'';

focin >> Nmax;

fofor ( int k = 1; k <= Nmax; k++ )

fofor ( int l = 1; l <= Nmax; l++ )

fofor ( int m = 1; m <= Nmax; m++ )

fofoif ( puissance( k, n ) +

fofoif ( puissance( l, n ) ==

fofoif ( puissance( m, n ) )

fofofocout << k << ''ˆ'' << n << '' + ''

fofofocout << l << ''ˆ'' << n << '' = ''

fofofocout << m << ''ˆ'' << n << endl;

}

Page 14: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissance

Page 15: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek

Page 16: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n

Page 17: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r

Page 18: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r k n

Page 19: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r k n kn

Page 20: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r k n kn i

Page 21: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r k n kn

Page 22: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r s

Page 23: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r k ns

Page 24: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r k n kns

Page 25: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r k n kn is

Page 26: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r k n kns

Page 27: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.1 Un exemple d’une fonction

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Le flot du programme dans la memoire:

main puissancek n r s r+s

Page 28: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Execution de la fonction puissance

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Execution:

17

Page 29: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Execution de la fonction puissance

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( 2, 3 );

foint s = puissance( 3, 2 );

focout << r + s << endl;

}

Execution:

17

Page 30: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Execution de la fonction puissance

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n + k, k );

focout << r + s << endl;

}

Execution:

33

Page 31: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Execution de la fonction puissance

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

fon = 6;

fok = 4;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

focout << n << '' '' << k << endl;

}

Execution:

17

3 2

Page 32: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Execution de la fonction puissance

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = m;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint m = 1;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

−→ erreur: 'm' was not

−→ declared in this scope

Page 33: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Execution de la fonction puissance

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

fokn = 0;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Execution:

17

Page 34: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Execution de la fonction puissance

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn 0;

foreturn kn;

}

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Execution:

0

Page 35: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.2 La structure generale d’une fonction

La definition d’une fonction:

〈type〉 〈nom〉 ( 〈type1〉 〈nom1〉, 〈type2〉 〈nom2〉, ... )

{fo 〈instruction1〉;fo 〈instruction2〉;fo . . .

fo return 〈expression retour〉;}−→ 〈expression retour〉 doit etre du type 〈type〉−→ (ou convertible dans ce type-la)

Page 36: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.2 La structure generale d’une fonction

La definition d’une fonction:

〈type〉 〈nom〉 ( 〈type1〉 〈nom1〉, 〈type2〉 〈nom2〉, ... )

{fo 〈instruction1〉;fo 〈instruction2〉;fo . . .

fo return 〈expression retour〉;}Appel de la fonction:

〈nom〉 ( 〈expression1〉, 〈expression2〉, ... )

−→ rend 〈expression retour〉 comme valeur

−→ 〈expression1〉 doit etre du type 〈type1〉,−→ 〈expression2〉 doit etre du type 〈type2〉, . . .

−→ (conversions implicites possibles)

Page 37: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.2 La structure generale d’une fonction

L’appel de cette fonction corresponderait au code

〈type〉 〈nom〉;{fo 〈type1〉 〈nom1〉 = 〈expression1〉;fo 〈type2〉 〈nom2〉 = 〈expression2〉;fo . . .

fo 〈instruction1〉;fo 〈instruction2〉;fo . . .

fo 〈nom〉 = 〈expression retour〉;}dans la partie du programme ou cette fonction est appelee

(a l’exception qu’on ne pourrait pas utiliser d’autres variables du

programme principal dans ce bloc-la)

Page 38: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.2 La structure generale d’une fonction

La definition d’une fonction:

〈type〉 〈nom〉 ( 〈type1〉 〈nom1〉, 〈type2〉 〈nom2〉, ... )

{fo 〈instruction1〉;fo 〈instruction2〉;fo . . .

fo return 〈expression retour〉;}Les variables 〈nom1〉, 〈nom2〉, . . . sont implicitement definies au

debut du bloc de la fonction (definition locale)

Page 39: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.2 La structure generale d’une fonction

La definition d’une fonction:

〈type〉 〈nom〉 ( 〈type1〉 〈nom1〉, 〈type2〉 〈nom2〉, ... )

{fo 〈instruction1〉;fo 〈instruction2〉;fo . . .

fo return 〈expression retour〉;}Appel de la fonction:

〈nom〉 ( 〈expression1〉, 〈expression2〉, ... )

−→ rend 〈expression retour〉 comme valeur

−→ 〈expression1〉, 〈expression2〉, . . . sont donc

−→ donnees a la fonction comme des copies

Page 40: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.2 La structure generale d’une fonction

La definition d’une fonction:

〈type〉 〈nom〉 ( 〈type1〉 〈nom1〉, 〈type2〉 〈nom2〉, ... )

{fo 〈instruction1〉;fo 〈instruction2〉;fo . . .

fo return 〈expression retour〉;}l’instruction

foreturn 〈expression retour〉;termine l’execution de la sequence d’instructions de la fonction

et rend la valeur de l’expression 〈expression retour〉

−→ il peut y avoir plusieurs instructions return

−→ dans une fonction

Page 41: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.2 La structure generale d’une fonction

La definition d’une fonction:

〈type〉 〈nom〉 ( 〈type1〉 〈nom1〉, 〈type2〉 〈nom2〉, ... )

{fo 〈instruction1〉;fo 〈instruction2〉;fo . . .

fo return 〈expression retour〉;fo . . .

fo return 〈expression retour2〉;fo . . .

}

Page 42: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Execution de la fonction puissance

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = -2;

foint n = -3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Execution:

2

Page 43: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Execution de la fonction puissance

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foif ( n < 0 )

fo{fofocout << ''exposant negatif!'' << endl;

foforeturn 0;

fo}foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = -2;

foint n = -3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Execution:

exposant negatif!

exposant negatif!

0

Page 44: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Execution de la fonction puissance

#include <iostream>

using namespace std;

int puissance( int k, int n )

{foif ( n < 0 )

fo{fofocerr << ''exposant negatif!'' << endl;

foforeturn 0;

fo}foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

int main()

{foint k = -2;

foint n = -3;

foint r = puissance( k, n );

foint s = puissance( n, k );

focout << r + s << endl;

}

Execution:

exposant negatif!

exposant negatif!

0

Page 45: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Vos libertes en tant que programmeurs en C/C++

→ dans une fonction, vous pouvez faire tout ce qui est aussi

possible dans main()

−→ definir des variables,

−→ placer des branchement et des boucles,

−→ . . .

Page 46: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Vos libertes en tant que programmeurs en C/C++

→ dans une fonction, vous pouvez faire tout ce qui est aussi

possible dans main()

→ vos fonctions peuvent rendre n’importe quel type

(−→ des entiers, des flottants, des caracteres, . . . )

Page 47: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Vos libertes en tant que programmeurs en C/C++

→ dans une fonction, vous pouvez faire tout ce qui est aussi

possible dans main()

→ vos fonctions peuvent rendre n’importe quel type

→ elles peuvent contenir autant d’arguments que vous voulez

−→ meme pas d’arguments de tout !

Page 48: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Vos libertes en tant que programmeurs en C/C++

→ dans une fonction, vous pouvez faire tout ce qui est aussi

possible dans main()

→ vos fonctions peuvent rendre n’importe quel type

→ elles peuvent contenir autant d’arguments que vous voulez

int maxint()

{foint i = 1;

fowhile ( i > 0 )

fofoi++;

foi--;

foreturn i;

}

Appel:

cout << maxint() << endl;

2147483647

Page 49: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Vos libertes en tant que programmeurs en C/C++

→ dans une fonction, vous pouvez faire tout ce qui est aussi

possible dans main()

→ vos fonctions peuvent rendre n’importe quel type

→ elles peuvent contenir autant d’arguments que vous voulez

→ vous pouvez choisir n’importe quels noms pour vos

fonctions . . .

. . . tant qu’il n’y ait pas d’ambiguite avec d’autres fonctions

Page 50: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

L’identification des fonctions

Au niveau du compilateur, une fonction s’identifie non

seulement par son nom, mais aussi par sa liste d’arguments.

−→ le “nom interne” de la fonction

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}

−→ au niveau du compilateur sera donc

−→ puissance( int, int )

−→ vous pouvez definir d’autres fonctions nommees

−→ puissance( ... )

−→ pourvu que leurs listes d’arguments soient differentes

Page 51: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

−→ definition des fonctions

−→ puissance( int, int )

−→ et

−→ puissance( double, int )

Page 52: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 53: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 54: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 55: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 56: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 57: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 58: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 59: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 60: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

Execution:

8

Page 61: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = 3;

foint r = puissance( k, n );

focout << r << endl;

}

Execution:

8

−→ appel de la fonction

−→ puissance( int, int )

Page 62: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 63: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 64: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 65: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 66: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 67: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 68: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 69: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 70: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 71: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

8

Page 72: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = 3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

8

−→ appel de la fonction

−→ puissance( double, int )

Page 73: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 74: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 75: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 76: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 77: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 78: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 79: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 80: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 81: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 82: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

0.125

Page 83: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{fodouble k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

0.125

−→ appel de la fonction

−→ puissance( double, int )

Page 84: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 85: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 86: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 87: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 88: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 89: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 90: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

Page 91: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

1

Page 92: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

Execution:

1

−→ appel de la fonction

−→ puissance( int, int )

−→ pas de conversion implicite

Page 93: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Page 94: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

Page 95: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

Page 96: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

Page 97: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

Page 98: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

Page 99: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

Page 100: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

Page 101: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

Page 102: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

Page 103: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

0.125

Page 104: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( (double) k, n );

focout << r << endl;

}

Execution:

0.125

−→ appel de la fonction

−→ puissance( double, int )

−→ conversion explicite

Page 105: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Deux fonctions avec le meme nom

#include <iostream>

using namespace std;

fo

int puissance( int k, int n )

{foint kn = 1;

fofor ( int i = 1; i <= n; i++ )

fofokn *= k;

foreturn kn;

}fo

double puissance( int k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

int main()

{foint k = 2;

foint n = -3;

fodouble r = puissance( k, n );

focout << r << endl;

}

−→ erreur: new declaration

'double puissance(int,int)'

ambiguates old declaration

'int puissance(int,int)'

Page 106: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.3 Les routines

Des routines sont des fonctions qui ne rendent pas de valeur

et qui sont appelees comme des instructions

(et non pas comme des expressions)

Structure generale:

void 〈nom〉 ( 〈type1〉 〈nom1〉, 〈type2〉 〈nom2〉, ... )

{fo 〈instruction1〉;fo 〈instruction2〉;fo . . .

fo return;

}Appel de la routine:

〈nom〉( 〈expression1〉, 〈expression2〉, ... );

Page 107: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.3 Les routines

Des routines sont des fonctions qui ne rendent pas de valeur

et qui sont appelees comme des instructions

(et non pas comme des expressions)

Structure generale:

void 〈nom〉 ( 〈type1〉 〈nom1〉, 〈type2〉 〈nom2〉, ... )

{fo 〈instruction1〉;fo 〈instruction2〉;fo . . .

fo return;

}−→ void signifie un type “vide”

−→ pas de valeur de retour

−→ l’instruction return; n’est meme pas necessaire

Page 108: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.3 Les routines

Des routines sont des fonctions qui ne rendent pas de valeur

et qui sont appelees comme des instructions

(et non pas comme des expressions)

Structure generale:

void 〈nom〉 ( 〈type1〉 〈nom1〉, 〈type2〉 〈nom2〉, ... )

{fo 〈instruction1〉;fo 〈instruction2〉;fo . . .

}

Page 109: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.3 Les routines

Exemple: input des chiffres entre 0 et 9

int main()

{foint k, l, m;

focout << ''tapez trois chiffres:'';

focin >> k >> l >> m;

focheck number( k );

focheck number( l );

focheck number( m );

fo...

}

−→ message d’alerte dans check number

−→ si k, l ou m ne sont pas contenus entre 0 et 9

Page 110: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.3 Les routines

void check number( int n )

{foif ( n < 0 )

fofocout << ''warning: '' << n

fofocout << '' ne doit pas etre negatif'' << endl;

foif ( n > 9 )

fofocout << ''warning: '' << n

fofocout << '' doit etre plus petit que 10'' << endl;

}fo

int main()

{foint k, l, m;

focout << ''tapez trois chiffres:'';

focin >> k >> l >> m;

focheck number( k );

focheck number( l );

focheck number( m );

fo...

}

Page 111: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.3 Les routines

Manipulation des variables dans des routines

(ou dans des fonctions):

−→ utilisation de l’operateur &

−→ dans la definition de la routine (ou de la fonction)

〈type〉 〈nom〉 ( 〈type1〉 〈nom1〉,〈type〉 〈nom〉 ( 〈type2〉 &〈nom2〉,〈type〉 〈nom〉 ( 〈type3〉 〈nom3〉, ... )

{fo...

}−→ la fonction 〈nom〉 travaille avec l’original ,

−→ et non pas avec la copie, du deuxieme argument

Page 112: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.3 Les routines

Manipulation des variables dans des routines

(ou dans des fonctions):

−→ utilisation de l’operateur &

−→ dans la definition de la routine (ou de la fonction)

〈type〉 〈nom〉 ( 〈type1〉 〈nom1〉,〈type〉 〈nom〉 ( 〈type2〉 &〈nom2〉,〈type〉 〈nom〉 ( 〈type3〉 〈nom3〉, ... )

{fo...

}Appel:

〈nom〉 ( 〈expression1〉, 〈variable2〉, 〈expression3〉, ... )

−→ 〈variable2〉 peut etre manipulee par la fonction 〈nom〉

Page 113: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

fo// 'echange' devrait echanger a et b

focout << a << '' > '' << b << endl;

}

Page 114: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

Page 115: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 5

3

5 > 3

Page 116: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

6 > 2

Page 117: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

2 > 6

Page 118: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres:

echangemain

Page 119: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres:

echangemain

a b

Page 120: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

echangemain

a b2

Page 121: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

Page 122: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

Page 123: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

Page 124: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

a b2 6

Page 125: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

a b2 6

c2

Page 126: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

a b6 6

c2

Page 127: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

a b6 2

c2

Page 128: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int a, int b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

2 > 6

echangemain

a b2 6

Page 129: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

echangemain

Page 130: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres:

echangemain

Page 131: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres:

echangemain

a b

Page 132: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

echangemain

a b2

Page 133: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

Page 134: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

Page 135: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

Page 136: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

Page 137: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b2 6

c2

Page 138: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b6 6

c2

Page 139: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

echangemain

a b6 2

c2

Page 140: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a, b );

focout << a << '' > '' << b << endl;

}

2 nombres: 2

6

6 > 2

echangemain

a b6 2

Page 141: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine d’echange de deux variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

int main()

{focout << ''2 nombres:'';

foint a, b;

focin >> a >> b;

foif ( a < b )

fofoechange( a + b, b );

focout << a << '' > '' << b << endl;

}

−→ erreur:−→ no matching function for call to 'echange(int, int&)'

Page 142: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine de tri pour trois variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

void sort( int &a, int &b )

{foif ( a < b )

fofoechange( a, b );

}fo

void sort( int &a, int &b, int &c )

{fosort( a, b );

fosort( a, c );

fosort( b, c );

}fo

int main()

{focout << ''3 nombres:'' << endl;

foint k, l, m;

focin >> k >> l >> m;

fosort( k, l, m );

focout << k << '' > '' << l << '' > '' << m << endl;

}

Page 143: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine de tri pour trois variables

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

void sort( int &a, int &b )

{foif ( a < b )

fofoechange( a, b );

}fo

void sort( int &a, int &b, int &c )

{fosort( a, b );

fosort( a, c );

fosort( b, c );

}fo

int main()

{focout << ''3 nombres:'' << endl;

foint k, l, m;

focin >> k >> l >> m;

fosort( k, l, m );

focout << k << '' > '' << l << '' > '' << m << endl;

}

3 nombres: 2

5

3

5 > 3 > 2

Page 144: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Une routine de tri pour trois variables

void sort( int &a, int &b )

{foif ( a < b )

fofoechange( a, b );

}fo

void echange( int &a, int &b )

{foint c = a;

foa = b;

fob = c;

}fo

void sort( int &a, int &b, int &c )

{fosort( a, b );

fosort( a, c );

fosort( b, c );

}fo

int main()

{focout << ''3 nombres:'' << endl;

foint k, l, m;

focin >> k >> l >> m;

fosort( k, l, m );

focout << k << '' > '' << l << '' > '' << m << endl;

}

−→ erreur: 'echange' was not declared in this scope

Page 145: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Nous venons d’apprendre qu’une fonction/routine peut appeler

d’autres fonctions/routines en cours de son execution . . .

. . . mais elle peut egalement appeler elle-meme

Page 146: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

int factoriel( int n )

{foint nfac = 1;

fofor ( int i = 1; i <= n; i++ )

fofonfac *= i;

foreturn nfac;

}fo

Page 147: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foreturn ( n * factoriel( n - 1 ) );

}fo

Page 148: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 6;

focout << factoriel( k ) << endl;

}

Execution:

Segmentation fault

Page 149: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 6;

focout << factoriel( k ) << endl;

}

Execution:

720

Page 150: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main

Page 151: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main

k3

Page 152: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main

k3

Page 153: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel

k3 3

n

Page 154: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel

k3 3

n

Page 155: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel

k3 3

n

Page 156: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel

k3 3

n2n

Page 157: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel

k3 3

n2n

Page 158: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel

k3 3

n2n

Page 159: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel factoriel

k3 3

n2n

1n

Page 160: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel factoriel

k3 3

n2n

1n

Page 161: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel factoriel

k3 3

n2n

1n

Page 162: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel factoriel factoriel

k3 3

n2n

1n n

0

Page 163: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel factoriel factoriel

k3 3

n2n

1n n

0

Page 164: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel factoriel factoriel

k3 3

n2n

1n n

0

Page 165: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel factoriel

k3 3

n2n

1n

1

Page 166: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel factoriel

k3 3

n2n

2

Page 167: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main factoriel

k3 3

n6

Page 168: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

Exemple: calcul de n! = 1 × 2 × . . . × n

Alternative: n! = n × (n − 1)!

int factoriel( int n )

{foif ( n == 0 )

foforeturn 1;

foreturn ( n * factoriel( n - 1 ) );

}fo

int main()

{foint k = 3;

focout << factoriel( k ) << endl;

}

main

k3

Page 169: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.4 La recursion

−→ la recursion peut etre tres utile

−→ dans des contextes specifiques . . .

−→ . . . mais ce n’est pas toujours la methode la plus efficace

Page 170: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.5 Quelques fonctions standards

double fabs( double x ) −→ valeur absolu d’un flottant

double sqrt( double x ) −→ racine√

x

double exp( double x ) −→ fonction exponentielle ex

double log( double x ) −→ logarithme naturel ln(x)double sin( double x ) −→ sinus (en radians)

double cos( double x ) −→ cosinus (en radians)

double tan( double x ) −→ tangente (en radians)

double asin( double x ) −→ arcsin (en radians)

double acos( double x ) −→ arccos (en radians)

double atan( double x ) −→ arctan (en radians)

double atan2( double y, double x ) −→ ϕ ∈ (−π, π]pour lequel sin(ϕ) = y/

x2 + y2 et cos(ϕ) = x/√

x2 + y2

−→ il faut inclure #include <cmath>

−→ (ou #include <math.h> dans C)

−→ pour utiliser ces fonctions mathematiques

Page 171: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.5 Quelques fonctions standards

Exemple: methode alternative pour calculer la puissance

xy = eln(xy ) = ey ln(x)

−→ utile pour des exposants y non-entiers

Page 172: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.5 Quelques fonctions standards

Exemple: methode alternative pour calculer la puissance

xy = eln(xy ) = ey ln(x)

#include <iostream>

#include <cmath>

using namespace std;

fo

double puissance( double k, double n )

{foreturn ( exp( n * log( k ) ) );

}fo

Page 173: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.5 Quelques fonctions standards

#include <iostream>

#include <cmath>

using namespace std;

fo

double puissance( double k, double n )

{foreturn ( exp( n * log( k ) ) );

}fo

int main()

{fodouble a, b;

focin >> a >> b;

focout << puissance( a, b ) << endl;

}

Execution:

4

1.5

8

Page 174: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.5 Quelques fonctions standards

#include <iostream>

#include <cmath>

using namespace std;

fo

double puissance( double k, double n )

{foreturn ( exp( n * log( k ) ) );

}fo

int main()

{fodouble a, b;

focin >> a >> b;

focout << puissance( a, b ) << endl;

}

Execution:

4

-1.5

0.125

Page 175: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.5 Quelques fonctions standards

#include <iostream>

#include <cmath>

using namespace std;

fo

double puissance( double k, double n )

{foreturn ( exp( n * log( k ) ) );

}fo

int main()

{fodouble a, b;

focin >> a >> b;

focout << puissance( a, b ) << endl;

}

Execution:

-4

1.5

nan

−→ not a number

Page 176: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.5 Quelques fonctions standards

#include <iostream>

#include <cmath>

using namespace std;

fo

double puissance( double k, double n )

{foreturn ( exp( n * log( k ) ) );

}fo

int main()

{fodouble a, b;

focin >> a >> b;

focout << puissance( a, b ) << endl;

}

Execution:

-4

3

nan

mais (−4)3 =−64

Page 177: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.5 Quelques fonctions standards

#include <iostream>

#include <cmath>

using namespace std;

fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

double puissance( double k, double n )

{foif ( k > 0 )

foforeturn ( exp( n * log( k ) ) );

foif ( n == int( n ) )

foforeturn ( puissance( k, int( n ) ) );

focout << ''base negative'' << endl;

}fo

int main()

{fodouble a, b;

focin >> a >> b;

focout << puissance( a, b ) << endl;

}

Execution:

-4

3

-64

Page 178: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.5 Quelques fonctions standards

#include <iostream>

#include <cmath>

using namespace std;

fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

double puissance( double k, double n )

{foif ( k > 0 )

foforeturn ( exp( n * log( k ) ) );

foif ( n == int( n ) )

foforeturn ( puissance( k, int( n ) ) );

focout << ''base negative'' << endl;

}fo

int main()

{fodouble a, b;

focin >> a >> b;

focout << puissance( a, b ) << endl;

}

Execution:

-4

3.2

base negative

4.85953e-270

(nombre flottant

aleatoire)

Page 179: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

6.5 Quelques fonctions standards

double fabs( double x ) −→ valeur absolu d’un flottant

double sqrt( double x ) −→ racine√

x

double exp( double x ) −→ fonction exponentielle ex

double log( double x ) −→ logarithme naturel ln(x)double sin( double x ) −→ sinus (en radians)

double cos( double x ) −→ cosinus (en radians)

double tan( double x ) −→ tangente (en radians)

double asin( double x ) −→ arcsin (en radians)

double acos( double x ) −→ arccos (en radians)

double atan( double x ) −→ arctan (en radians)

double atan2( double y, double x ) −→ ϕ ∈ (−π, π]pour lequel sin(ϕ) = y/

x2 + y2 et cos(ϕ) = x/√

x2 + y2

double pow( double x, double y ) −→ xy

Page 180: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Des nombres aleatoires

−→ inclure #include <cstdlib> (ou <stdlib.h> pour C)

int rand() −→ nombre aleatoire entier entre 0 et 231 − 1

Page 181: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Des nombres aleatoires

−→ inclure #include <cstdlib> (ou <stdlib.h> pour C)

int rand() −→ nombre aleatoire entier entre 0 et 231 − 1

#include <iostream>

#include <cstdlib>

using namespace std;

fo

int main()

{focout << rand() << endl;

focout << rand() << endl;

}

Execution:

1804289383

846930886

(toujours)

Page 182: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Des nombres aleatoires

−→ inclure #include <cstdlib> (ou <stdlib.h> pour C)

int rand() −→ nombre aleatoire entier entre 0 et 231 − 1

void srand( unsigned int seed )

−→ seed du generateur des nombres aleatoires

combiner avec la fonction time dans <ctime> (ou <time.h>)

−→ (ca rend le temps en secondes decoule depuis le 1/1/1970)

Page 183: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Des nombres aleatoires

−→ inclure #include <cstdlib> (ou <stdlib.h> pour C)

int rand() −→ nombre aleatoire entier entre 0 et 231 − 1

void srand( unsigned int seed )

−→ seed du generateur des nombres aleatoires

combiner avec la fonction time dans <ctime> (ou <time.h>)

−→ (ca rend le temps en secondes decoule depuis le 1/1/1970)

#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

fo

int main()

{fosrand( time( 0 ) );

focout << rand() << endl;

focout << rand() << endl;

}

Execution:

422776193

244047141

Page 184: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Des nombres aleatoires

−→ inclure #include <cstdlib> (ou <stdlib.h> pour C)

int rand() −→ nombre aleatoire entier entre 0 et 231 − 1

void srand( unsigned int seed )

−→ seed du generateur des nombres aleatoires

combiner avec la fonction time dans <ctime> (ou <time.h>)

−→ (ca rend le temps en secondes decoule depuis le 1/1/1970)

#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

fo

int main()

{fosrand( time( 0 ) );

focout << rand() << endl;

focout << rand() << endl;

}

Execution:

1282589832

1036426062

Page 185: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Des nombres aleatoires

−→ inclure #include <cstdlib> (ou <stdlib.h> pour C)

int rand() −→ nombre aleatoire entier entre 0 et 231 − 1

void srand( unsigned int seed )

−→ seed du generateur des nombres aleatoires

combiner avec la fonction time dans <ctime> (ou <time.h>)

−→ (ca rend le temps en secondes decoule depuis le 1/1/1970)

#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

fo

int main()

{fosrand( time( 0 ) );

focout << rand() << endl;

focout << rand() << endl;

}

Execution:

1318789015

568117324

Page 186: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Des nombres aleatoires

−→ inclure #include <cstdlib> (ou <stdlib.h> pour C)

int rand() −→ nombre aleatoire entier entre 0 et 231 − 1

void srand( unsigned int seed )

−→ seed du generateur des nombres aleatoires

combiner avec la fonction time dans <ctime> (ou <time.h>)

−→ (ca rend le temps en secondes decoule depuis le 1/1/1970)

−→ tres utile pour des calculs stochastiques

−→ (et pour la programmation des jeux . . . )

Page 187: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

La fonction assert

#include <iostream>

#include <cmath>

using namespace std;

fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

double puissance( double k, double n )

{foif ( k > 0 )

foforeturn ( exp( n * log( k ) ) );

foif ( n == int( n ) )

foforeturn ( puissance( k, int( n ) ) );

focout << ''base negative'' << endl;

}fo

int main()

{fodouble a, b;

focin >> a >> b;

focout << puissance( a, b ) << endl;

}

Page 188: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

La fonction assert

#include <iostream>

#include <cmath>

#include <cassert>

using namespace std;

fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

double puissance( double k, double n )

{foif ( k > 0 )

foforeturn ( exp( n * log( k ) ) );

foassert( n == int( n ) );

foreturn ( puissance( k, int( n ) ) );

}fo

int main()

{fodouble a, b;

focin >> a >> b;

focout << puissance( a, b ) << endl;

}

Page 189: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

La fonction assert

#include <iostream>

#include <cmath>

#include <cassert>

using namespace std;

fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

double puissance( double k, double n )

{foif ( k > 0 )

foforeturn ( exp( n * log( k ) ) );

foassert( n == int( n ) );

foreturn ( puissance( k, int( n ) ) );

}fo

int main()

{fodouble a, b;

focin >> a >> b;

focout << puissance( a, b ) << endl;

}

Execution:

-4

3.2

Assertion 'n == int( n )'

failed

Page 190: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

La fonction assert

#include <iostream>

#include <cmath>

#include <cassert>

using namespace std;

fo

double puissance( double k, int n )

{fodouble kn = 1;

foif ( n < 0 )

fofofor ( int i = -1; i >= n; i-- )

fofofokn /= k;

foelse

fofofor ( int i = 1; i <= n; i++ )

fofofokn *= k;

foreturn kn;

}fo

double puissance( double k, double n )

{foif ( k > 0 )

foforeturn ( exp( n * log( k ) ) );

foassert( n == int( n ) );

foreturn ( puissance( k, int( n ) ) );

}fo

int main()

{fodouble a, b;

focin >> a >> b;

focout << puissance( a, b ) << endl;

}

Execution:

-4

3

-64

Page 191: 6 Les fonctions - pqs.ulg.ac.be · 6 Les fonctions Peter Schlagheck Universite de Li´ ege` Ces notes ont pour seule vocation d’etre utilisˆ ees par les´ etudiants dans le cadre´

Des commandes pour terminer un programme

assert( 〈expression〉 );

−→ termine le programme si 〈expression〉 vaut zero

−→ apres avoir affiche le message

−→ Assertion '〈expression〉' failed.

disponible avec #include <cassert> (ou <assert.h>)

exit( 〈expression〉 );

−→ termine le programme et rend la valeur de 〈expression〉−→ comme “valeur de retour” de main()

disponible avec #include <cstdlib> (ou <stdlib.h>)