Vous êtes sur la page 1sur 22

Algorithmique et langage C. Chapitre 0 : Introduction. 1. Les phases davancement dun projet. 1.1.

Les phases davancement dun projet informatique. Quel que soit le domaine dapplication, un logiciel doit tre : Simple manier. Efficace (traitement et mmoire utilise). Fonctionnellement adapt aux besoins de lutilisateur. Robuste. Cest dire quil doit donner des rsultats fiables en toutes circonstances et ne pas planter. Aisment maintenable et modifiable (surtout par dautres concepteurs que ceux de dpart).

Pour cela on utilise les technique du gnie logiciel, cest dire une mthodologie qui dtermine les diffrentes tapes davancement dun projet informatique. Faute de temps nous ne verrons que quelques rgles de bon sens : Commenter le programme de faon claire et standardise. Faire des tests systmatiques.

Le GL va encore au-del puisque des recherches actives sont toujours mens sur le sujet. Le GL concerne surtout les gros programmes faits en quipe. La bonne comprhension de ces notions est capitale pour bien sinsrer au sein dune quipe de dveloppement et pour apprhender le rle de chef de projet. Nous allons maintenant voir la schmatisation de lavancement dun projet. 1.1.1. La phase danalyse (Quoi ?). Spcification dun problme en liaison avec le demandeur (Questions auxquelles rpond le programme). Cette phase est carctrise par de nombreux change entre le demandeur et lquipe de dveloppement. Spcification des donnes, des rsultats, des infos qui entre en jeux et des liens qui existent entre elles. Cest un travail surtout entre concepteurs o le demandeur joue surtout le rle de consultant expert. Cahier des charges. Ce sont les services rendus par le produit ainsi quune rfrence pour la suite.

1.1.2. La phase de conception (Comment ?). Dcomposer les problmes en sous-problmes. Spcifier ces sous-problmes de leurs donnes et rsultats + les liens existant entre eux. Comment structurer en machine, enchaner et organiser les traitements. Evaluer la complexit (~efficacit) des traitements. Cest ce niveau que se situe lalgorithmique. 1.1.3. La phase de ralisation. Choix dun langage (parfois impos). Programmation. Tests (selon les spcifications). Il faut ici tester les cas limites. La documentation dutilisation et de maintenance.

Pour le projet de cette anne il faudra dcrire lalgorithme avant de lcrire ainsi que prciser sur quelles donnes on travaillera. Ce ne sera pas un gros projet mais un moyen projet raliser par groupe de 2 ou 3. Il faut bien dcomposer les pas en sous pas. Ecrire les programmes et algorithmes lisiblement pour chaque sous pas. Tester les fonctions et les programmes selon les spcifications.

1.2. La notion dalgorithme. Invente par Abu Jafar Mohammed Ibn Mr Al-Khura Rizmi (Bagdad 780-850). Cest lui qui nous apporta la numrotation arabe ainsi que les rgles opratoires (*, +). Il avait ainsi dfinit la notion dalgorithme. Cependant la notion date de la Grce antique (premier algorithme est la division Euclidienne dcouverte par Euclide en 300 avant JC. Elle permet de dterminer le Plus Grand Commun Diviseur (PGCD) entre deux entiers). Une dfinition reconnue : une suite finie dinstructions dcrivant un traitement sur un nombre fini de donnes structures qui se terminent par un nombre fini doprations en vu de lobtention dun rsultat. Exemple : Pour faire des endives au jambon (ce passage est interdit aux mineurs et fortement dconseill aux adultes ). Faire revenir les endives dans un peu dhuile. Faire une sauce bchamelle. Enrouler le jambon autour des endives.

Mettre les endives recouvertes de bchamel dans un plat four et le cuire thermostat 7 pendant 30 minutes. Nous avons une suite dinstruction squentielle. Cependant, certains problmes sont encore rsoudre. Par exemple la signification de faire revenir ou faire une sauce bchamel . Ces actions recouvrent encore une liste dinstructions. Certains problmes sont gnriques comme faire revenir les lgumes et peuvent donc tre rutiliss. On pourra ainsi faire revenir des endives ou des oignons selon la recette. En algorithmique, on cherchera dcomposer nos problmes en sous problmes les plus gnriques possibles.

2. Elments de base algorithmique et programmation C. 2.1. Elments algorithmiques.

2.1.1. Un exemple dalgorithme.


