• Aucun résultat trouvé

Module : LCI4 Elément : Informatique 2

N/A
N/A
Protected

Academic year: 2022

Partager "Module : LCI4 Elément : Informatique 2"

Copied!
66
0
0

Texte intégral

(1)

Module : LCI4

Elément : Informatique 2

SMP4

Pr. M.Machkour

Université Ibn Zohr 2013/2014

Faculté des Sciences Agadir

www.al3abkari-pro.com

(2)

Introduction à la programmation modulaire

Utilisation des fonctions

www.al3abkari-pro.com

(3)

Notion de fonction

En Maths, les fonctions sont nommées par f(x), g(x)…

Par exemple, si on prend la fonction f(x)=x2.

On peut aussi nommée cette fonction f par carre, on écrit

carre(x)=x2

Ici, la fonction carre prend la valeur de la variable x(réelle) , calcule et retourne la valeur x*x (réelle).

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 3

(4)

 Notion de fonction (suite)

En langage C, on peut définir cette fonction carre, de la manière suivante

float carre(float x) {

return x*x;

}

Le type de la variable x Le type de

la valeur calculée et retournée de la

fonction carre

La valeur de retour de la fonction

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 4

(5)

 Un exemple de fonction

Définir en C une fonction qui retourne le successeur d’un entier

int successeur(int n) {

return n+1;

}

Le type de la variable n Le type de

la valeur calculée et retournée de la

fonction carre

La valeur de retour de la fonction

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 5

(6)

 Un autre exemple de fonction

Définir en C une fonction qui retourne le prédécesseur d’un entier

int predecesseur(int n) {

return n-1;

}

Le type de la variable n Le type de

la valeur calculée et retournée de la

fonction carre

La valeur de retour de la fonction

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 6

(7)

 Description de la syntaxe de définition d’une fonction

La syntaxe de la définition d’une fonction comprend un entête et un corps.

float carre(float x) {

return x*x;

}

Début du corps Le type de

la valeur calculée et retournée de la

fonction carre

La valeur de retour de la fonction

Argument ou paramètre de la fonction (x)

Fin de la fonction

Nom de la fonction (carre)

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 7

(8)

 Description de la syntaxe de définition d’une fonction(suite)

L'entête de la fonction est constitué de - type de retour de la fonction;

- nom de la fonction;

- paramètres de la fonction.

Exemple

float carre(float x)

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 8

(9)

 Description de la syntaxe de définition d’une fonction(suite)

Le corps de la fonction est la partie limitée par le début et la fin de la fonction.

float carre(float x) {

return x*x;

}

Début de la fonction Le corps de

la fonction

Fin de la fonction

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 9

(10)

 Les éléments du corps de la fonction

1. Des instructions simples 2. Des if ou switch

3. Des for, while…

4. Déclaration des variables.

Rq: les variables doivent être déclarées au début de la fonction(comme pour la fonction main).

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 10

(11)

 Exercice

Donner les noms des éléments spécifiés par les chiffres

int pred(int x) {

return x-1;

}

3 6

4

2

5

1

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 11

(12)

 Règles pour définir une fonction

1. Le nom de la fonction;

2. Les arguments et leurs types (type qlq du langage C);

3. Le type de retour de la fonction;

4. Le corps de la fonction ou la tâche de la fonction ou encore les instructions nécessaires pour

réaliser la tâche de la fonction.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 12

(13)

 Remarque

Le type de retour et le type de l’argument ne sont pas liés.

Exemple

E(x) : partie entière de x.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 13

(14)

 Fonction avec plusieurs arguments ou paramètres (variables)

En maths f(x,y), g(x,y,z)…

En langage C, on peut définir…

Exemple

On va définir une fonction qui calcule et reourne la somme de deux entiers :

somme(x,y).

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 14

(15)

 Fonction avec plusieurs arguments(suite) int somme(int x, int y)

{

return x+y;

}

Rqs : les arguments de fonction sont séparés par des virgules.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 15

(16)

 Exemple

Chercher une fonction qui retourne le minimum de deux entiers.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 16

