• Aucun résultat trouvé

Déclaration d’un tableau d’enregistrement en C

/* ou bien, si un alias a été défini :*/

IdEnreg idTab[NB] ;

où :

• struct IdEnreg : identification de l’enregistrement (type du tableau)

• NB : nombre d’éléments du tableau (sa taille)

• idTab : identifiant du tableau

Code source 86 – Saisie d’un tableau de points 28 Point p [NB] ;

29 i n t i = 0 ;

30 f o r( i =0; i < NB; i=i +1) {

31 /∗ s a i s i e des coordonnées de p ∗/

32 scanf( "%f ␣%f " , &p [ i ] . x , &p [ i ] . y ) ;

33 /∗ s a i s i e des composants de l a couleur de p ∗/

34 scanf( "%d␣%d␣%d" , &p [ i ] . c . r , &p [ i ] . c . g , &p [ i ] . c . b ) ;

35 }

12.7 Exercices

On souhaite créer une application utilisant des molécules dont voici quelques exemples :

• l’eau : H2O

• le méthane : CH4

• l’acide sulfurique : H2SO4

• le glucose :C6H12O6

• le benzène :C6H6

Proposer la définition d’un enregistrement permettant de représenter une molécule, dans la-quelle on se limitera à un maximum de dix atomes.

Septième partie

Sous-programmes

13 Sous-programmes

Un sous-programmes est un moyen de nommer une action complexe, généralement composée de plusieurs instructions ou calculs élémentaires,

• soit parce qu’on sera amené à l’utiliser plusieurs fois dans un ou plusieurs autres algo-rithmes (réutilisation),

• soit de manière à rendre la structure d’un algorithme plus claire et lisible (issue de la décomposition d’un algorithme complexe en sous-algorithmes)

Il est généralement issu de la décomposition d’un problèmes en sous-problèmes : le mode de résolution des sous-problèmes aboutit généralement à la définition d’algorithmes qui vont composer le mode de résolution global du problème.

Un sous-programme est une forme particulière d’algorithme : on ne l’exécutera jamais directement, il seratoujours appelé par un autre algorithme. Un sous-programme attendra généralement des données en entrée qui lui seront fournies par l’algorithme qui l’appelle : ce sont les paramètres qui assurent ce mode d’échange ; à la fin de son exécution, il pourra fournir en retour un résultat.

Sous-programme

Nous distingueront 2 formes de sous-programmes :

• les fonctions, ou sous-programme expression : sous-programme qui retourne une valeur d’un certain type à l’issue de son exécution ; on peut ainsi directement utiliser une fonction comme une valeur dans une expression

• les procédures, ou sous-programme action : sous-programmes qui exécutent des instruc-tions et ne renvoie pas de valeur directement ; on ne peut que les appeler comme une instruction sans attendre de valeur de retour.

La modularité est la qualité d’un programme à être divisé en sous-programmes ou mo-dules, éventuellement réutilisables.

Modularité

13.1 Appel d’un sous-programme, arguments, paramètres

Lorsqu’on appelle un sous-programme, il suffit de le nommer et d’indiquer, généralement entre parenthèses, les valeurs qui sont échangées entre l’appelant et le sous-programme appelé (paramètres).

Les paramètres correspondent aux informations échangées lors de l’appel d’un sous-programme.

Paramètres

Les paramètres formels définissent les valeurs attendues par le sous-programme pour assurer son traitement.

Paramètres formels

Lesarguments, ou paramètres réels ouparamètres effectifs sont les valeurs effectivement passées lors de l’appel du sous-programme par l’appelant , et copiées dans les paramètres formels généralement .

Arguments, paramètres réels, paramètres effectifs

Lors de l’appel d’un sous-programme, les arguments sont passés aux paramètres formels selon leur position : le 1er argument est passé au 1er paramètre, le 2ème argument au 2ème paramètre, etc.

Figure34 – Appel d’un sous-programme, passage des arguments et retour

13.2 Modes de passage des paramètres

On distingue 3 modes de passage des paramètres entre l’appelant et l’appelé (le sous-programme invoqué) :

• le mode de passage par valeur, en lecture seule : le paramètre formel du sous-programme est une variable locale qui est initialisée à chaque appel par la valeur de l’argument passé par l’appelant ;

• le mode de passage comme résultat, en écriture seule : le paramètre formel du sous-programme est une variable locale dont la valeur sera copiée dans l’argument après chaque appel.

• le mode de passage en lecture-écriture : le paramètre formel du sous-programme

Modes de passage des paramètres

est une variable locale qui est initialisée à chaque appel par la valeur de l’argument et dont la valeur après chaque appel est recopiée dans l’argument, après qu’elle ait été modifiée

En C/C++, les modes de passage sont réduits à 2 :

• le mode de passage par copie ou par valeur : la valeur de l’argument est copiée vers le paramètre formel ; ce mode de passage équivaut au mode en lecture

• le mode de passage paradresse/pointeur : l’adresse de l’argument est copiée vers le para-mètre formel qui est défini comme pointeur ; ce mode de passage équivaut généralement au mode en lecture/écriture, mais peut être contraint en lecture seule (en qualifiant la variable de const).12

En C, les paramètres sont passés par défaut :

• par copie, en lecture seule, pour les variables ayant un type élémentaire ou un type enregistrement

• par adresse/pointeur, en lecture/écriture, pour les variables de type tableau

Le compilateur vérifie que le nombre d’arguments correspond au nombre de paramètres et que les valeurs copiées sont bien compatibles (mêmes types de donnée).

Figure35 – Passage par valeur à un sous-programme

13.3 Corps de la fonction : privé

D’une fonction, seul le prototype est connu des autres fonctions : il constitue l’interface, le moyen de communiquer avec les autres fonctions, il est public, partagé

Les identifiants des paramètres formels et le corps de la fonction sont, quant à eux, privés, locaux à la fonction.

12Le C++ propose le mode de passagepar référence pour lequel le paramètre formel est un alias de l’argu-ment : ce mode de passage équivaut généralel’argu-ment au mode en lecture/écriture sauf s’il s’agit d’une référence constante.

Figure36 – Passage par adresse/pointeur à un sous-programme

type nom typePar

corps nomPar

14 Fonctions, sous-programmes "expression"

14.0.1 Analogie entre fonctions mathématiques et fonctions informatiques Un algorithme est également assimilable à une fonction qui, à des données initiales, associe le résultat de leur transformation, avec cependant une différence majeure.

une définition formelle en mathématique : Une fonction mathématique met en rela-tion 2 grandeurs de manière à ce que la connaissance de la première permet de connaitre la deuxième : f :X →Y, y ∈ Y, etx ∈X, f(x) = 2x+ 3; la connaissance de x me permet de connaitre y.

unedéfinition procédurale en informatique : L’algorithme informatique va, quant à lui, décrire les étapes du mode de calcul de la somme.

Algorithme 36 Calcul de f(x) = 2x+ 3

1: Fonction entier f((entier x)) . entier : domaine de définition

2: entier r←0 . s : variable de calcul

3: r ←(2×x+ 3)

4: return r . la valeur de f est celle de r

5: fin Fonction

14.1 Déclaration d’une fonction : prototype ou signature

Syntaxe C 14.26 Déclaration d’une fonction