Action DureeDeVol /*Demande lheure et la minute de dpart puis lheure et la minute darrive dun avion puis crit la dure du vol .Dpart et arrive ont lieux le mme jour sans dcalage horaire.*/ Lexique hd, md /*Heure et minute de dpart*/ ha, ma /*Heure et minute darrive*/ ht, mt /*Heure et minute du trajet*/ cd, ca /*Conversion en minutes des heures de dpart et darrive*/ :entier dbut lire(hd,md,ha,ma) cd<-ConvertirEnMinutes(hd,md) ca<- ConvertirEnMinutes(ha,ma) ConvertirEnHeuresMinutes(ca-cd,ht,mt) Ecrire(ht,mt) fin Fonction ConvertirEnMinutes(heure,minute :entier)->entier /*Convertit en minutes une dure indique en heure et minutes*/ dbut retourner 60*heure + minutes fin Action ConvertirEnHeuresMinutes(donne nbminutes :entier, rsultat heure, minute :entier) /*Le paramtre nbminute est une donne en minutes. A la fin du traitement heure et minute contiendront la conversion en heures et minutes de cette dure avec 0<=minute>=59*/ dbut heure<-nbminutes div 60 minute<-nbminutes mod 60 /*div est le quotient de la division euclidienne et mod est le reste de la division euclidienne*/ fin

2.1.2. Les variables. Ce sont des objets manipuls (et ventuellement modifis) par les algorithmes. Elles possdent : Un nom (ou identificateur). Un type (entier, rel, caractre,). Une valeur.

On peut la comparer une bote avec un nom. Le type = forme de la bote. Une bote ne peut contenir quune chose la fois (la valeur).

Variable : a b c

Valeur :

Diffrences : Il y a toujours une valeur dans une variable (qui dpend du langage utilis). Lorsque lon met une valeur dans une variable, lancienne disparat.

2.1.3. Actions (ou instructions) lmentaires. Les affectations : Instructions qui donnent une valeur une variable (en effaant la prcdente). Exemple : a <- 2 a <- (b - 3) * 12 (o b est une autre variable)
Nom de la variable Affectation Expression

Remarque : Laffectation peut aussi scrire := mais jamais = bien que ce symbole soit parfois utilis comme tel dans certain langage de programmation. Lecture et criture. Utiliser pour communiquer entre le monde extrieur (cran, clavier) et lordinateur. Ecriture (cran, imprimante) : crire(<expression 1>,<expression 2>) Exemple :Ecrire(ht,mt)-> crit lcran les valeurs de ces deux variables. Ecrire(3) -> 3 Ecrire( Voici le rsultat ,ht,mt) -> Voici le rsultat

Lecture (au clavier) : lire(<nom variable 1>,<nom variable 2>) Lordinateur attend quune valeur soit saisie au clavier et affecte cette la variable passe en paramtre (cas gnral lit autant de variable que de variables passes en paramtre). Exemple : lire(ha,ma)

2.1.4. Instructions composes. Squences dinstructions a <- 2 lire(b) crire(a + b) Blocs dinstructions Dbut <Instruction ou squences dinstructions> fin ou : { < Instruction ou squences dinstructions > } Ces blocs servent grouper ces instructions pour les mettre ensemble dans le cas dun sialors ou dune boucle. 2.2. Instructions conditionnelles. Si <Test> alors <Instructions 1 ou bloc 1> sinon <Instructions 2 ou bloc 2> a <- 2 ;lire(b) ;crire(a + b)

Si test est vrai, instructions bloc 1 sont excutes. Sinon instructions suivantes directement excutes (bloc 2).