(17)

Réponse 1

int min(int x, int y) { int m;

if (x<y )

m=x;

else

m=y;

return m;

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 17

(18)

Réponse 2

int min(int x, int y) {

int m;

m=x;

if (m>y) m=y;

return m;

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 18

(19)

 Exemple

Chercher une fonction qui retourne le minimum de deux réels.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 19

(20)

Réponse

double min(double x, double y) { double m;

if (x<y )

m=x;

else

m=y;

return m;

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 20

(21)

 Fonction avec des arguments de différents types

Une fonction peut avoir des arguments de différents types.

Exemple

La fonction puissance XN.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 21

(22)

Fonction avec des arguments de différents types(suite)

double puissance(int n, double x) { double p=1;

int i;

for(i=1; i<=n; i++) p*=x;

return p;

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 22

(23)

Utilisation d’une fonction

Quand on définit une fonction, on peut l’utiliser dans une expression ou comme argument d’une autre fonction.

On dit qu’on fait appel à la fonction.

Cet appel doit respecter :

- Le nombre d’arguments (paramètres) et leurs types

- Le type de retour de la fonction.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 23

(24)

Exemple d'appel de fonction int min(int x, int y)

{ int m;

if (x<y )

m=x;

else

m=y;

return m; } void main ()

{ int x=11, y=12, z;

z=min(x,y); //appel de la fonction min

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 24

(25)

Exemple d'appel de fonction int min(int x, int y)

{ int m;

if (x<y )

m=x;

else

m=y;

return m; } void main ()

{ int z;

z=min(11,12); //appel de la fonction min

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 25

(26)

Exemple d'appel de fonction int min(int x, int y)

{ int m;

if (x<y )

m=x;

else

m=y;

return m; } void main ()

{ int x=11, y=12, z;

z=min(x,12); //appel de la fonction min

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 26

(27)

 Les paramètres de fonctions

-Paramètres formels : spécifier lors de la

définition de la fonction. Ils sont des variables.

-Paramètres effectifs : spécifier lors de l'appel de la fonction. Ils sont des variables, des

constantes symboliques, littérales, appels de fonctions ou expressions qlqs compatibles avec les paramètres formels.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 27

(28)

Exemple d'appel

double inverse(double x) {

if (x!=0 ) return 1/x;

}

double somme_inverse(double x, double y) { double z;

z=inverse(x)+inverse(y);

return z;

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 28

(29)

Exemple d'appel

double carre(double x) {

return x*x;

}

double somme(double x, double y) { double z;

z=x+y;

return z;

}

double module(double x, double y) { double z;

z=somme(carre(x),carre(y));

return sqrt(z);

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 29

(30)

 L’instruction return

Cette instruction indique la valeur de retour

de la fonction et assure la sortie immédiate de la fonction.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 30

(31)

 Exemple

int min (int x, int y) { if (x<y)

return x;

else

return y;

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 31

(32)

 Exemple

int min (int x, int y) { if (x<y)

return x;

else

return y;

printf(…); // ne sera jamais atteinte }

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 32

(33)

La fonction main

Un programme C peut contenir plusieurs fonctions chacune réalisant une tâche bien déterminée.

L’ensemble de ces tâches représente la tâche globale du programme.

Une de ces fonctions est la fonction main qui

représente la fonction principale. Elle représente le point d’entrée dans le programme.

Toutes les fonctions vont servir de manière directe ou indirecte la fonction main.

Cette fonction peut être utilisée sans valeur de retour et sans instruction return.

Cette fonction peut être utilisée sans argument.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 33

(34)

Exemple

int min (int x, int y) { if (x<y)

return x;

else

return y;

}

main()

{ int x, y,z;

z=min(x,y);

printf("%d",z);

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 34

(35)

 Les fonctions prédéfinies double sqrt(double x),

double pow(double x , double y).

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 35

(36)

 Exercice

Construire une fonction som_carre(int n)

qui calcule et retourne la somme des carrés des nombres de 1 à n. n étant argument de la fonction.

faire un appel à cette fonction dans la fonction main

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 36

(37)

Réponse 1

#include<stdio.h>

int som_carre(int n) //définition de la fonction {

return (n*(n+1)*(2*n+1))/6;

}

void main() //main avec void {

printf("la somme des carrés est:%d",som_carre(3));

//Appel de la fonction }

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 37

(38)

 Règle 1

Cette réponse à l’exercice montre

l’emplacement des définitions des fonctions dans un programme C. Elles sont placées

avant la fonction main.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 38

(39)

Réponse 2

#include<stdio.h>

int som_carre(int n); //entête de la fonction void main()

{

printf("la somme des carrés est:%d",som_carre(3));

//Appel de la fonction }

int som_carre(int n) //définition de la fonction {

return (n*(n+1)*(2*n+1))/6;

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 39

(40)

 Règle 2

Cette deuxième réponse montre une autre

façon pour placer les définitions des fonctions dans un programme C. Elles sont placées

après la fonction main. L’entête de la fonction doit être placé avant main.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 40

(41)

 Réponse 3

#include<stdio.h>

#include "util.h"

void main() {

printf("la somme des carrés est:%d",som_carre(3));

//Appel de la fonction }

util.h est un fichier entête qui contient la définition de la fonction som_carre.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 41

(42)

 Règle 3

Les fonctions utilisées dans un programme peuvent être définies dans un fichier appelé fichier entête(extension .h).

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 42

(43)

 Les fonctions - procédures

Les fonctions- procédures ou procédures:

des fonctions sans valeur de retour.

La valeur de retour est void ou bien n'est pas spécifiée.

Une procédure réalise une tâche au

programme principal sans rendre une valeur.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 43

(44)

 Exemple

Rendre la fonction som_carre une procédure.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 44

(45)

Réponse 1

#include<stdio.h>

void som_carre(int n) //définition de la procédure {

int s;

s=(n*(n+1)*(2*n+1))/6;

printf("la somme des carrés est:%d", s);

}

main() {

som_carre(3); //Appel de la procédure }

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 45

(46)

Réponse 2

#include<stdio.h>

som_carre(int n) //définition de la procédure {

int s;

s=(n*(n+1)*(2*n+1))/6;

printf("la somme des carrés est:%d", s);

}

main() {

som_carre(3); //Appel de la procédure }

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 46

(47)

Réponse 3

#include<stdio.h>

som_carre(int n) //définition de la procédure {

int s;

s=(n*(n+1)*(2*n+1))/6;

printf("la somme des carrés est:%d", s);

return /*une valeur */;

}

main() {

som_carre(3); //Appel de la procédure }

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 47

(48)

 Appel d'une procédure

On n'a pas à mettre l'appel d'une procédure dans une expression comme dans le cas de celui d'une fonction.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 48

(49)

Exemples d'appel

#include<stdio.h>

som_carre(int n) //définition de la procédure {

int s;

s=(n*(n+1)*(2*n+1))/6;

printf("la somme des carrés est:%d", s);

}

main() { int n=4;

som_carre(n);

som_carre(3);

//Appel de la procédure }

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 49

(50)

 Exemples de procédure

printf scanf

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 50

(51)

 Les paramètres de fonctions (rappel)

-Paramètres formels : spécifier lors de la

définition de la fonction. Ils sont des variables.

-Paramètres effectifs : spécifier lors de l'appel de la fonction. Ils sont des variables, des

constantes symboliques, littérales appels de fonctions ou expressions qlqs compatibles avec les paramètres formels.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 51

(52)

Exemple de paramètres formels et effectifs

#include<stdio.h>

som_carre(int n) //paramètres formels {

int s;

s=(n*(n+1)*(2*n+1))/6;

printf("la somme des carrés est:%d", s);

}

main() { int n=4;

som_carre(n); //paramètre effectif som_carre(3);

som_carre(1+2);

//Appel de la procédure }

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 52

(53)

 Transmission des paramètres

L'appel d'une procédure se fait en remplaçant les paramètres formels par les paramètres

effectifs.

Ce processus s'appelle transmission des

paramètres. Il y a une transmission par valeurs et une transmission par adresse(à voir plus

loin).

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 53

(54)

 Transmission par valeurs

Dans cette transmission, on utilise la valeur du paramètre ou bien une copie du paramètre. La case mémoire associée au paramètre reste

inchangée.

Remarque

Tous les appels précédents se font par transmissions par valeurs.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 54

(55)

Exemple de transmission par valeur

#include<stdio.h>

int successeur(int n) {

return ++n;

}

main() { int n=4;

printf("%d",successeur(n));

printf("%d",successeur(n));

printf("%d",successeur(n));

//Appel de la procédure }

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 55

(56)

 Procédure ou fonctions sans paramètres

Une procédure peut être sans paramètres.

On l'exprime par - ()

- (void)

après le nom de la procédure.

Exemple

main() ou main(void)

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 56

(57)

 Exemple

Écrire une procédure

void table_5() qui affiche la table de multiplication de 5.

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 57

(58)

Réponse

void table_5() { int i;

for(i=1;i<=10; i++)

printf("5*%d=%d\n",i,5*i);

}

main(void) {

table_5();

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 58

(59)

 Exercices

Construire et tester les fonctions suivantes

int max(int a, int b) retourne le maximum de a et b;

int somn(int n) retourne la somme : 1+2…n.

int somExp(int n, int m) retourne la somme 1m+2m…nm

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 59

(60)

Récursivité

Exemple introductif

Construisons une fonction qui calcule la somme s(n)=1+2+…n

on a pour n+1

s(n)= (1+2+…+n-1)+n on peut en déduire

s(n)= s(n-1)+n

s(n-1)=s(n-2)+n-1

s(2)=s(1)+2 s(1)=1

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 60

(61)

Exemple introductif(suite)

soit la fonction som(n) qui calcule s(n) int som(int n)

{

if (n==1)

return 1;

else

return som(n-1)+n;

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 61

(62)

Exemple introductif(suite)

soit la fonction som(n) qui calcule s(n) int som(int n)

{

if (n==1)

return 1;

else

return som(n-1)+n;

}

Appel récursif

Arrêt de la récursivité

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 62

(63)

Exemple

Construire la fonction

int factoriel(int n) qui retourne le factoriel de n.

int factoriel(int n) {

if (n==0)

return 1;

else

return factoriel(n-1)*n;

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 63

(64)

 Exercice

Construire la fonction

double som_inverse(int n) qui retourne la somme

s(n)=1+1/2+ 1/3…1/n .

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 64

(65)

Réponse

Construire la fonction

double som_inverse(int n) qui retourne la somme s(n)=1+1/2+ 1/3…1/n

double som_inverse(int n) {

if (n==1)

return 1;

else

return som_inverse(n-1)+1/n;

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 65

(66)

Exercice

Construire la fonction

int pair(int n) qui retourne 1 si n est pair et 0 si n est impair

int pair(int n) { n=abs(n);

if (n==0)

return 1;

else

if (n<0)

return 0;

else

return pair(n-1);

}

Pr. M. Machkour

www.al3abkari-pro.com

SMP4 66

Références

Documents relatifs

[r]

pour calculer la somme des termes cons´ ecutifs d’une suite arithm´ etique, on peut aussi adapter la m´ ethode mise en œuvre pour calculer la somme 1 + 2 +

[r]

[r]

La substitution des paramètres effectifs aux paramètres formels s’appelle passage de paramètre, il s’agit en fait de transfert de données entre le programme principal (P.P) et

Programmer cet algorithme sur machine (calculatrice ou ordinateur avec le logiciel Algobox). Écrire le programme en indiquant la marque de la calculatrice dans le cas d’un programme

Le jour suivant, j'ai utilisé l'euro gagné le jour précédent pour acheter des légumes, que j'ai revendus le double du prix que je les avais payés.. J'ai poursuivi ce commerce selon

c/ Les &#34;ellipses&#34; correspondent aux mouvements oscillants, et les &#34;vagues&#34; correspondent aux mouvements où le pendule fait des tours (donc θ croit indéfiniment)..