Vous êtes sur la page 1sur 204

Cours dAlgorithmique et de Langage C 2005 - v 3.

Cours dAlgorithmique et de Langage C 2005 - v 3.0


Bob CORDEAU
cordeau@onera.fr
Mesures Physiques IUT dOrsay

15 mai 2006

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Avant-propos

Avant-propos
Ce cours en libre acc`s repose sur trois partis pris : e le choix dun langage algorithmique minimal, francis ; e le choix du langage C, mais en utilisant le compilateur C++, pour bncier damliorations reconnues en gnie logiciel ; e e e e enn le choix dun logiciel libre : Dev-C++ (environnement de dveloppement intgr tlchargeable sur le site e e e ee http ://www.bloodshed.net).

Cette deuxi`me version est destine ` voluer en fonction des e e ae remarques mises. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Avant-propos

Avant-propos
Ce cours en libre acc`s repose sur trois partis pris : e le choix dun langage algorithmique minimal, francis ; e le choix du langage C, mais en utilisant le compilateur C++, pour bncier damliorations reconnues en gnie logiciel ; e e e e enn le choix dun logiciel libre : Dev-C++ (environnement de dveloppement intgr tlchargeable sur le site e e e ee http ://www.bloodshed.net).

Cette deuxi`me version est destine ` voluer en fonction des e e ae remarques mises. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Avant-propos

Avant-propos
Ce cours en libre acc`s repose sur trois partis pris : e le choix dun langage algorithmique minimal, francis ; e le choix du langage C, mais en utilisant le compilateur C++, pour bncier damliorations reconnues en gnie logiciel ; e e e e enn le choix dun logiciel libre : Dev-C++ (environnement de dveloppement intgr tlchargeable sur le site e e e ee http ://www.bloodshed.net).

Cette deuxi`me version est destine ` voluer en fonction des e e ae remarques mises. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Avant-propos

Remerciements

Les corrections des versions prcdentes doivent beaucoup ` e e a rey, Georges Vincents, Fanny Jambon et Michelle Nicolas Fe Cordeau, ` qui je sais gr de leurs conseils ou lectures attentives. a e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Sommaire Introduction

Sommaire de la Partie 1

Introduction ` linformatique a Environnement matriel e Environnement logiciel Langages Production des programmes Historique Mthodologie e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Sommaire Programmation

Sommaire de la Partie 2

Les bases de la programmation Algorithme C Programme Importance des notations Types de base Variable et aectation Entres/Sorties e Instruction Condition Trace dun algorithme

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Sommaire Instructions

Sommaire de la Partie 3

Les instructions en algorithmique et en C Oprateurs arithmtiques e e Oprateurs relationnels e Oprateurs boolens e e Oprateurs binaires e Priorits des oprateurs e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Sommaire Structures

Sommaire de la Partie 4

Les structures en algorithmique et en C Slection e Boucle Faire .. TantQue Boucle TantQue .. FinTantQue Boucle Pour .. FinPour Ruptures de boucle

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Sommaire fonctions

Sommaire de la Partie 5

Les fonctions Caractristiques e Notation Le passage des arguments Rcursivit e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Sommaire Pointeurs

Sommaire de la Partie 6

Les pointeurs, tableaux et procdures e Procdures e Pointeurs Passage des arguments par adresse Relation avec les tableaux

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Sommaire C avanc e

Sommaire de la Partie 7

Quelques aspects avancs du langage C e Entres/Sorties sur chiers e Cha nes de caract`res e Structures Allocation programme e Arguments du main()

Cours dAlgorithmique et de Langage C 2005 - v 3.0

Premi`re partie I e Introduction gnrale e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Environnement matriel e

Lordinateur
Dnition e Automate dterministe ` composants lectroniques. e a e Lordinateur comprend entre autres : un microprocesseur avec une UC (Unit de Contrle), une e o UAL (Unit Arithmtique et Logique), une horloge, une e e mmoire cache rapide ; e de la mmoire vive (RAM), contenant les instructions et les e donnes. La RAM est forme de cellules binaires organises en e e e mot de 8 bits (octet) ; des priphriques : entres/sorties, mmoires mortes (disque e e e e dur, CD-ROM. . . ), rseau. . . e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Environnement matriel e

Lordinateur
Dnition e Automate dterministe ` composants lectroniques. e a e Lordinateur comprend entre autres : un microprocesseur avec une UC (Unit de Contrle), une e o UAL (Unit Arithmtique et Logique), une horloge, une e e mmoire cache rapide ; e de la mmoire vive (RAM), contenant les instructions et les e donnes. La RAM est forme de cellules binaires organises en e e e mot de 8 bits (octet) ; des priphriques : entres/sorties, mmoires mortes (disque e e e e dur, CD-ROM. . . ), rseau. . . e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Environnement matriel e

Lordinateur
Dnition e Automate dterministe ` composants lectroniques. e a e Lordinateur comprend entre autres : un microprocesseur avec une UC (Unit de Contrle), une e o UAL (Unit Arithmtique et Logique), une horloge, une e e mmoire cache rapide ; e de la mmoire vive (RAM), contenant les instructions et les e donnes. La RAM est forme de cellules binaires organises en e e e mot de 8 bits (octet) ; des priphriques : entres/sorties, mmoires mortes (disque e e e e dur, CD-ROM. . . ), rseau. . . e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Environnement matriel e

Lordinateur
Dnition e Automate dterministe ` composants lectroniques. e a e Lordinateur comprend entre autres : un microprocesseur avec une UC (Unit de Contrle), une e o UAL (Unit Arithmtique et Logique), une horloge, une e e mmoire cache rapide ; e de la mmoire vive (RAM), contenant les instructions et les e donnes. La RAM est forme de cellules binaires organises en e e e mot de 8 bits (octet) ; des priphriques : entres/sorties, mmoires mortes (disque e e e e dur, CD-ROM. . . ), rseau. . . e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Environnement logiciel

Deux sortes de programmes

Le syst`me dexploitation : ensemble des programmes qui e g`rent les ressources matrielles et logicielles ; il propose une e e aide au dialogue entre lutilisateur et lordinateur : linterface textuelle (interpr`te de commande) ou graphique (gestionnaire e de fentres). Il est souvent multitche et parfois e a multiutilisateur ; les programmes applicatifs ddis ` des tches particuli`res. Ils e e a a e sont forms dune srie de commandes contenues dans un e e programme source crit dans un langage compris par e lordinateur.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Environnement logiciel

Deux sortes de programmes

Le syst`me dexploitation : ensemble des programmes qui e g`rent les ressources matrielles et logicielles ; il propose une e e aide au dialogue entre lutilisateur et lordinateur : linterface textuelle (interpr`te de commande) ou graphique (gestionnaire e de fentres). Il est souvent multitche et parfois e a multiutilisateur ; les programmes applicatifs ddis ` des tches particuli`res. Ils e e a a e sont forms dune srie de commandes contenues dans un e e programme source crit dans un langage compris par e lordinateur.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Langages

Des langages de dirents niveaux e


Chaque processeur poss`de un langage propre, directement e e excutable : le langage machine. Il est form de 0 et de 1 et e nest pas portable, mais cest le seul que lordinateur comprend ; le langage dassemblage est un codage alphanumrique du e langage machine. Il est plus lisible que la langage machine, mais nest toujours pas portable. On le traduit en langage machine par un assembleur ; les langages de haut niveau. Souvent normaliss, ils e permettent le portage dune machine ` lautre. Ils sont a traduits en langage machine par un compilateur ou un interprteur. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Langages

Des langages de dirents niveaux e


Chaque processeur poss`de un langage propre, directement e e excutable : le langage machine. Il est form de 0 et de 1 et e nest pas portable, mais cest le seul que lordinateur comprend ; le langage dassemblage est un codage alphanumrique du e langage machine. Il est plus lisible que la langage machine, mais nest toujours pas portable. On le traduit en langage machine par un assembleur ; les langages de haut niveau. Souvent normaliss, ils e permettent le portage dune machine ` lautre. Ils sont a traduits en langage machine par un compilateur ou un interprteur. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Langages

Des langages de dirents niveaux e


Chaque processeur poss`de un langage propre, directement e e excutable : le langage machine. Il est form de 0 et de 1 et e nest pas portable, mais cest le seul que lordinateur comprend ; le langage dassemblage est un codage alphanumrique du e langage machine. Il est plus lisible que la langage machine, mais nest toujours pas portable. On le traduit en langage machine par un assembleur ; les langages de haut niveau. Souvent normaliss, ils e permettent le portage dune machine ` lautre. Ils sont a traduits en langage machine par un compilateur ou un interprteur. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Production des programmes

Deux techniques de production des programmes


La compilation est la traduction du source en langage objet. Elle comprend au moins quatre phases (trois phases danalyse lexicale, syntaxique et smantique et une de production e de code objet). Pour gnrer le langage machine il faut encore e e e une phase particuli`re : ldition de liens. Cette technique est e contraignante mais ore une grande vitesse dexcution ; e dans la technique de linterprtation chaque ligne du source e analys est traduite au fur et ` mesure en instructions e a directement excutes. Aucun programme objet nest gnr. e e e ee Cest tr`s souple mais linterprteur doit tre utilis ` chaque e e e ea excution. . . e Ces deux techniques peuvent coexister pour un mme langage. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Production des programmes

Deux techniques de production des programmes


La compilation est la traduction du source en langage objet. Elle comprend au moins quatre phases (trois phases danalyse lexicale, syntaxique et smantique et une de production e de code objet). Pour gnrer le langage machine il faut encore e e e une phase particuli`re : ldition de liens. Cette technique est e contraignante mais ore une grande vitesse dexcution ; e dans la technique de linterprtation chaque ligne du source e analys est traduite au fur et ` mesure en instructions e a directement excutes. Aucun programme objet nest gnr. e e e ee Cest tr`s souple mais linterprteur doit tre utilis ` chaque e e e ea excution. . . e Ces deux techniques peuvent coexister pour un mme langage. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Production des programmes

Deux techniques de production des programmes


La compilation est la traduction du source en langage objet. Elle comprend au moins quatre phases (trois phases danalyse lexicale, syntaxique et smantique et une de production e de code objet). Pour gnrer le langage machine il faut encore e e e une phase particuli`re : ldition de liens. Cette technique est e contraignante mais ore une grande vitesse dexcution ; e dans la technique de linterprtation chaque ligne du source e analys est traduite au fur et ` mesure en instructions e a directement excutes. Aucun programme objet nest gnr. e e e ee Cest tr`s souple mais linterprteur doit tre utilis ` chaque e e e ea excution. . . e Ces deux techniques peuvent coexister pour un mme langage. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Historique

Bref historique des langages

Annes 50 (approches exprimentales) : FORTRAN, LISP, e e COBOL. . . Annes 60 (langages universels) : ALGOL, PL/1, PASCAL. . . e Annes 70 (gnie logiciel) : C, MODULA-2, ADA. . . e e Annes 8090 (programmation objet) : C++, Labview, Eiel, e Matlab. . . Annes 902000 (langages interprts objet) : Java, Perl, e ee tcl/Tk, Ruby, Python. . . Parmi des centaines de langages crs, une minorit est vraiment ee e utilise. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Historique

Bref historique des langages

Annes 50 (approches exprimentales) : FORTRAN, LISP, e e COBOL. . . Annes 60 (langages universels) : ALGOL, PL/1, PASCAL. . . e Annes 70 (gnie logiciel) : C, MODULA-2, ADA. . . e e Annes 8090 (programmation objet) : C++, Labview, Eiel, e Matlab. . . Annes 902000 (langages interprts objet) : Java, Perl, e ee tcl/Tk, Ruby, Python. . . Parmi des centaines de langages crs, une minorit est vraiment ee e utilise. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Historique

Bref historique des langages

Annes 50 (approches exprimentales) : FORTRAN, LISP, e e COBOL. . . Annes 60 (langages universels) : ALGOL, PL/1, PASCAL. . . e Annes 70 (gnie logiciel) : C, MODULA-2, ADA. . . e e Annes 8090 (programmation objet) : C++, Labview, Eiel, e Matlab. . . Annes 902000 (langages interprts objet) : Java, Perl, e ee tcl/Tk, Ruby, Python. . . Parmi des centaines de langages crs, une minorit est vraiment ee e utilise. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Historique

Bref historique des langages

Annes 50 (approches exprimentales) : FORTRAN, LISP, e e COBOL. . . Annes 60 (langages universels) : ALGOL, PL/1, PASCAL. . . e Annes 70 (gnie logiciel) : C, MODULA-2, ADA. . . e e Annes 8090 (programmation objet) : C++, Labview, Eiel, e Matlab. . . Annes 902000 (langages interprts objet) : Java, Perl, e ee tcl/Tk, Ruby, Python. . . Parmi des centaines de langages crs, une minorit est vraiment ee e utilise. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Historique

Bref historique des langages

Annes 50 (approches exprimentales) : FORTRAN, LISP, e e COBOL. . . Annes 60 (langages universels) : ALGOL, PL/1, PASCAL. . . e Annes 70 (gnie logiciel) : C, MODULA-2, ADA. . . e e Annes 8090 (programmation objet) : C++, Labview, Eiel, e Matlab. . . Annes 902000 (langages interprts objet) : Java, Perl, e ee tcl/Tk, Ruby, Python. . . Parmi des centaines de langages crs, une minorit est vraiment ee e utilise. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Mthodologie e

La construction des programmes : le gnie logiciel e


Plusieurs mod`les sont envisageables, par exemple : e la mthodologie procdurale. On emploie lanalyse e e descendante et remontante qui proc`de par ranements e successifs : on seorce de dcomposer un probl`me complexe e e en sous-programmes plus simples. Cette mthode structure e dabord les actions ; la mthodologie objet dnit dabord des composants (les e e objets) qui contiennent des attributs (donnes) et des e mthodes (actions). On communique entre objets par lenvoi e de messages qui donnent acc`s ` un attribut ou qui lancent e a une mthode. e Tous les mod`les reposent sur la notion dalgorithme. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Mthodologie e

La construction des programmes : le gnie logiciel e


Plusieurs mod`les sont envisageables, par exemple : e la mthodologie procdurale. On emploie lanalyse e e descendante et remontante qui proc`de par ranements e successifs : on seorce de dcomposer un probl`me complexe e e en sous-programmes plus simples. Cette mthode structure e dabord les actions ; la mthodologie objet dnit dabord des composants (les e e objets) qui contiennent des attributs (donnes) et des e mthodes (actions). On communique entre objets par lenvoi e de messages qui donnent acc`s ` un attribut ou qui lancent e a une mthode. e Tous les mod`les reposent sur la notion dalgorithme. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Introduction ` linformatique a Mthodologie e

Exemple dalgorithme : volume dun cne droit o


DbutProgramme e DbutDclaration e e pi 3.141593 : ottant rayon, hauteur , volume : ottant FinDclaration e Acher(Rayon du cne : ) o Saisir(rayon) Acher(Hauteur du cne : ) o Saisir(hauteur ) volume (pi rayon rayon hauteur )/3 Acher(Volume du cne = , volume) o FinProgramme

Cours dAlgorithmique et de Langage C 2005 - v 3.0

Deuxi`me partie II e Les bases de la programmation

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Algorithme

Quest-ce quun algorithme ?

Dnition e Moyen datteindre un but en rptant un nombre ni de fois un e e nombre ni dinstructions. Donc, un algorithme se termine en un temps ni.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Algorithme

Quest-ce quun algorithme ?

Dnition e Moyen datteindre un but en rptant un nombre ni de fois un e e nombre ni dinstructions. Donc, un algorithme se termine en un temps ni.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Algorithme

Exemple : calcul manuel de la racine carre de 37815 e


On spare le nombre en groupes de deux chires en partant de la e droite : 03 78 15. Pour le premier groupe 03 : on cherche sa plus grande racine carre : 1 e on retire 12 = 1 du groupe. Reste : 2 on abaisse le groupe suivant : 278 Pour tous les autres groupes :
1 2 3 4

on double la racine courante : 1 2 = 2 on cherche n tel que 2n n 278. Soit n = 9 on retire 29 9 = 261 du reste. Soit 17 on abaisse le groupe suivant : 1715

Puis on it`re les tapes 1 ` 4 jusqu` la prcision dsire. e e a a e e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Algorithme

Le langage algorithmique

Lexemple prcdent illustre la dicult de dcrire compl`tement e e e e e et sans ambigu e un processus non trivial. Do` le besoin de t u formaliser un langage de description des algorithmes. Le langage algorithmique choisi doit tre simple, clair et prcis. e e Nous utiliserons un langage francis form dune vingtaine de mots e e rservs. e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Algorithme

Le langage algorithmique

Lexemple prcdent illustre la dicult de dcrire compl`tement e e e e e et sans ambigu e un processus non trivial. Do` le besoin de t u formaliser un langage de description des algorithmes. Le langage algorithmique choisi doit tre simple, clair et prcis. e e Nous utiliserons un langage francis form dune vingtaine de mots e e rservs. e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Algorithme

Le langage algorithmique

Lexemple prcdent illustre la dicult de dcrire compl`tement e e e e e et sans ambigu e un processus non trivial. Do` le besoin de t u formaliser un langage de description des algorithmes. Le langage algorithmique choisi doit tre simple, clair et prcis. e e Nous utiliserons un langage francis form dune vingtaine de mots e e rservs. e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Algorithme

Mots rservs du langage algorithmique e e


Afficher DbutFonction e Faire FinPour FinSi Pour Si Dans DbutProcdure e e FinDclarations e FinProcdure e FinTantQue Retourner Sinon DbutDclarations e e DbutProgramme e FinFonction FinProgramme ParPasDe Saisir TantQue

On y ajoutera des fonctions utiles, par exemple : Alea(n), qui fournit un entier au hasard entre 0 et n 1, plus toutes les fonctions mathmatiques usuelles : sin(x), arccos(x), e tanh(x), log(x). . .

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Algorithme

Mots rservs du langage algorithmique e e


Afficher DbutFonction e Faire FinPour FinSi Pour Si Dans DbutProcdure e e FinDclarations e FinProcdure e FinTantQue Retourner Sinon DbutDclarations e e DbutProgramme e FinFonction FinProgramme ParPasDe Saisir TantQue

On y ajoutera des fonctions utiles, par exemple : Alea(n), qui fournit un entier au hasard entre 0 et n 1, plus toutes les fonctions mathmatiques usuelles : sin(x), arccos(x), e tanh(x), log(x). . .

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation C

Mots rservs du langage C (norme ANSI C99) e e

auto break case char const continue default do double else

enum extern float for goto if inline int long register

restrict return short signed sizeof static struct switch typedef union

unsigned void volatile while Bool Complex Imaginary

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Programme

Programme et algorithme

Dnition e Un programme est la traduction dun algorithme en un langage compilable ou interprtable par un ordinateur. e Il est souvent crit en plusieurs parties, dont une qui pilote les e autres, le programme principal.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Programme

Programme et algorithme

Dnition e Un programme est la traduction dun algorithme en un langage compilable ou interprtable par un ordinateur. e Il est souvent crit en plusieurs parties, dont une qui pilote les e autres, le programme principal.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Importance des notations

La prsentation des programmes e


Un programme est destin ` ltre humain. Pour en faciliter la ea e lecture, il doit tre correctement indent et judicieusement e e comment (cf. annexe programme type ). e On nomme indentation les retraits en dbuts de ligne permettant e dextraire rapidement la structure (le squelette) dun programme, la logique dune boucle ou dun test. La signication de parties non triviales doit tre signale par un e e commentaire : en algorithmique, il est soulign ou commence par // : e ceci est un commentaire // en voici un autre le C poss`de deux notations : e
commentaire ligne : // ceci est un commentaire commentaire bloc, il commence par /* et se termine par */

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Importance des notations

La prsentation des programmes e


Un programme est destin ` ltre humain. Pour en faciliter la ea e lecture, il doit tre correctement indent et judicieusement e e comment (cf. annexe programme type ). e On nomme indentation les retraits en dbuts de ligne permettant e dextraire rapidement la structure (le squelette) dun programme, la logique dune boucle ou dun test. La signication de parties non triviales doit tre signale par un e e commentaire : en algorithmique, il est soulign ou commence par // : e ceci est un commentaire // en voici un autre le C poss`de deux notations : e
commentaire ligne : // ceci est un commentaire commentaire bloc, il commence par /* et se termine par */

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Importance des notations

La prsentation des programmes e


Un programme est destin ` ltre humain. Pour en faciliter la ea e lecture, il doit tre correctement indent et judicieusement e e comment (cf. annexe programme type ). e On nomme indentation les retraits en dbuts de ligne permettant e dextraire rapidement la structure (le squelette) dun programme, la logique dune boucle ou dun test. La signication de parties non triviales doit tre signale par un e e commentaire : en algorithmique, il est soulign ou commence par // : e ceci est un commentaire // en voici un autre le C poss`de deux notations : e
commentaire ligne : // ceci est un commentaire commentaire bloc, il commence par /* et se termine par */

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Importance des notations

La prsentation des programmes e


Un programme est destin ` ltre humain. Pour en faciliter la ea e lecture, il doit tre correctement indent et judicieusement e e comment (cf. annexe programme type ). e On nomme indentation les retraits en dbuts de ligne permettant e dextraire rapidement la structure (le squelette) dun programme, la logique dune boucle ou dun test. La signication de parties non triviales doit tre signale par un e e commentaire : en algorithmique, il est soulign ou commence par // : e ceci est un commentaire // en voici un autre le C poss`de deux notations : e
commentaire ligne : // ceci est un commentaire commentaire bloc, il commence par /* et se termine par */

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Importance des notations

La prsentation des programmes e


Un programme est destin ` ltre humain. Pour en faciliter la ea e lecture, il doit tre correctement indent et judicieusement e e comment (cf. annexe programme type ). e On nomme indentation les retraits en dbuts de ligne permettant e dextraire rapidement la structure (le squelette) dun programme, la logique dune boucle ou dun test. La signication de parties non triviales doit tre signale par un e e commentaire : en algorithmique, il est soulign ou commence par // : e ceci est un commentaire // en voici un autre le C poss`de deux notations : e
commentaire ligne : // ceci est un commentaire commentaire bloc, il commence par /* et se termine par */

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type boolen e
Ensemble de dnition : B = {FAUX , VRAI } e Oprations boolennes : e e Non boolen e a VRAI FAUX NON(a) FAUX VRAI OU et ET boolens e a FAUX FAUX VRAI VRAI b FAUX VRAI FAUX VRAI a OU b a ET b FAUX FAUX VRAI FAUX VRAI FAUX VRAI VRAI

Dclaration algorithmique : e Dclaration C : e

a, b : bool e en

bool a, b ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type boolen e
Ensemble de dnition : B = {FAUX , VRAI } e Oprations boolennes : e e Non boolen e a VRAI FAUX NON(a) FAUX VRAI OU et ET boolens e a FAUX FAUX VRAI VRAI b FAUX VRAI FAUX VRAI a OU b a ET b FAUX FAUX VRAI FAUX VRAI FAUX VRAI VRAI

Dclaration algorithmique : e Dclaration C : e

a, b : bool e en

bool a, b ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type boolen e
Ensemble de dnition : B = {FAUX , VRAI } e Oprations boolennes : e e Non boolen e a VRAI FAUX NON(a) FAUX VRAI OU et ET boolens e a FAUX FAUX VRAI VRAI b FAUX VRAI FAUX VRAI a OU b a ET b FAUX FAUX VRAI FAUX VRAI FAUX VRAI VRAI

Dclaration algorithmique : e Dclaration C : e

a, b : bool e en

bool a, b ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type boolen e
Ensemble de dnition : B = {FAUX , VRAI } e Oprations boolennes : e e Non boolen e a VRAI FAUX NON(a) FAUX VRAI OU et ET boolens e a FAUX FAUX VRAI VRAI b FAUX VRAI FAUX VRAI a OU b a ET b FAUX FAUX VRAI FAUX VRAI FAUX VRAI VRAI

Dclaration algorithmique : e Dclaration C : e

a, b : bool e en

bool a, b ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type entier

Ensemble de dnition : Z e Oprations sur les entiers : e


n1 + n2 n1 n2 n1 n2 division enti`re : n1 /n2 (35 / 8 donne 4) e reste de la division enti`re : n1 %n2 (35 % 8 donne 3) e

Notation algorithmique : Notation C :

n1, n2 : entier

int n1, n2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type entier

Ensemble de dnition : Z e Oprations sur les entiers : e


n1 + n2 n1 n2 n1 n2 division enti`re : n1 /n2 (35 / 8 donne 4) e reste de la division enti`re : n1 %n2 (35 % 8 donne 3) e

Notation algorithmique : Notation C :

n1, n2 : entier

int n1, n2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type entier

Ensemble de dnition : Z e Oprations sur les entiers : e


n1 + n2 n1 n2 n1 n2 division enti`re : n1 /n2 (35 / 8 donne 4) e reste de la division enti`re : n1 %n2 (35 % 8 donne 3) e

Notation algorithmique : Notation C :

n1, n2 : entier

int n1, n2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type entier

Ensemble de dnition : Z e Oprations sur les entiers : e


n1 + n2 n1 n2 n1 n2 division enti`re : n1 /n2 (35 / 8 donne 4) e reste de la division enti`re : n1 %n2 (35 % 8 donne 3) e

Notation algorithmique : Notation C :

n1, n2 : entier

int n1, n2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type ottant

Ensemble de dnition : F e Oprations sur les ottants : e


x1 + x2 x1 x2 x1 x2 x1 /x2 toutes les oprations mathmatiques usuelles : ln, cos, arctan ... e e

Notation algorithmique : Notation C :

x1, x2 : ottant

float x1, x2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type ottant

Ensemble de dnition : F e Oprations sur les ottants : e


x1 + x2 x1 x2 x1 x2 x1 /x2 toutes les oprations mathmatiques usuelles : ln, cos, arctan ... e e

Notation algorithmique : Notation C :

x1, x2 : ottant

float x1, x2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type ottant

Ensemble de dnition : F e Oprations sur les ottants : e


x1 + x2 x1 x2 x1 x2 x1 /x2 toutes les oprations mathmatiques usuelles : ln, cos, arctan ... e e

Notation algorithmique : Notation C :

x1, x2 : ottant

float x1, x2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type ottant

Ensemble de dnition : F e Oprations sur les ottants : e


x1 + x2 x1 x2 x1 x2 x1 /x2 toutes les oprations mathmatiques usuelles : ln, cos, arctan ... e e

Notation algorithmique : Notation C :

x1, x2 : ottant

float x1, x2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type caract`re e

Ensemble de dnition : la table ASCII e Oprations sur les caract`res : e e


SUCC (c) : caract`re suivant dans la table ASCII ; e PRED(c) : caract`re prcdent dans la table ASCII. e e e

Notation algorithmique : Notation C :

c1, c2 : caract`re e

char c1, c2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type caract`re e

Ensemble de dnition : la table ASCII e Oprations sur les caract`res : e e


SUCC (c) : caract`re suivant dans la table ASCII ; e PRED(c) : caract`re prcdent dans la table ASCII. e e e

Notation algorithmique : Notation C :

c1, c2 : caract`re e

char c1, c2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type caract`re e

Ensemble de dnition : la table ASCII e Oprations sur les caract`res : e e


SUCC (c) : caract`re suivant dans la table ASCII ; e PRED(c) : caract`re prcdent dans la table ASCII. e e e

Notation algorithmique : Notation C :

c1, c2 : caract`re e

char c1, c2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Le type caract`re e

Ensemble de dnition : la table ASCII e Oprations sur les caract`res : e e


SUCC (c) : caract`re suivant dans la table ASCII ; e PRED(c) : caract`re prcdent dans la table ASCII. e e e

Notation algorithmique : Notation C :

c1, c2 : caract`re e

char c1, c2 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Taille et amplitude du type caract`re e

La table ASCII code tous les caract`res usuels (tats-uniens) sur 7 e e bits (128 positions). Sur un octet (8 bits), en C, on dispose : du type char dni sur [128..127] ; e du type unsigned char dni sur [0..255]. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Taille et amplitude du type caract`re e

La table ASCII code tous les caract`res usuels (tats-uniens) sur 7 e e bits (128 positions). Sur un octet (8 bits), en C, on dispose : du type char dni sur [128..127] ; e du type unsigned char dni sur [0..255]. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Taille et amplitude du type entier

Le type int en C peut tre quali par un modicateur. e e Avec Dev-C++ sous Windows : short int (2 octets) : [32768..32767] unsigned short int (2 octets) : [0..65535] int (4 octets) : [2147483648..2147483647] unsigned int (4 octets) : [0..4294967295] long int (4 octets) : [2147483648..2147483647] unsigned long int (4 octets) : [0..4294927295]

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Types de base

Taille et amplitude du type ottant

Il existe deux types ottant en C : float et double. Avec Dev-C++ sous Windows : float (4 octets) : [1.17549435 1038 ..3.40282347 1038 ] double (8 octets) : [2.225073858507201410308 ..1.797693134862315810308 ]

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Variable et aectation

Les variables

Variable Cest un nom donn ` une valeur. ea Un nom de variable reprsente une et une seule valeur qui peut e voluer au cours du temps (la valeur antrieure est perdue). e e Dclaration e On dclare une variable en lui donnant un nom et un type. e Dclaration algorithmique : e Dclaration C : e tension, puissance : ottant

float tension, puissance ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Variable et aectation

Les variables

Variable Cest un nom donn ` une valeur. ea Un nom de variable reprsente une et une seule valeur qui peut e voluer au cours du temps (la valeur antrieure est perdue). e e Dclaration e On dclare une variable en lui donnant un nom et un type. e Dclaration algorithmique : e Dclaration C : e tension, puissance : ottant

float tension, puissance ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Variable et aectation

Les variables

Variable Cest un nom donn ` une valeur. ea Un nom de variable reprsente une et une seule valeur qui peut e voluer au cours du temps (la valeur antrieure est perdue). e e Dclaration e On dclare une variable en lui donnant un nom et un type. e Dclaration algorithmique : e Dclaration C : e tension, puissance : ottant

float tension, puissance ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Variable et aectation

Les variables

Variable Cest un nom donn ` une valeur. ea Un nom de variable reprsente une et une seule valeur qui peut e voluer au cours du temps (la valeur antrieure est perdue). e e Dclaration e On dclare une variable en lui donnant un nom et un type. e Dclaration algorithmique : e Dclaration C : e tension, puissance : ottant

float tension, puissance ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Variable et aectation

Laectation
Dnition e Cest lopration qui permet de donner une valeur ` une variable. e a Dans une aectation, le membre de gauche reoit le membre de c droite (ce qui ncessite deux temps dhorloge dirents). e e Notations algorithmiques : index 3 i i +1 Notations C : index = 3 ; // Attention ! i = i + 1 ; // ce nest pas lgalit mathmatique e e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Variable et aectation

Laectation
Dnition e Cest lopration qui permet de donner une valeur ` une variable. e a Dans une aectation, le membre de gauche reoit le membre de c droite (ce qui ncessite deux temps dhorloge dirents). e e Notations algorithmiques : index 3 i i +1 Notations C : index = 3 ; // Attention ! i = i + 1 ; // ce nest pas lgalit mathmatique e e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Variable et aectation

Laectation
Dnition e Cest lopration qui permet de donner une valeur ` une variable. e a Dans une aectation, le membre de gauche reoit le membre de c droite (ce qui ncessite deux temps dhorloge dirents). e e Notations algorithmiques : index 3 i i +1 Notations C : index = 3 ; // Attention ! i = i + 1 ; // ce nest pas lgalit mathmatique e e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Variable et aectation

Les constantes

Dnition e Cest une variable qui ne change pas de valeur au cours du programme. Une constante doit toujours recevoir une valeur d`s sa dclaration. e e Notation algorithmique : Notation C : phi 1.618 : ottant

const float phi = 1.618 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Variable et aectation

Les constantes

Dnition e Cest une variable qui ne change pas de valeur au cours du programme. Une constante doit toujours recevoir une valeur d`s sa dclaration. e e Notation algorithmique : Notation C : phi 1.618 : ottant

const float phi = 1.618 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Variable et aectation

Les constantes

Dnition e Cest une variable qui ne change pas de valeur au cours du programme. Une constante doit toujours recevoir une valeur d`s sa dclaration. e e Notation algorithmique : Notation C : phi 1.618 : ottant

const float phi = 1.618 ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Entres/Sorties e

Les entres/sorties e

Ces deux oprations de base permettent de dialoguer : soit on e saisit une valeur (i-e lordinateur attend une valeur pour une variable), soit on lache ` lcran. a e Notations algorithmiques : AFFICHER(Entrez une couleur primaire) SAISIR(couleurPrim) Notations C : cout << "Entrez une couleur primaire" ; cin >> couleurPrim ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Entres/Sorties e

Les entres/sorties e

Ces deux oprations de base permettent de dialoguer : soit on e saisit une valeur (i-e lordinateur attend une valeur pour une variable), soit on lache ` lcran. a e Notations algorithmiques : AFFICHER(Entrez une couleur primaire) SAISIR(couleurPrim) Notations C : cout << "Entrez une couleur primaire" ; cin >> couleurPrim ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Entres/Sorties e

Les entres/sorties e

Ces deux oprations de base permettent de dialoguer : soit on e saisit une valeur (i-e lordinateur attend une valeur pour une variable), soit on lache ` lcran. a e Notations algorithmiques : AFFICHER(Entrez une couleur primaire) SAISIR(couleurPrim) Notations C : cout << "Entrez une couleur primaire" ; cin >> couleurPrim ;

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Instruction

Un programme est constitu dinstructions. . . e

Une instruction est une expression du langage qui peut tre e soit simple soit compose (on parle alors dun bloc e dinstructions). En algorithmique :
on crit une instruction simple par ligne ; e un bloc dinstruction, dans une structure, est dlimit par un e e dbut et une n. e

en C :
une instruction simple est suivie par un terminateur ( ;) le point virgule ; un bloc dinstructions est un ensemble dinstructions simples, encadr par une paire daccolades : { bloc instructions }. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Instruction

Un programme est constitu dinstructions. . . e

Une instruction est une expression du langage qui peut tre e soit simple soit compose (on parle alors dun bloc e dinstructions). En algorithmique :
on crit une instruction simple par ligne ; e un bloc dinstruction, dans une structure, est dlimit par un e e dbut et une n. e

en C :
une instruction simple est suivie par un terminateur ( ;) le point virgule ; un bloc dinstructions est un ensemble dinstructions simples, encadr par une paire daccolades : { bloc instructions }. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Instruction

Un programme est constitu dinstructions. . . e

Une instruction est une expression du langage qui peut tre e soit simple soit compose (on parle alors dun bloc e dinstructions). En algorithmique :
on crit une instruction simple par ligne ; e un bloc dinstruction, dans une structure, est dlimit par un e e dbut et une n. e

en C :
une instruction simple est suivie par un terminateur ( ;) le point virgule ; un bloc dinstructions est un ensemble dinstructions simples, encadr par une paire daccolades : { bloc instructions }. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Condition

. . . et de choix logiques

Dnition e Une condition est une expression crite entre parenth`ses ` valeur e e a boolenne. e Une condition permet de prendre une dcision lmentaire suivant e ee son rsultat : VRAI ou FAUX . e Dans un langage, les conditions sont mises en uvre par des structures de contrle. o

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Trace dun algorithme

Cette technique permet de suivre pas ` pas lexcution dun a e algorithme. On numrote les instructions de lalgorithme et, dans un tableau, e on suit lvolution des variables intressantes : e e Algorithme inconnu DbutDclaration e e a, b : entier FinDclaration e 1 a4 2 b 11 3 aba 4 b ba 5 aa+b Trace de lalgorithme No 1 2 3 4 5 a 4 7 4 11 b 11

Lalgorithme inconnu permute les valeurs de a et b.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Trace dun algorithme

Cette technique permet de suivre pas ` pas lexcution dun a e algorithme. On numrote les instructions de lalgorithme et, dans un tableau, e on suit lvolution des variables intressantes : e e Algorithme inconnu DbutDclaration e e a, b : entier FinDclaration e 1 a4 2 b 11 3 aba 4 b ba 5 aa+b Trace de lalgorithme No 1 2 3 4 5 a 4 7 4 11 b 11

Lalgorithme inconnu permute les valeurs de a et b.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les bases de la programmation Trace dun algorithme

Cette technique permet de suivre pas ` pas lexcution dun a e algorithme. On numrote les instructions de lalgorithme et, dans un tableau, e on suit lvolution des variables intressantes : e e Algorithme inconnu DbutDclaration e e a, b : entier FinDclaration e 1 a4 2 b 11 3 aba 4 b ba 5 aa+b Trace de lalgorithme No 1 2 3 4 5 a 4 7 4 11 b 11

Lalgorithme inconnu permute les valeurs de a et b.

Cours dAlgorithmique et de Langage C 2005 - v 3.0

Troisi`me partie III e Les instructions en algorithmique et en langage C

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les instructions en algorithmique et en C Oprateurs arithmtiques e e

Les oprateurs arithmtiques e e

addition + soustraction oppos e produit division / modulo % De plus, en C :

a+b ab a ab a/b a%b (attention ` la division enti`re) a e (pour les types entiers) pr : ++a ou post : a++ e pr : --a ou post : a-e

incrmentation ++ e dcrmentation -e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les instructions en algorithmique et en C Oprateurs relationnels e

Les oprateurs relationnels e

oprateur e gal e dirent e infrieur e suprieur e infrieur ou gal e e suprieur ou gal e e

algorithmique == = < >

C == != < > <= >=

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les instructions en algorithmique et en C Oprateurs boolens e e

Les oprateurs boolens e e

oprateur e ngation e ou et

algorithmique NON(a) a OU b a ET b

C !a a || b a && b

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les instructions en algorithmique et en C Oprateurs binaires e

Les oprateurs C binaires e

Ces oprateurs C, tr`s proches de la machine, servent ` manipuler e e a des mots bit ` bit, par exemple pour faire des masques : a et binaire & ou binaire | a & b a | b a ^ b a << b a >> b ~a (ngation bit ` bit) e a

ou exclusif binaire ^ dcalage gauche << e dcalage droit >> e complment ` 1 ~ e a

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les instructions en algorithmique et en C Priorits des oprateurs e e

Priorits des oprateurs arithmtiques e e e

Il est sage dutiliser la r`gle pratique suivante : e Niveau de priorit e 1 2 Oprateurs e * + arithmtiques e / -

Entourez tout le reste de parenth`ses ! e

Cours dAlgorithmique et de Langage C 2005 - v 3.0

Quatri`me partie IV e Les structures de contrle o

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Slection e

Notations de la slection simple e

Slection simple : notation algorithmique e Si (condition) bloc instructions FinSi Slection simple : notation C e
if(condition) bloc_instructions

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Slection e

Notations de la slection simple e

Slection simple : notation algorithmique e Si (condition) bloc instructions FinSi Slection simple : notation C e
if(condition) bloc_instructions

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Slection e

Notations de la slection compl`te e e


Slection compl`te : notation algorithmique e e Si (condition) bloc instructions Sinon bloc instructions FinSi Slection compl`te : notation C e e
if(condition) bloc_instructions else bloc_instructions

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Slection e

Notations de la slection compl`te e e


Slection compl`te : notation algorithmique e e Si (condition) bloc instructions Sinon bloc instructions FinSi Slection compl`te : notation C e e
if(condition) bloc_instructions else bloc_instructions

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Slection e

Slection compl`te : exemple algorithmique e e


DbutDclaration e e a 1.0, b 1.0, c 1.0 : ottant delta (b b) 4 (a c), r : ottant FinDclaration e Si (delta < 0) Acher(Pas de solution relle) e Sinon Si (delta == 0) Acher(une solution double : , b/(2 a)) Sinon r Racine(delta) Acher(deux solutions relles : , (b r )/(2 a), e et , (b + r )/(2 a)) FinSi FinSi

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Slection e

Slection compl`te : exemple C e e


#include <iostream> using namespace std; // evite dcrire "std::cout" e #include <math.h> int main(void) { double a = 1.0, b = -1.0, c = -1.0, delta = (b*b)-4.0*(a*c), r; if(delta < 0) cout << "Pas de solutions reelles"; else if(delta == 0) cout << "Une solution double : " << (-b/(2.0*a)); else { r = sqrt(delta); cout << "Deux solutions reelles : " << ((-b-r)/(2.0*a)) << " et " << ((-b+r)/(2.0*a)) << endl << endl; } system("PAUSE"); return 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle Faire .. TantQue

Notations de la boucle Faire .. TantQue

Boucle Faire .. TantQue : notation algorithmique Faire bloc instructions TantQue(condition) Boucle Faire .. TantQue : notation C
do bloc_instructions while(condition);

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle Faire .. TantQue

Notations de la boucle Faire .. TantQue

Boucle Faire .. TantQue : notation algorithmique Faire bloc instructions TantQue(condition) Boucle Faire .. TantQue : notation C
do bloc_instructions while(condition);

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle Faire .. TantQue

Faire .. TantQue : exemples algorithmiques

Faire exemple 1 de saisie ltre e Acher(Entrez un entier < 4 : ) Saisir(n) TantQue(n 4)

Faire exemple 2 de saisie ltre e Acher(Entrez un entier [4..9] : ) Saisir(n) TantQue((n < 4)OU(n > 9))

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle Faire .. TantQue

Faire .. TantQue : exemples C

do // Exemple 1 de saisie filtree { cout << "Entrez un entier < 4 : "; cin >> n; } while(n >= 4);

do // Exemple 2 de saisie filtree { cout << "Entrez un entier [4 .. 9] : "; cin >> n; } while((n < 4) || (n > 9));

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle TantQue .. FinTantQue

Notation de la boucle TantQue .. FinTantQue

Boucle TantQue .. FinTantQue TantQue (condition) bloc instructions FinTantQue Boucle Faire .. TantQue : notation C
while(condition) bloc_instructions

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle TantQue .. FinTantQue

Notation de la boucle TantQue .. FinTantQue

Boucle TantQue .. FinTantQue TantQue (condition) bloc instructions FinTantQue Boucle Faire .. TantQue : notation C
while(condition) bloc_instructions

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle TantQue .. FinTantQue

TantQue .. FinTantQue : exemple algorithmique


DbutProgramme e DbutDclaration e e n 32 : entier cpt 0 : entier FinDclaration e TantQue (n%2 == 0) n n/2 cpt cpt + 1 FinTantQue Acher(32 est , cpt, fois divisible par 2.) FinProgramme

entier ` tester a compteur de divisions par 2 de n

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle TantQue .. FinTantQue

TantQue .. FinTantQue : exemple C


#include <iostream> using namespace std; int main(void) { int n = 32, cpt = 0; while((n % 2) == 0) { n = n / 2; cpt = cpt + 1; } cout << "32 est " << cpt << " fois divisible par 2." << endl; cout << endl; system("PAUSE"); return 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle Pour .. FinPour

Notation de la boucle Pour .. FinPour


Boucle Pour .. FinPour : notation algorithmique Pour cpt Dans [a..b] ParPasDe n bloc instructions FinPour Boucle Pour .. FinPour : notation C
for(expression_1; expression_2; expression_3) bloc_instructions

O` expression 1 initialise la variable de contrle, expression 2 u o donne la condition de rebouclage et expression 3 incrmente la e variable de contrle en n de bloc instructions. o

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle Pour .. FinPour

Notation de la boucle Pour .. FinPour


Boucle Pour .. FinPour : notation algorithmique Pour cpt Dans [a..b] ParPasDe n bloc instructions FinPour Boucle Pour .. FinPour : notation C
for(expression_1; expression_2; expression_3) bloc_instructions

O` expression 1 initialise la variable de contrle, expression 2 u o donne la condition de rebouclage et expression 3 incrmente la e variable de contrle en n de bloc instructions. o

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle Pour .. FinPour

Pour .. FinPour : exemple algorithmique

DbutProgramme e Calcul de factorielle 5 DbutDclaration e e n 5, fact 1, cpt : entier FinDclaration e Pour cpt Dans [1..n] ParPasDe 1 fact fact*cpt FinPour Acher(5 ! = , fact) FinProgramme

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Boucle Pour .. FinPour

Pour .. FinPour : exemple C

#include <iostream> using namespace std; int main(void) { long n = 5, fact = 1; for(long cpt = 1; cpt <= n; cpt = cpt + 1) { fact = fact * cpt; } cout << n << "! = " << fact << endl << endl; system("PAUSE"); return 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Ruptures de boucle

Les instructions C de ruptures de boucle

Le langage C ore deux instructions : break provoque la n prmature de la boucle while, do ou e e for qui contient directement le break ; continue provoque le rebouclage immdiat, comme si on e venait dexcuter la derni`re instruction du corps de la boucle. e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Ruptures de boucle

Les instructions C de ruptures de boucle

Le langage C ore deux instructions : break provoque la n prmature de la boucle while, do ou e e for qui contient directement le break ; continue provoque le rebouclage immdiat, comme si on e venait dexcuter la derni`re instruction du corps de la boucle. e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Ruptures de boucle

Les instructions C de ruptures de boucle

Le langage C ore deux instructions : break provoque la n prmature de la boucle while, do ou e e for qui contient directement le break ; continue provoque le rebouclage immdiat, comme si on e venait dexcuter la derni`re instruction du corps de la boucle. e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Ruptures de boucle

break : exemple C

for(int i = 0; i < n; i = i + 1) { for(int j = 0; j < m; j = j + 1) { if(a[j] == x) { break; // sort du second for } } if(b[i] == x) { break; // sort du premier for } }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les structures en algorithmique et en C Ruptures de boucle

continue : exemple C

while(x < 2) { x = f(x); if(g(x) > x) { continue; // boucle directement sur while } x = h(x); }

Cours dAlgorithmique et de Langage C 2005 - v 3.0

Cinqui`me partie V e Les fonctions en algorithmique et en C

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Caractristiques e

Caractristiques des fonctions e

Une fonction ne modie pas la valeurs de ses arguments en entre ; e elle se termine par une instruction de retour qui rend un rsultat et un seul ; e on lutilise toujours dans une expression (aectation, achage. . . ).

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Caractristiques e

Caractristiques des fonctions e

Une fonction ne modie pas la valeurs de ses arguments en entre ; e elle se termine par une instruction de retour qui rend un rsultat et un seul ; e on lutilise toujours dans une expression (aectation, achage. . . ).

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Caractristiques e

Caractristiques des fonctions e

Une fonction ne modie pas la valeurs de ses arguments en entre ; e elle se termine par une instruction de retour qui rend un rsultat et un seul ; e on lutilise toujours dans une expression (aectation, achage. . . ).

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Notation

Notation algorithmique
Lcriture dune fonction requiert un en-tte et un corps : e e len-tte comprend : DbutFonction, le nom de la fonction, e e une liste darguments entre parenth`ses, puis le type de la e fonction. Les arguments sont spars par une virgule et sont e e nots e nom arg : type arg ; le corps se termine par FinFonction prcd dune e e e instruction de retour dune expression de mme type que la e fonction. Exemple : DbutFonction Doubler( x : ottant) : ottant e Retourner (2 x) FinFonction

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Notation

Notation algorithmique
Lcriture dune fonction requiert un en-tte et un corps : e e len-tte comprend : DbutFonction, le nom de la fonction, e e une liste darguments entre parenth`ses, puis le type de la e fonction. Les arguments sont spars par une virgule et sont e e nots e nom arg : type arg ; le corps se termine par FinFonction prcd dune e e e instruction de retour dune expression de mme type que la e fonction. Exemple : DbutFonction Doubler( x : ottant) : ottant e Retourner (2 x) FinFonction

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Notation

Notation algorithmique
Lcriture dune fonction requiert un en-tte et un corps : e e len-tte comprend : DbutFonction, le nom de la fonction, e e une liste darguments entre parenth`ses, puis le type de la e fonction. Les arguments sont spars par une virgule et sont e e nots e nom arg : type arg ; le corps se termine par FinFonction prcd dune e e e instruction de retour dune expression de mme type que la e fonction. Exemple : DbutFonction Doubler( x : ottant) : ottant e Retourner (2 x) FinFonction

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Notation

Notation C 1/2
Lcriture dune fonction requiert un en-tte et un corps : e e len-tte comprend : le type de retour, le nom de la fonction e suivit dune liste darguments entre parenth`ses. Les e arguments sont spars par une virgule et sont nots : e e e type arg nom arg, type arg nom arg, ... le corps est un bloc dinstructions prcd dune instruction de e e e retour dune expression de mme type que la fonction. e Exemple :
float Doubler(float x) { return 2.0*x; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Notation

Notation C 1/2
Lcriture dune fonction requiert un en-tte et un corps : e e len-tte comprend : le type de retour, le nom de la fonction e suivit dune liste darguments entre parenth`ses. Les e arguments sont spars par une virgule et sont nots : e e e type arg nom arg, type arg nom arg, ... le corps est un bloc dinstructions prcd dune instruction de e e e retour dune expression de mme type que la fonction. e Exemple :
float Doubler(float x) { return 2.0*x; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Notation

Notation C 1/2
Lcriture dune fonction requiert un en-tte et un corps : e e len-tte comprend : le type de retour, le nom de la fonction e suivit dune liste darguments entre parenth`ses. Les e arguments sont spars par une virgule et sont nots : e e e type arg nom arg, type arg nom arg, ... le corps est un bloc dinstructions prcd dune instruction de e e e retour dune expression de mme type que la fonction. e Exemple :
float Doubler(float x) { return 2.0*x; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Notation

Notation C 2/2

Une fonction poss`de trois aspects : e le prototype : cest la dclaration ncessaire avant tout ; e e lappel : cest lutilisation dune fonction ` lintrieur dune a e autre fonction (par exemple le programme principal) ; la dnition : cest lcriture proprement dite de la fonction, e e en-tte et corps. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Notation

Notation C 2/2

Une fonction poss`de trois aspects : e le prototype : cest la dclaration ncessaire avant tout ; e e lappel : cest lutilisation dune fonction ` lintrieur dune a e autre fonction (par exemple le programme principal) ; la dnition : cest lcriture proprement dite de la fonction, e e en-tte et corps. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Notation

Notation C 2/2

Une fonction poss`de trois aspects : e le prototype : cest la dclaration ncessaire avant tout ; e e lappel : cest lutilisation dune fonction ` lintrieur dune a e autre fonction (par exemple le programme principal) ; la dnition : cest lcriture proprement dite de la fonction, e e en-tte et corps. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Notation

Notation C 2/2

Une fonction poss`de trois aspects : e le prototype : cest la dclaration ncessaire avant tout ; e e lappel : cest lutilisation dune fonction ` lintrieur dune a e autre fonction (par exemple le programme principal) ; la dnition : cest lcriture proprement dite de la fonction, e e en-tte et corps. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Le passage des arguments

Le passage des arguments en C 1/2


Entre la fonction appelante et la dnition appele se pose le e e probl`me de la communication des arguments. On distingue trois e modes : le passage par valeur pour les arguments en entre : une copie e est cre, aecte de la valeur. Lappel ne modie pas la ee e valeur du param`tre ; e le passage par rfrence pour les arguments en entre/sortie : ee e le compilateur travaille sur un alias du param`tre. La valeur e du param`tre est change par la fonction ; e e le passage par adresse, implicitement utilis par les tableaux, e sera tudi dans le chapitre ddi aux pointeurs. e e e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Le passage des arguments

Le passage des arguments en C 1/2


Entre la fonction appelante et la dnition appele se pose le e e probl`me de la communication des arguments. On distingue trois e modes : le passage par valeur pour les arguments en entre : une copie e est cre, aecte de la valeur. Lappel ne modie pas la ee e valeur du param`tre ; e le passage par rfrence pour les arguments en entre/sortie : ee e le compilateur travaille sur un alias du param`tre. La valeur e du param`tre est change par la fonction ; e e le passage par adresse, implicitement utilis par les tableaux, e sera tudi dans le chapitre ddi aux pointeurs. e e e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Le passage des arguments

Le passage des arguments en C 1/2


Entre la fonction appelante et la dnition appele se pose le e e probl`me de la communication des arguments. On distingue trois e modes : le passage par valeur pour les arguments en entre : une copie e est cre, aecte de la valeur. Lappel ne modie pas la ee e valeur du param`tre ; e le passage par rfrence pour les arguments en entre/sortie : ee e le compilateur travaille sur un alias du param`tre. La valeur e du param`tre est change par la fonction ; e e le passage par adresse, implicitement utilis par les tableaux, e sera tudi dans le chapitre ddi aux pointeurs. e e e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Le passage des arguments

Le passage des arguments en C 1/2


Entre la fonction appelante et la dnition appele se pose le e e probl`me de la communication des arguments. On distingue trois e modes : le passage par valeur pour les arguments en entre : une copie e est cre, aecte de la valeur. Lappel ne modie pas la ee e valeur du param`tre ; e le passage par rfrence pour les arguments en entre/sortie : ee e le compilateur travaille sur un alias du param`tre. La valeur e du param`tre est change par la fonction ; e e le passage par adresse, implicitement utilis par les tableaux, e sera tudi dans le chapitre ddi aux pointeurs. e e e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Le passage des arguments

Le passage des arguments en C 2/2


Exemple :
int F_ParValeur(int x) { x = ... // x ne change pas dans lappelant } int F_ParReference(int &y) { y = ... // y change dans lappelant } int F_ParAdresse(int t[]) { t[1] = ... // t[1] change dans lappelant }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Rcursivit e e

Notion de rcursivit 1/2 e e

Dnition e Une fonction rcursive peut sappeler elle-mme. e e Cest le cas des fonctions mathmatiques dnies par rcurrence : e e e n! 1 si n = 0 n (n 1)! si n 1

Bien que cette mthode soit souvent plus dicile ` comprendre et e a ` coder que la mthode classique dite itrative, elle est dans a e e certains cas lapplication la plus directe de sa dnition e mathmatique. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Rcursivit e e

Notion de rcursivit 1/2 e e

Dnition e Une fonction rcursive peut sappeler elle-mme. e e Cest le cas des fonctions mathmatiques dnies par rcurrence : e e e n! 1 si n = 0 n (n 1)! si n 1

Bien que cette mthode soit souvent plus dicile ` comprendre et e a ` coder que la mthode classique dite itrative, elle est dans a e e certains cas lapplication la plus directe de sa dnition e mathmatique. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Rcursivit e e

Notion de rcursivit 1/2 e e

Dnition e Une fonction rcursive peut sappeler elle-mme. e e Cest le cas des fonctions mathmatiques dnies par rcurrence : e e e n! 1 si n = 0 n (n 1)! si n 1

Bien que cette mthode soit souvent plus dicile ` comprendre et e a ` coder que la mthode classique dite itrative, elle est dans a e e certains cas lapplication la plus directe de sa dnition e mathmatique. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les fonctions Rcursivit e e

Notion de rcursivit : calcul de n! 2/2 e e


DbutFonction Factorielle( n : entier) : entier e Si (n == 0) Retourner 1 Sinon Retourner (n Factorielle(n 1)) FinSi FinFonction
long Factorielle(long n) { if(n == 0) return 1; else return n*Factorielle(n-1); }

Cours dAlgorithmique et de Langage C 2005 - v 3.0

Sixi`me partie VI e Pointeurs, tableaux et procdures e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Procdures e

Les procdures 1/2 e

Gnralisant la notion de fonction, les procdures permettent e e e de modier la valeur de plusieurs de leurs arguments ; Notation algorithmique proche de celle des fonctions, sauf :
DbutProcdure . . . FinProcdure e e e pas de type de retour (donc pas dinstruction Retourner) les arguments peuvent encore tre en entre () non modis, e e e mais peuvent aussi tre modis en tant soit en sortie () e e e soit en entre/sortie () e

Leur appel constitue ` lui seul une instruction. a

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Procdures e

Les procdures 1/2 e

Gnralisant la notion de fonction, les procdures permettent e e e de modier la valeur de plusieurs de leurs arguments ; Notation algorithmique proche de celle des fonctions, sauf :
DbutProcdure . . . FinProcdure e e e pas de type de retour (donc pas dinstruction Retourner) les arguments peuvent encore tre en entre () non modis, e e e mais peuvent aussi tre modis en tant soit en sortie () e e e soit en entre/sortie () e

Leur appel constitue ` lui seul une instruction. a

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Procdures e

Les procdures 1/2 e

Gnralisant la notion de fonction, les procdures permettent e e e de modier la valeur de plusieurs de leurs arguments ; Notation algorithmique proche de celle des fonctions, sauf :
DbutProcdure . . . FinProcdure e e e pas de type de retour (donc pas dinstruction Retourner) les arguments peuvent encore tre en entre () non modis, e e e mais peuvent aussi tre modis en tant soit en sortie () e e e soit en entre/sortie () e

Leur appel constitue ` lui seul une instruction. a

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Procdures e

Les procdures : change de deux entiers 2/2 e e


DbutProcedure Echanger(a : entier, b : entier) e DbutDclaration e e temp a : entier variable temporaire FinDclaration e ab b temp FinProcedure
void Echanger(int &a, int &b) // passage par reference { int temp = a; // variable temporaire a = b; b = temp; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Procdures e

Les procdures : change de deux entiers 2/2 e e


DbutProcedure Echanger(a : entier, b : entier) e DbutDclaration e e temp a : entier variable temporaire FinDclaration e ab b temp FinProcedure
void Echanger(int &a, int &b) // passage par reference { int temp = a; // variable temporaire a = b; b = temp; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Pointeurs

Dnition des pointeurs e

Dnition e Cest une variable qui contient ladresse dune autre variable. Un objet dont la valeur est une adresse doctet est donc un pointeur. Un pointeur est typ (pointeur dint, de double, de e char. . . ). Il existe un pointeur particulier, NULL, qui est dni dans e <stddef.h>

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Pointeurs

Dnition des pointeurs e

Dnition e Cest une variable qui contient ladresse dune autre variable. Un objet dont la valeur est une adresse doctet est donc un pointeur. Un pointeur est typ (pointeur dint, de double, de e char. . . ). Il existe un pointeur particulier, NULL, qui est dni dans e <stddef.h>

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Pointeurs

Dnition des pointeurs e

Dnition e Cest une variable qui contient ladresse dune autre variable. Un objet dont la valeur est une adresse doctet est donc un pointeur. Un pointeur est typ (pointeur dint, de double, de e char. . . ). Il existe un pointeur particulier, NULL, qui est dni dans e <stddef.h>

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Pointeurs

Dnition des pointeurs e

Dnition e Cest une variable qui contient ladresse dune autre variable. Un objet dont la valeur est une adresse doctet est donc un pointeur. Un pointeur est typ (pointeur dint, de double, de e char. . . ). Il existe un pointeur particulier, NULL, qui est dni dans e <stddef.h>

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Pointeurs

Notations et dclaration e

Le C introduit deux oprateurs sur les pointeurs : e loprateur & qui dsigne ladresse dune variable ; e e loprateur * qui donne la valeur de lobjet point. e e Dclaration et manipulation : e int *p ; // p : pointeur dint (cest une adresse) int x = 3 ; // x est un int qui vaut 3 p = &x ; // p pointe vers ladresse de x cout << *p ; // affiche 3

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Pointeurs

Notations et dclaration e

Le C introduit deux oprateurs sur les pointeurs : e loprateur & qui dsigne ladresse dune variable ; e e loprateur * qui donne la valeur de lobjet point. e e Dclaration et manipulation : e int *p ; // p : pointeur dint (cest une adresse) int x = 3 ; // x est un int qui vaut 3 p = &x ; // p pointe vers ladresse de x cout << *p ; // affiche 3

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Pointeurs

Notations et dclaration e

Le C introduit deux oprateurs sur les pointeurs : e loprateur & qui dsigne ladresse dune variable ; e e loprateur * qui donne la valeur de lobjet point. e e Dclaration et manipulation : e int *p ; // p : pointeur dint (cest une adresse) int x = 3 ; // x est un int qui vaut 3 p = &x ; // p pointe vers ladresse de x cout << *p ; // affiche 3

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Passage des arguments par adresse

Procdures et passage des arguments par adresse e


Le mcanisme est le mme que pour le passage par rfrence (la e e ee procdure change la valeur du param`tre), mais les notations sont e e direntes : e
void RAZ(int *a); // prototype de la procedure int main(void) { int i = 15; RAZ(&i); // apres lappel, i vaut 0 return 0; } void RAZ(int *a) // definition, passage par adresse { *a = 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Passage des arguments par adresse

Procdures et passage des arguments par adresse e


Le mcanisme est le mme que pour le passage par rfrence (la e e ee procdure change la valeur du param`tre), mais les notations sont e e direntes : e
void RAZ(int *a); // prototype de la procedure int main(void) { int i = 15; RAZ(&i); // apres lappel, i vaut 0 return 0; } void RAZ(int *a) // definition, passage par adresse { *a = 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Relation avec les tableaux

Relations entre pointeurs et tableaux


Les pointeurs et les tableaux sont tr`s lis en C : e e int tab[N], *ptab ; Ecrire ptab = &tab[0] ; signie que ptab pointe sur ladresse de la premi`re case de tab. Ce qui scrit plus simplement : e e ptab = tab ; Passage des tableaux en arguments : appel : f(tab) ; // on passe bien une adresse prototype (et dnition sans le ;), deux formes : e
int f(int tab[]) ; // aspect tableau int f(int *tab) ; // aspect pointeur

Lutilisation des pointeurs ` la place des tableaux implique une a gestion de la mmoire (cf Allocation programme en annexe). e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Relation avec les tableaux

Relations entre pointeurs et tableaux


Les pointeurs et les tableaux sont tr`s lis en C : e e int tab[N], *ptab ; Ecrire ptab = &tab[0] ; signie que ptab pointe sur ladresse de la premi`re case de tab. Ce qui scrit plus simplement : e e ptab = tab ; Passage des tableaux en arguments : appel : f(tab) ; // on passe bien une adresse prototype (et dnition sans le ;), deux formes : e
int f(int tab[]) ; // aspect tableau int f(int *tab) ; // aspect pointeur

Lutilisation des pointeurs ` la place des tableaux implique une a gestion de la mmoire (cf Allocation programme en annexe). e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Relation avec les tableaux

Relations entre pointeurs et tableaux


Les pointeurs et les tableaux sont tr`s lis en C : e e int tab[N], *ptab ; Ecrire ptab = &tab[0] ; signie que ptab pointe sur ladresse de la premi`re case de tab. Ce qui scrit plus simplement : e e ptab = tab ; Passage des tableaux en arguments : appel : f(tab) ; // on passe bien une adresse prototype (et dnition sans le ;), deux formes : e
int f(int tab[]) ; // aspect tableau int f(int *tab) ; // aspect pointeur

Lutilisation des pointeurs ` la place des tableaux implique une a gestion de la mmoire (cf Allocation programme en annexe). e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Les pointeurs, tableaux et procdures e Relation avec les tableaux

Relations entre pointeurs et tableaux


Les pointeurs et les tableaux sont tr`s lis en C : e e int tab[N], *ptab ; Ecrire ptab = &tab[0] ; signie que ptab pointe sur ladresse de la premi`re case de tab. Ce qui scrit plus simplement : e e ptab = tab ; Passage des tableaux en arguments : appel : f(tab) ; // on passe bien une adresse prototype (et dnition sans le ;), deux formes : e
int f(int tab[]) ; // aspect tableau int f(int *tab) ; // aspect pointeur

Lutilisation des pointeurs ` la place des tableaux implique une a gestion de la mmoire (cf Allocation programme en annexe). e e

Cours dAlgorithmique et de Langage C 2005 - v 3.0

Septi`me partie VII e Aspects avancs du langage C e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Entres/Sorties sur chiers e

Les entres/sorties sur chiers ASCII 1/2 e

En C, un chier ASCII est gr par un tampon dentre-sortie ee e e appel un ux de type FILE*. En dclarant : FILE *fic ; la e biblioth`que standard (en-tte <stdio.h>) permet : e e louverture du ux : fic = fopen(nomFichier, mode) ; o` mode est w (criture) ou r (lecture) ; u e lcriture dans le ux : fprintf(fic, "format", vars) ; e la saisie depuis le ux : fscanf(fic, "format", vars) ; la fermeture du ux : fclose(fic) ; (Voir les formats en annexe.)

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Entres/Sorties sur chiers e

Les entres/sorties sur chiers ASCII 1/2 e

En C, un chier ASCII est gr par un tampon dentre-sortie ee e e appel un ux de type FILE*. En dclarant : FILE *fic ; la e biblioth`que standard (en-tte <stdio.h>) permet : e e louverture du ux : fic = fopen(nomFichier, mode) ; o` mode est w (criture) ou r (lecture) ; u e lcriture dans le ux : fprintf(fic, "format", vars) ; e la saisie depuis le ux : fscanf(fic, "format", vars) ; la fermeture du ux : fclose(fic) ; (Voir les formats en annexe.)

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Entres/Sorties sur chiers e

Les entres/sorties sur chiers ASCII 1/2 e

En C, un chier ASCII est gr par un tampon dentre-sortie ee e e appel un ux de type FILE*. En dclarant : FILE *fic ; la e biblioth`que standard (en-tte <stdio.h>) permet : e e louverture du ux : fic = fopen(nomFichier, mode) ; o` mode est w (criture) ou r (lecture) ; u e lcriture dans le ux : fprintf(fic, "format", vars) ; e la saisie depuis le ux : fscanf(fic, "format", vars) ; la fermeture du ux : fclose(fic) ; (Voir les formats en annexe.)

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Entres/Sorties sur chiers e

Les entres/sorties sur chiers ASCII 1/2 e

En C, un chier ASCII est gr par un tampon dentre-sortie ee e e appel un ux de type FILE*. En dclarant : FILE *fic ; la e biblioth`que standard (en-tte <stdio.h>) permet : e e louverture du ux : fic = fopen(nomFichier, mode) ; o` mode est w (criture) ou r (lecture) ; u e lcriture dans le ux : fprintf(fic, "format", vars) ; e la saisie depuis le ux : fscanf(fic, "format", vars) ; la fermeture du ux : fclose(fic) ; (Voir les formats en annexe.)

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Entres/Sorties sur chiers e

Les entres/sorties sur chiers ASCII 1/2 e

En C, un chier ASCII est gr par un tampon dentre-sortie ee e e appel un ux de type FILE*. En dclarant : FILE *fic ; la e biblioth`que standard (en-tte <stdio.h>) permet : e e louverture du ux : fic = fopen(nomFichier, mode) ; o` mode est w (criture) ou r (lecture) ; u e lcriture dans le ux : fprintf(fic, "format", vars) ; e la saisie depuis le ux : fscanf(fic, "format", vars) ; la fermeture du ux : fclose(fic) ; (Voir les formats en annexe.)

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Entres/Sorties sur chiers e

Les entres/sorties sur chiers ASCII 2/2 e


#include <stdio.h> // pour la gestion des fichiers #include <stdlib.h> // dclarations e const int N = 100; FILE *fic; // dclaraion dun flux e double x[N], y[N]; // tableaux a lire char nomFichier[]= "..."; // nom du fichier // utilisation fic = fopen(nomFichier, "r"); // ouverture en lecture if(fic == NULL) // gestion derreur { fprintf(stderr, "ouverture impossible, on sort..."); exit(1); } for(int i = 0; i < N; i = i + 1) fscanf(fic, "%lf %lf", &x[i], &y[i]); // lecture fclose(fic); // fermeture du flux

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Cha nes de caract`res e

Les cha nes de caract`res e


En C, les cha nes de caract`res sont des tableaux de char : e char str[] = "truc" ;

Dans leur reprsentation interne, ils doivent tre termins par le e e e caract`re nul (valeur sentinelle) pour en dtecter la n. On parle de e e cha bien forme. ne e On les dclare soit comme un tableau de caract`res (qui est donc e e modiable), soit comme un pointeur de caract`res (cha littrale e ne e constante).

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Cha nes de caract`res e

Les cha nes de caract`res e


En C, les cha nes de caract`res sont des tableaux de char : e char str[] = "truc" ;

Dans leur reprsentation interne, ils doivent tre termins par le e e e caract`re nul (valeur sentinelle) pour en dtecter la n. On parle de e e cha bien forme. ne e On les dclare soit comme un tableau de caract`res (qui est donc e e modiable), soit comme un pointeur de caract`res (cha littrale e ne e constante).

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Cha nes de caract`res e

Les cha nes de caract`res e


En C, les cha nes de caract`res sont des tableaux de char : e char str[] = "truc" ;

Dans leur reprsentation interne, ils doivent tre termins par le e e e caract`re nul (valeur sentinelle) pour en dtecter la n. On parle de e e cha bien forme. ne e On les dclare soit comme un tableau de caract`res (qui est donc e e modiable), soit comme un pointeur de caract`res (cha littrale e ne e constante).

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Cha nes de caract`res e

Traitements sur les cha nes

Les fonctions de traitements de cha nes sont dnies dans len-tte e e <string.h>. Les principales sont : longueur : fonction strlen ; comparaison : fonction strcmp ; recopie : fonction strcpy ; concatnation : fonction strcat. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Cha nes de caract`res e

Traitements sur les cha nes

Les fonctions de traitements de cha nes sont dnies dans len-tte e e <string.h>. Les principales sont : longueur : fonction strlen ; comparaison : fonction strcmp ; recopie : fonction strcpy ; concatnation : fonction strcat. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Cha nes de caract`res e

Traitements sur les cha nes

Les fonctions de traitements de cha nes sont dnies dans len-tte e e <string.h>. Les principales sont : longueur : fonction strlen ; comparaison : fonction strcmp ; recopie : fonction strcpy ; concatnation : fonction strcat. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Cha nes de caract`res e

Traitements sur les cha nes

Les fonctions de traitements de cha nes sont dnies dans len-tte e e <string.h>. Les principales sont : longueur : fonction strlen ; comparaison : fonction strcmp ; recopie : fonction strcpy ; concatnation : fonction strcat. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Cha nes de caract`res e

Traitements sur les cha nes

Les fonctions de traitements de cha nes sont dnies dans len-tte e e <string.h>. Les principales sont : longueur : fonction strlen ; comparaison : fonction strcmp ; recopie : fonction strcpy ; concatnation : fonction strcat. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Cha nes de caract`res e

Exemple de traitements sur les cha nes


// fonction strcpy(), version tableaux de caracteres void strcpy(char s[], char t[]) { int i = 0; while((s[i] = t[i]) != \0) { i = i + 1; } }

// fonction strcpy(), version pointeurs de caracteres void strcpy(char *s, char *t) { while(*s++ = *t++) ; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Cha nes de caract`res e

Exemple de traitements sur les cha nes


// fonction strcpy(), version tableaux de caracteres void strcpy(char s[], char t[]) { int i = 0; while((s[i] = t[i]) != \0) { i = i + 1; } }

// fonction strcpy(), version pointeurs de caracteres void strcpy(char *s, char *t) { while(*s++ = *t++) ; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Structures

Les structures 1/2


Les structures font parties des types tiquets (enum, union, e e struct), les seuls que lon peut dnir en tant que nouveaux types. e Une structure permet de traiter un ensemble dinformations htrog`nes comme un tout. Exemple, ladresse sur une lettre : ee e
struct Adresse { char nom[20]; prenom[20]; unsigned short numeroRue; char rue[20]; unsigned int codePostal; char ville[20]; };

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Structures

Les structures 1/2


Les structures font parties des types tiquets (enum, union, e e struct), les seuls que lon peut dnir en tant que nouveaux types. e Une structure permet de traiter un ensemble dinformations htrog`nes comme un tout. Exemple, ladresse sur une lettre : ee e
struct Adresse { char nom[20]; prenom[20]; unsigned short numeroRue; char rue[20]; unsigned int codePostal; char ville[20]; };

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Structures

Les structures 1/2


Les structures font parties des types tiquets (enum, union, e e struct), les seuls que lon peut dnir en tant que nouveaux types. e Une structure permet de traiter un ensemble dinformations htrog`nes comme un tout. Exemple, ladresse sur une lettre : ee e
struct Adresse { char nom[20]; prenom[20]; unsigned short numeroRue; char rue[20]; unsigned int codePostal; char ville[20]; };

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Structures

Les structures 2/2

Exemple de dclaration et dutilisation de structure : e


// declaration struct Adresse monAdresse; // affectation strcpy(monAdresse.nom, "Perinet"); strcpy(monAdresse.prenom, "Francois"); monAdresse.numeroRue = 99; strcpy(monAdresse.rue, "avenue des Champs-Elysees"); monAdresse.codePostal = 75008; strcpy(monAdresse.ville, "Paris");

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Structures

Les structures 2/2

Exemple de dclaration et dutilisation de structure : e


// declaration struct Adresse monAdresse; // affectation strcpy(monAdresse.nom, "Perinet"); strcpy(monAdresse.prenom, "Francois"); monAdresse.numeroRue = 99; strcpy(monAdresse.rue, "avenue des Champs-Elysees"); monAdresse.codePostal = 75008; strcpy(monAdresse.ville, "Paris");

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Allocation programme e

Lallocation programme 1/2 e

Lorsquon utilise un tableau, on doit le dclarer en prcisant son e e type et sa taille. La taille est parfois inconnue a priori, on doit la grer ` lexcution. On parle dallocation programme ou de e a e e tableaux dynamiques. La biblioth`que standard C ore une fonction dallocation, malloc, e qui attend une taille doctets ` allouer et retourne un pointeur de a void (void *), et une fonction de dsallocation, free, qui reoit e c ladresse dune zone mmoire alloue par malloc (un pointeur) et e e la rend au syst`me dexploitation. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Allocation programme e

Lallocation programme 1/2 e

Lorsquon utilise un tableau, on doit le dclarer en prcisant son e e type et sa taille. La taille est parfois inconnue a priori, on doit la grer ` lexcution. On parle dallocation programme ou de e a e e tableaux dynamiques. La biblioth`que standard C ore une fonction dallocation, malloc, e qui attend une taille doctets ` allouer et retourne un pointeur de a void (void *), et une fonction de dsallocation, free, qui reoit e c ladresse dune zone mmoire alloue par malloc (un pointeur) et e e la rend au syst`me dexploitation. e

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Allocation programme e

Lallocation programme 2/2 e


#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char *str; // allocation programmee if ((str = (char *) malloc(10)) == NULL) { printf("pas assez de memoire !\n"); exit(1); // sortie en erreur } strcpy(str, "Bonjour"); printf("Message : %s\n", str); free(str); // libere la memoire return 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Arguments du main()

Les arguments de la ligne de commande


On peut passer deux arguments ` la fonction main() : a int argc nombre darguments de la ligne de commande ; char *argv[] contient les arguments, un par cha de ne caract`res. e
#include <iostream> using namespace std; int main(int argc, char *argv[]) { cout << "argc = " << argc << endl; for(int i = 0; i <= argc; i = i + 1) { cout << "argv[" << i << "] = " << argv[i] << endl; } return 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Arguments du main()

Les arguments de la ligne de commande


On peut passer deux arguments ` la fonction main() : a int argc nombre darguments de la ligne de commande ; char *argv[] contient les arguments, un par cha de ne caract`res. e
#include <iostream> using namespace std; int main(int argc, char *argv[]) { cout << "argc = " << argc << endl; for(int i = 0; i <= argc; i = i + 1) { cout << "argv[" << i << "] = " << argv[i] << endl; } return 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Quelques aspects avancs du langage C e Arguments du main()

Les arguments de la ligne de commande


On peut passer deux arguments ` la fonction main() : a int argc nombre darguments de la ligne de commande ; char *argv[] contient les arguments, un par cha de ne caract`res. e
#include <iostream> using namespace std; int main(int argc, char *argv[]) { cout << "argc = " << argc << endl; for(int i = 0; i <= argc; i = i + 1) { cout << "argv[" << i << "] = " << argv[i] << endl; } return 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Bibliographie

Pour aller plus loin. . .


Brian W. Kerningham et Denis Ritchie Le langage C Masson. Philippe Drix Langage C, norme ANSI. Vers une approche oriente objet e Masson. S.P. Harbisson et G.L. Steele Jr. Langage C, manuel de rfrence ee Masson. Peter Prinz et Ulla KirchPrinz C prcis et concis e OReilly.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Bibliographie

Pour aller plus loin. . .


Brian W. Kerningham et Denis Ritchie Le langage C Masson. Philippe Drix Langage C, norme ANSI. Vers une approche oriente objet e Masson. S.P. Harbisson et G.L. Steele Jr. Langage C, manuel de rfrence ee Masson. Peter Prinz et Ulla KirchPrinz C prcis et concis e OReilly.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Bibliographie

Pour aller plus loin. . .


Brian W. Kerningham et Denis Ritchie Le langage C Masson. Philippe Drix Langage C, norme ANSI. Vers une approche oriente objet e Masson. S.P. Harbisson et G.L. Steele Jr. Langage C, manuel de rfrence ee Masson. Peter Prinz et Ulla KirchPrinz C prcis et concis e OReilly.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Bibliographie

Pour aller plus loin. . .


Brian W. Kerningham et Denis Ritchie Le langage C Masson. Philippe Drix Langage C, norme ANSI. Vers une approche oriente objet e Masson. S.P. Harbisson et G.L. Steele Jr. Langage C, manuel de rfrence ee Masson. Peter Prinz et Ulla KirchPrinz C prcis et concis e OReilly.

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Annexes

Annexes

Les formats dentre-sortie e Un programme type en C

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Annexes Formats

Les principaux formats des familles printf et scanf

%d : int, %hd : short int, %ld : long int %u : unsigned int %o : conversion octale %x : conversion hxadcimale e e %c : char %s : char[] ou char* %f : float %lf : double

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Annexes Programme type

Exemple type dun programme C 1/4

Premi`re partie identication du programme : e


// TP747e2.c // Dennis Ritchie, 29/02/2013

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Annexes Programme type

Exemple type dun programme C 1/4

Premi`re partie identication du programme : e


// TP747e2.c // Dennis Ritchie, 29/02/2013

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Annexes Programme type

Exemple type dun programme C 2/4

Deuxi`me partie directives, nouveaux types, variables et prototypes e globaux :


#include <iostream> using namespace std; const int N = 25; typedef int TAB[N];

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Annexes Programme type

Exemple type dun programme C 2/4

Deuxi`me partie directives, nouveaux types, variables et prototypes e globaux :


#include <iostream> using namespace std; const int N = 25; typedef int TAB[N];

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Annexes Programme type

Exemple type dun programme C 3/4


Troisi`me partie programme principal : e
int main(void) { int iMin, tmp; TAB t; int IndiceDuMin(TAB, // tableau dentiers int); // taille du tableau srand(time(NULL)); for(int i = 0; i < N; i++) { t[i] = rand() % N; } iMin = IndiceDuMin(t, N); // appel de fonction cout << t[0] = " << t[0] << "\t t[iMin] = " << t[iMin]; tmp = t[0]; t[0] = t[iMin]; t[iMin] = tmp; cout << "\nt[0] = " << t[0] << "\t t[iMin] = " << t[iMin]; system("PAUSE"); return 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Annexes Programme type

Exemple type dun programme C 3/4


Troisi`me partie programme principal : e
int main(void) { int iMin, tmp; TAB t; int IndiceDuMin(TAB, // tableau dentiers int); // taille du tableau srand(time(NULL)); for(int i = 0; i < N; i++) { t[i] = rand() % N; } iMin = IndiceDuMin(t, N); // appel de fonction cout << t[0] = " << t[0] << "\t t[iMin] = " << t[iMin]; tmp = t[0]; t[0] = t[iMin]; t[iMin] = tmp; cout << "\nt[0] = " << t[0] << "\t t[iMin] = " << t[iMin]; system("PAUSE"); return 0; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Annexes Programme type

Exemple type dun programme C 4/4


Quatri`me partie dnitions des fonctions : e e
int IndiceDuMin(TAB t, int n) { int u = t[0], iMin = 0; for(int i = 1; i < n; i = i+1) { if(t[i] < u) { u = t[i]; iMin = i; } } return iMin; }

Cours dAlgorithmique et de Langage C 2005 - v 3.0 Annexes Programme type

Exemple type dun programme C 4/4


Quatri`me partie dnitions des fonctions : e e
int IndiceDuMin(TAB t, int n) { int u = t[0], iMin = 0; for(int i = 1; i < n; i = i+1) { if(t[i] < u) { u = t[i]; iMin = i; } } return iMin; }

Vous aimerez peut-être aussi