Exemple : Si a>0 alors { crire ( a est positif ) abs <- a } Sinon { crire( a est ngatif ) abs <- a } crire( sa valeur est ,abs) Exercice 1 : Ecrire une nouvelle version de DureeDeVol(DureeDeVolBis) qui fait la mme chose sans conversion en minutes.
Action DureeDeVolBis /*Demande lheure et la minute de dpart puis lheure et la minute darrive dun avion puis crit la dure du vol .Dpart et arrive ont lieux le mme jour sans dcalage horaire.*/ Lexique hd, md /*Heure et minute de dpart*/ ha, ma /*Heure et minute darrive*/ ht, mt /*Heure et minute du trajet*/ :entier dbut lire(md, hd, ma, ha) CalculerTempsTrajet(ma-md,ha-hd,ht,mt) Ecrire(ht, mt) fin Action CalculerTempsTrajet(donne nbminutes, nbheures :entier rsultat minutes, heures :entier) /*Le paramtre nbminutes est une donne en minute et nbheures en heure avec 0<=minutes>=59. Dbut Si (nbminutes<0) alors { minutes <- nbminutes + 60 heures <- nbheures -1 } Sinon { minutes <- nbminutes heures <- nbheures } fin

Exercice 2 : Ecrire une nouvelle version de DureeDeVol(DureeDeVolTer) qui fait la mme chose sans conversion en minutes mais dont larrive peut avoir lieu le lendemain sachant que le temps de trajet est infrieur 24H.
Action DureeDeVolBis /*Demande lheure et la minute de dpart puis lheure et la minute darrive dun avion puis crit la dure du vol .Dpart et arrive peuvent tre dcals de 24H au plus sans dcalage horaire.*/ Lexique hd, md /*Heure et minute de dpart*/ ha, ma /*Heure et minute darrive*/ ht, mt /*Heure et minute du trajet*/ :entier dbut lire(hd, md, ha, ma) CalculerTempsTrajet(ha-hd, ma-md, ,ht,mt) Ecrire(ht, mt) fin Action CalculerTempsTrajet(donne nbheures, nbminutes :entier rsultat heures, minutes :entier) /*Calcule le temps de trajet partir de nbheures et de son signe et de nbminutes avec 0<=nbheures>= 23 ; 0<=nbminutes>=59*/ Dbut Si (nbminutes<0) alors { heure <- nbheures - 1 minute <- nbminutes + 60 } Sinon { heures <- nbheures minutes <- nbminutes } Si (nbheures<0) Alors { heure <- nbheures + 24 minute <- nbminutes } fin

Exercice 3 : Algorithme qui prend trois nombre rels puis les crit dans lordre sans faire appel dautres variables.
Action Trier3Nombres /*Lit 3 nombres entrs au clavier, les trie par ordre croissant et affiche le rsultat*/ */ Lexique a,b,c : rels dbut si ( a <= b ) alors { si ( a <= c ) alors { si (b <= c ) alors crire(a,b,c) sinon crire(a,c,b) sinon crire(c,a,b) } sinon { si ( a<= c) alors crire(b,a,c) sinon { si ( b =< c ) alors crire(b,c,a) sinon crire(c,b,a) } } fin

2.3.

Itrations

Boucle tant que 1 Tant que <test> Faire <instruction ou bloc> Exemple : i <- 1 Tant que ( i <= 10 ) Faire { Ecrire(i) /* crit 1 2 3 4 5 6 7 8 9 10 */ i++ /*quivaut i <- i + 1 */ } 1- Si le test est vrai 2- Excute bloc puis reviens 1 sinon instruction suivante

Remarque : i a dsormais la valeur 11. Boucle tant que 2 Faire <Instruction ou bloc> Tant que <test> Exemple : i <- 1 Faire { Ecrire(i) i++ /* Mme remarque et mme commentaire que prcdemment*/ } tant que ( i <= 10 )

TQ 1 i <- 0 Tant que ( i <= 10 ) Faire { i++ Ecrire(i) /*1 2 3 10 */ } i <- 1 Tant que ( i <= 0 ) Faire { i++ Ecrire(i) /* Pas excute */ }

TQ 2 i <- 0 Faire { i++ Ecrire(i) /*1 2 3 10 */ } tant que (i <= 10 ) i <- 1 Faire { i++ Ecrire(i) /* 2 */ } tant que ( i <= 0 )

Dans le TQ2 la boucle est excute au moins une fois contrairement au T Q 1 qui peut ne pas remplir les conditions dexcutions de la boucle avant quelle ne soit excute. Remarque : Il faut prendre garde au boucles infinies (condition toujours vrai).

Pour <nom variable> allant de <expression valeur entire> < expression valeur entire > Faire < Instruction ou bloc >

Exemple : Pour i allant de 1 10 faire Ecrire(i) 1- au dpart i <- exp 1 2- si i <= exp 2, alors excute corps de boucle 3- ajoute 1 i et reviens 2 Le pour peut tre dduit de TQ1 mais plus utilis lorsque lon connat le nombre ditrations. On ne doit pas modifier les valeurs des expressions de contrle dans le corps de la boucle. Certains langage le permettent mais cela nuit la lisibilit. De plus lalgorithme doit tre le plus universel possible et cette manipulation nest pas possible dans tous les langages. Exemple : pour i allant de 1 10 faire { Ecrire(i) I++ }

Exercices :
Action MultiplicationEntiers /* Lit 1 entier et crit sa table de multiplication jusqu 10 */ { Lexique : x /* nombre saisir */ i /* compteur */ : entiers Lire(x) Pour i allant de 0 10 faire { Ecrire(x, x ,i, = ,x*i) } } Action AjouterEntiers /* Lit 2 entier a et b et calcule la somme des entiers compris entre a et b (inclus) */ { Lexique : a,b /* nombre saisir */ i /* compteur */ s /* somme */ : entiers Lire(a,b) S <- 0 Pour i allant de a b faire { s++ Ecrire(s) } }

Remarque : Ne pas hsiter drouler lalgorithme la main.


Action AjouterEntiersBis /* Lit 2 entier a et b et calcule la somme des entiers compris entre a et b (inclus). On ne ralise pas de boucle dans ce programme. */ { Lexique : a,b /* valeur limite */ s /* somme */ : entiers Lire(a,b) s <- 0 s <- (a+b)*(a-b+1)/2 Ecrire(s) }

Action SuiteEntiers /* Lit une suite dentiers strictement positifs (la fin de la suite est donne par un 0 puis ecrit le minimum, le maximum et la moyenne des entiers de la suite. */ { Lexique : x /* entier saisi */ min, max, somme compteur : entier max <- 0 compteur <- 0 lire(x) min <- x Si x = 0 alors Ecrire( Suite vide ) Sinon { tant que x > 0 Faire { compteur ++ si x < min alors min <- x si x > max alors max <- x somme <- somme + x lire(x) } Ecrire(min,max,somme/compteur) } }

Action Multiplier /* Multiplie 2 entiers positifs saisis au clavier sans utiliser la multiplication. */ /* Diviser ces entiers sans utiliser div , mod , / . */ { Lexique : entier1,entier2 /* Valeurs saisir */ resultat /* rsultat de la multiplication */ compteur : entier resultat <- 0 lire(entier1,entier2) Pour compteur allant de 1 entier2 Faire resultat <- resultat + entier1 Ecrire(resultat) }

Action Diviser /* Divise x par y (saisis au clavier sans utiliser les oprateurs de division*/ { Lexique : x,y /* entiers saisir */ quotient, reste : entier Lire(x,y) reste <- x quotient <- 0 Si y != 0 alors { faire { quotient++ reste <- reste y } tant que(reste >= y) Ecrire(quotient,reste) } sinon crire( impossible ) }

3. Elments du langage C. 3.1. Structure dun programme C.

Elment fondamental : la fonction. En C, ce terme recouvre les notion de daction et fonction en algorithmique. Il existe environ 100 fonctions prdfinies dans la bibliothque standard du C. Lutilisateur y rajoute les fonctions quil programme.

Pour appeler une fonction : faire suivre son nom dune paire de parenthses contenant les paramtres ventuels. Exemple : fonction standard trs utile : printf. Printf( coucou ! \n ) Code pour le caractre fin de ligne Ecrit coucou ! et se place la ligne suivante. Un appel de fonction nest pas une instruction. Pour la transformer en instruction, on ajoute ; en fin de ligne. Remarque : En C, toute phrase finissant par ; est une instruction.

Toute instruction doit tre place dans le corps dune fonction. Pour dfinir une fonction, il faut : Un type de fonction (ventuellement). Nom de fonction. Les paramtres ventuels (type et nom) entre parenthses. La liste des instructions entre accolades.

On appelle bloc toute suite dinstructions entre accolades. Un programme C est une suite de fonctions. Pour tre excut, il faut une fonction nomme main. Elle sera automatiquement excute lors du lancement du programme. Donc tout programme en contient une et une seule. Exemple : /* Mon premier programme. Il affiche Coucou ! . Ceci est la premire spcification du programme. */ #includes <stdio.h> /* Ceci est une directive de compilation indiquant au compilateur quil faut intgrer dans le programme les fonctions du fichier stdio.h situ dans le rpertoire standard des fichiers de C. */ main() { afficher(); } /* Affiche Coucou ! */ afficher() { printf( Coucou ! \n ) ; } 3.2. Dclaration et initialisation des variables. <type> <identificateur>

Dclaration :

Exemple : int a,b /* Dclare a et b de type entier. */ float x /* Dclare x de type rel. */ Dclaration et initialisation la fois : <type> <identificateur> = <valeur> Remarque : Pour que ces dclarations acquirent la valeur dinstruction, il faut ajouter un ; la fin de la ligne.

Une variable non initialise peut prendre nimporte quelle valeur.

On peut dclarer des variables : Au dbut de nimporte quel bloc, elle sera dite locale ce bloc. Donc elle ne sera visible que dans ce bloc. Hors de tout bloc, elle sera alors visible dans tout le fichier et par toute fonction contenue dans ce fichier.

On affecte les variables grace au signe = , le signe de lgalit est == . Ex : multPar2() /* Demande un entier et crit son double */ { int n = 0 ; printf( Donner un entier : ) ; scanf( %d ,&n) ; /* Passe ladresse mmoire de n */ printf( Voici son double : %d ,2*n) ; /* %d est la directive de formatage de type entier. */ } 3.3. Lire et crire.

Ecrire : printf(<chaine de caractres>,<expression1>,<expression2>) Permet dafficher des chanes de caractres et des formats dcriture. Exemple : a = 1 ; b = 2 ; printf( La valeur de a est %d, la valeur de a + b est %d \n ,a,a+b) ; La valeur de a est 1, la valeur de a + b est 3 Remarque : pour crire % , on tape \%. Caractres spciaux : \n : fin de ligne (caractre 13 en ASCII). %d : entiers. %f : flottant (rel). %c : caractre. %s : chane de caractre.

Ils doivent tre remplacs par une valeur du type correspondant dans les paramtres qui suivent.

Ex : int a = 1 ; char c = y ; float pi = 3.14159 ; printf(Un entier : %d \n Un caractre %c \n Un rel %f \n ,a,c,pi) ; Un entier : 1 Un caractre : y Un rel : 3.14159 Lire : Fonction scanf de maniment dlicat. Son utilisation la plus simple est la suivante : /* Pour lire un entier au clavier. */ int n ; scanf( %d ,&n) nom de variable affecter prcd de&(passage par Format attendu

float x ; scanf( %f ,&x) ; 3.4. Instructions conditionnelles et itrations.

If (<exp>) <instruction ou bloc> exemple : if (x > 0) printf( x est positif \n ) ;

If (<exp>) <instruction ou bloc> else <instruction ou bloc> exemple : if (x > 0) printf(x est positif \n); else printf( x est ngatif ou nul \n ) ;

switch (<exp>) { case <expression constante1> : <Liste dinstruction 1> case <expression constante2> : <Liste dinstruction 2> . . Dfault : <liste dinstruction> /* Dfault est optionnel */ }

Si lexpression du switch est gale 1, la liste dinstruction 1 est excute. La liste de dfault est excute si rien nest vrai.

Exemple : Switch(n) { case 1 : printf(Janvier \n); case 2 : printf( Fvrier \n ) ; case 12 : printf( Dcembre \n ) ; } Switch(n) { case 1 : printf(n gale 1 \n);n++ ; case 2 : printf( n gale 2 ) ;n++ ; } n gale 1 n gale 2 Pour sortir dun switch ds que lun des cas a t excut, on utilise linstruction break. TQ1 : while(<exp>) <instruction ou bloc> TQ2 : do <instruction ou bloc> while(<exp>) Pourallant : for([<exp1>] ;[<exp2>]) ;[<exp3>]) <instruction ou bloc> Exp1 : Condition de dpart. Exp2 : La boucle seffectue tant que cette expression est vrai Exp3 : Est value chaque tour de boucle. En C cette boucle est aussi expressive que les deux prcdentes. Mais dans le cas gnral et pour des raisons de lisibilit, il vaut mieux lutiliser comme en algorithmique. Exemple : Pour i allant de a b faire crire(i) For (i = a ; i <= b ; i++=) Printf(%d \n,I);

Remarque: for(;;) { } est une boucle infinie. 4. Compilation et dition de programme. Comment crire un programme en C (sous unix) ? Comment lexcuter ? On cre un fichier sous dont lextension est .c (sous emacs ou vi). On compile avec gcc <nom> ou cc <nom>. Cette commande va crer un fichier dont le nom est a.out . Le C est un lagage compilateur, les fichiers sources doivent tre traduits en lagage machine (compils). Ce langage est directement exutable par la machine. Pour excuter, on tape a.out Pour changer de nom : gcc o <nouveau nom> <nom fichier source> 5. Construction dexpressions. En algorithme comme en C, une expression est une suite de caractres qui possdent un type et une valeur. Exemples : Expressions 2 256*1024 1.0 cos(1.57) 1<2 type entier entier rel flottant boolen valeur 2 262144 0.999204 Vrai

Remarque, en C les boolen sont des entiers. Toute valeur diffrente de 0 est vraie. On construit des expressions avec des lments de base (constantes, variables, appels de fonction) et des oprateurs.

Oprateurs classiques : +, -, *, / % (reste de la division euclidienne), div (Quotient de la division euclidienne) >, >=, <, <=, ==, != && (et logique), || (ou logique) ! (ngation logique) ?: (oprateur conditionnel ternaire) : <exp1> ? <exp2> : <exp3>. Si exp1 vrai alors exp2 sinon exp3. 6. Actions et fonctions. Un algorithme contient une action principale (la fonction main() en C) et dans la plupart des cas, un certain nombre daction et de fonctions auxiliaires (traduites en C par des fonctions). Cela assure : - Lisibilit. - Un code sans rptitions inutiles. - Une maintenance lors des corrections ou amliorations. On ne touche quune petite partie du code. 6.1. Action et fonction en algorithmique. Une action sert : - Afficher des infos lcran (ou autre priphrique). - Modifier les valeurs des variables ventuellement passes en paramtres. Dfinition dune action : <nom action> (listes de paramtres formels chacun prcd de commande de passage et suivi de paramtres du type). /* Spcifications de laction */ Lexique : /* Eventuellement le variables locales */ {Corps de laction}

Exemple : Action div(donnes a,b : entier ;rsultats q,r : entiers) /* Calcul le quotient et le reste de la division euclidienne de a par b. Ce dernier doit tre non nul. Le quotient est affect q et le reste r. */ { q <- 0 tant que (a>b) faire { a <- a b q <- q + 1 } r <- a } Action DivPrincipale /* Lit 2 nombres a et b. Si b = 0 crit message derreur, sinon reste et quotient de la division euclidienne de x par y. */ Lexique : x, y z, t : entiers /* Quotient et reste de la division. */ { Lire(x, y) Si (y = 0) alors crire( Erreur, y = 0 ) Sinon { div(x, y, z, t) /* Appel de la fonction avec div suivie des paramtres effectifs */ Ecrire( Le quotient est , z, Le reste est , t) } } Lors de lappel de laction, la valeur de chaque paramtre effectif est affecte au paramtre formel correspondant. Puis le corps de laction est effectu. Lors de sa sortie de laction : - Les valeurs des paramtres effectifs passs en mode Donnes ne sont pas modifis. - Les paramtres passs en mode Donnes-Rsultats ou Rsultat sont affectes des valeurs formelles correspondantes. Les trois modes de passages sont : - Donnes : La valeur de la variable passe ne sera pas modifie par laction. - Donnes-Rsultats : La valeur de la variable passe pourra tre modifie en fonction de sa valeur antrieure. - Rsultats : La valeur de la variable pourra tre modifie en fonction de sa valeur antrieure.

Fonctions : Une fonction sert calculer une valeur et renvoyer (retourner) lendroit de lappel. Une fonction ne modifie rien (Ni valeurs variables ni E/S). Remarques : Certains langages lautorisent mais cest interdit en algorithmique. Tous les paramtres sont en mode Donnes . Exemple : Fonction SommePremiersEntiers(donne n : entiers) -> entier /* Le paramtre n est un entier > 0. Renvoie la somme des i pour i allant de 1 n. */ { Retourner n(n+1)/2 } Une fonction possde un type comme une variable. Cest celui de la valeur renvoye. Linstruction retourne, sert renvoyer la valeur de cette expression. Cette instruction ne doit pas se trouver dans le corps dune boucle. On sort de la fonction ds que cette instruction est rencontre. Lappel dune fonction sutilise comme toute expression.

Exemple : A lintrieur de laction principale Ecrire(SommePremiersEntiers(4) + 3) 13 Si (SommePremiersEntiers(k) >= 126) alors S <- SommePremiersEntiers(12)

6.2. En langage C. En C, il nexiste que des fonctions mais cette notion recouvre en fait Action et fonction algorithmique. Une fonction C peut Lire et Ecrire de E/S. Une fonction C ne retourne pas forcment une valeur mme si le fait, on nest pas oblig de la considrer comme une expression.

Exemple : Main() nest pas utilis comme une fonction renvoyant une valeur. Int SommePremiersEntiers(int n) peut tre utilise comme variable : S = SommePremiersEntiers(12) Cela illustre le fait que nimporte quelle expression peut devenir une instruction si elle est suivie dun ; . La valeur renvoye est indique par linstruction return . Par dfaut, les fonctions sont de type entier.

Il existe un type rserv qui ne renvoie rien : void . La fonction main doit toujours tre de type entier.

Vous aimerez peut-être aussi