Vous êtes sur la page 1sur 395

Programmer en langage C: un outil pour physicien -

Introduction
Laurent de FORGES de PARNY
Cours Licence 3 Physique Nice 2010-2011
email: de.forges.de.parny.laurent@etu.unice.fr
Universit de Nice Sophia-Antipolis
Institut Non Linaire de Nice
Labo mixte CNRS + UNS
Environ 30 chercheurs + 10 tudiants en thse
Deux principaux domaines de recherches (en gros)
Physique non linaire (Optique, Hydrodynamique, BioPhysique, ...)
Physique quantique (Atomes froids, Systmes fortement corrls, ...)
Expriences, simulations et thorie
L. de FORGES de PARNY (INLN) sept. 2010 2 / 190
Ma thse: Etude des phases quantiques exotiques
dans les condensats de Bose-Einstein spin-1
On refroidit des atomes T 1 K
L. de FORGES de PARNY (INLN) sept. 2010 3 / 190
Atomes froids & rseaux optiques
Rseau optique : potentiel sinusodal
Particules piges sur les noeuds du rseau (minimum de lnergie) :
Etude numrique du systme (tude thorique, permet de motiver ou non
une manip ...)
L. de FORGES de PARNY (INLN) sept. 2010 4 / 190
Le numrique cest quoi ?
Numrique : langage compos de chiffres, code constitu de 0 et de 1
L. de FORGES de PARNY (INLN) sept. 2010 5 / 190
Le numrique cest quoi ?
Numrique : langage compos de chiffres, code constitu de 0 et de 1
Exemple :
feu numrique pour la circulation, command par un ordinateur
rouge = 00, orange = 01, vert =11
Il faut apprendre lordinateur et au feu parler ce code : programme
informatique (logiciel)
L. de FORGES de PARNY (INLN) sept. 2010 6 / 190
Le numrique cest quoi ?
Numrique : langage compos de chiffres, code constitu de 0 et de 1
Exemple :
feu numrique pour la circulation, command par un ordinateur
rouge = 00, orange = 01, vert =11
Il faut apprendre lordinateur et au feu parler ce code : programme
informatique (logiciel)
L. de FORGES de PARNY (INLN) sept. 2010 6 / 190
Le numrique cest quoi ?
Machines numriques : appareil photo, camescope, cran plat,
ordinateur ...
Exemple : 000000000100101100010101 = vert fonc
Analogique (signal continu) : contraire du numrique (signal
chantillonn)
Exemples analogiques : microphone, montre mcanique, ampremtre,
platine cassette ...
Numrique : moins raliste mais plus pratique !
L. de FORGES de PARNY (INLN) sept. 2010 7 / 190
Le numrique cest quoi ?
Machines numriques : appareil photo, camescope, cran plat,
ordinateur ...
Exemple : 000000000100101100010101 = vert fonc
Analogique (signal continu) : contraire du numrique (signal
chantillonn)
Exemples analogiques : microphone, montre mcanique, ampremtre,
platine cassette ...
Numrique : moins raliste mais plus pratique !
L. de FORGES de PARNY (INLN) sept. 2010 7 / 190
Le numrique cest quoi ?
Machines numriques : appareil photo, camescope, cran plat,
ordinateur ...
Exemple : 000000000100101100010101 = vert fonc
Analogique (signal continu) : contraire du numrique (signal
chantillonn)
Exemples analogiques : microphone, montre mcanique, ampremtre,
platine cassette ...
Numrique : moins raliste mais plus pratique !
L. de FORGES de PARNY (INLN) sept. 2010 7 / 190
Le numrique autour de nous ?
Ordinateur, appareil photo, camescope, tel. portable, wi, internet, TV,
horloge ...
Voiture, moto, avion, train, fuse, GPS (Global Positioning System) ...
Trac routier, cinma, mto, banque, scurit civile, armenent,
mdecine ...
Numeric is everywhere
L. de FORGES de PARNY (INLN) sept. 2010 8 / 190
Le numrique autour de nous ?
Ordinateur, appareil photo, camescope, tel. portable, wi, internet, TV,
horloge ...
Voiture, moto, avion, train, fuse, GPS (Global Positioning System) ...
Trac routier, cinma, mto, banque, scurit civile, armenent,
mdecine ...
Numeric is everywhere
L. de FORGES de PARNY (INLN) sept. 2010 8 / 190
Le numrique autour de nous ?
Ordinateur, appareil photo, camescope, tel. portable, wi, internet, TV,
horloge ...
Voiture, moto, avion, train, fuse, GPS (Global Positioning System) ...
Trac routier, cinma, mto, banque, scurit civile, armenent,
mdecine ...
Numeric is everywhere
L. de FORGES de PARNY (INLN) sept. 2010 8 / 190
Le monde sans numrique ?
L. de FORGES de PARNY (INLN) sept. 2010 9 / 190
Le monde sans numrique ?
L. de FORGES de PARNY (INLN) sept. 2010 10 / 190
Le numrique et la physique
Essais nuclaires franais
Dsert algrien : 1960 1966
1ere bombe atomique : "Gerboise" en 1960
4 essais ariens + 13 souterrains
1 catastrophe : fuite du nuage nuclaire
L. de FORGES de PARNY (INLN) sept. 2010 11 / 190
Le numrique et la physique
Essais nuclaires franais
Dsert algrien : 1960 1966
1ere bombe atomique : "Gerboise" en 1960
4 essais ariens + 13 souterrains
1 catastrophe : fuite du nuage nuclaire
L. de FORGES de PARNY (INLN) sept. 2010 11 / 190
Le numrique et la physique
Essais nuclaires franais
Dsert algrien : 1960 1966
1ere bombe atomique : "Gerboise" en 1960
4 essais ariens + 13 souterrains
1 catastrophe : fuite du nuage nuclaire
L. de FORGES de PARNY (INLN) sept. 2010 11 / 190
Le numrique et la physique
Essais nuclaires franais
Polynsie franaise : 1966 1996
193 tirs Mururoa et Fangatanga
affaissement de la couronne corallienne & contamination des sols
1 catastrophe : dispersion radioactive (cyclone Mururoa 1981)
1968 : 1ere bombe H (thermonuclaire) franaise Fangatanga
1992 : utiliser la simulation numrique ?
1992 1996 : 7 derniers essais nuclaires (Chirac) pour obtenir des
donnes physiques
arrt total le 26 sept. 1996 pour la France
consquences sanitaires : 76 000 personnes
L. de FORGES de PARNY (INLN) sept. 2010 12 / 190
Le numrique et la physique
Essais nuclaires franais
Polynsie franaise : 1966 1996
193 tirs Mururoa et Fangatanga
affaissement de la couronne corallienne & contamination des sols
1 catastrophe : dispersion radioactive (cyclone Mururoa 1981)
1968 : 1ere bombe H (thermonuclaire) franaise Fangatanga
1992 : utiliser la simulation numrique ?
1992 1996 : 7 derniers essais nuclaires (Chirac) pour obtenir des
donnes physiques
arrt total le 26 sept. 1996 pour la France
consquences sanitaires : 76 000 personnes
L. de FORGES de PARNY (INLN) sept. 2010 12 / 190
Le numrique et la physique
Essais nuclaires franais
Polynsie franaise : 1966 1996
193 tirs Mururoa et Fangatanga
affaissement de la couronne corallienne & contamination des sols
1 catastrophe : dispersion radioactive (cyclone Mururoa 1981)
1968 : 1ere bombe H (thermonuclaire) franaise Fangatanga
1992 : utiliser la simulation numrique ?
1992 1996 : 7 derniers essais nuclaires (Chirac) pour obtenir des
donnes physiques
arrt total le 26 sept. 1996 pour la France
consquences sanitaires : 76 000 personnes
L. de FORGES de PARNY (INLN) sept. 2010 12 / 190
Le numrique et la physique
Essais nuclaires franais
Polynsie franaise : 1966 1996
193 tirs Mururoa et Fangatanga
affaissement de la couronne corallienne & contamination des sols
1 catastrophe : dispersion radioactive (cyclone Mururoa 1981)
1968 : 1ere bombe H (thermonuclaire) franaise Fangatanga
1992 : utiliser la simulation numrique ?
1992 1996 : 7 derniers essais nuclaires (Chirac) pour obtenir des
donnes physiques
arrt total le 26 sept. 1996 pour la France
consquences sanitaires : 76 000 personnes
L. de FORGES de PARNY (INLN) sept. 2010 12 / 190
Le numrique et la physique
Essais nuclaires franais
Polynsie franaise : 1966 1996
193 tirs Mururoa et Fangatanga
affaissement de la couronne corallienne & contamination des sols
1 catastrophe : dispersion radioactive (cyclone Mururoa 1981)
1968 : 1ere bombe H (thermonuclaire) franaise Fangatanga
1992 : utiliser la simulation numrique ?
1992 1996 : 7 derniers essais nuclaires (Chirac) pour obtenir des
donnes physiques
arrt total le 26 sept. 1996 pour la France
consquences sanitaires : 76 000 personnes
L. de FORGES de PARNY (INLN) sept. 2010 12 / 190
Le numrique et la physique
Essais nuclaires franais
Polynsie franaise : 1966 1996
193 tirs Mururoa et Fangatanga
affaissement de la couronne corallienne & contamination des sols
1 catastrophe : dispersion radioactive (cyclone Mururoa 1981)
1968 : 1ere bombe H (thermonuclaire) franaise Fangatanga
1992 : utiliser la simulation numrique ?
1992 1996 : 7 derniers essais nuclaires (Chirac) pour obtenir des
donnes physiques
arrt total le 26 sept. 1996 pour la France
consquences sanitaires : 76 000 personnes
L. de FORGES de PARNY (INLN) sept. 2010 12 / 190
Le numrique et la physique
Essais nuclaires franais
Polynsie franaise : 1966 1996
193 tirs Mururoa et Fangatanga
affaissement de la couronne corallienne & contamination des sols
1 catastrophe : dispersion radioactive (cyclone Mururoa 1981)
1968 : 1ere bombe H (thermonuclaire) franaise Fangatanga
1992 : utiliser la simulation numrique ?
1992 1996 : 7 derniers essais nuclaires (Chirac) pour obtenir des
donnes physiques
arrt total le 26 sept. 1996 pour la France
consquences sanitaires : 76 000 personnes
L. de FORGES de PARNY (INLN) sept. 2010 12 / 190
Le numrique et la physique
Essais nuclaires franais
Polynsie franaise : 1966 1996
193 tirs Mururoa et Fangatanga
affaissement de la couronne corallienne & contamination des sols
1 catastrophe : dispersion radioactive (cyclone Mururoa 1981)
1968 : 1ere bombe H (thermonuclaire) franaise Fangatanga
1992 : utiliser la simulation numrique ?
1992 1996 : 7 derniers essais nuclaires (Chirac) pour obtenir des
donnes physiques
arrt total le 26 sept. 1996 pour la France
consquences sanitaires : 76 000 personnes
L. de FORGES de PARNY (INLN) sept. 2010 12 / 190
Le numrique et la physique
Apoge de la folie : "Tsar Bomba"
Nouvelle-Zemble, grand nord Russe : 31 oct. 1961
Bombe H la plus puissante tire : 57 Mgatonnes
2400 fois la bombe A dHiroshima
Onde de choc : 3 fois le tour de la Terre
Zone dtruite : quivalente Paris
Video : Tsar Bomba
L. de FORGES de PARNY (INLN) sept. 2010 13 / 190
Le numrique et la physique
Apoge de la folie : "Tsar Bomba"
Nouvelle-Zemble, grand nord Russe : 31 oct. 1961
Bombe H la plus puissante tire : 57 Mgatonnes
2400 fois la bombe A dHiroshima
Onde de choc : 3 fois le tour de la Terre
Zone dtruite : quivalente Paris
Video : Tsar Bomba
L. de FORGES de PARNY (INLN) sept. 2010 13 / 190
Le numrique et la physique
Apoge de la folie : "Tsar Bomba"
Nouvelle-Zemble, grand nord Russe : 31 oct. 1961
Bombe H la plus puissante tire : 57 Mgatonnes
2400 fois la bombe A dHiroshima
Onde de choc : 3 fois le tour de la Terre
Zone dtruite : quivalente Paris
Video : Tsar Bomba
L. de FORGES de PARNY (INLN) sept. 2010 13 / 190
Le numrique et la physique
Apoge de la folie : "Tsar Bomba"
Nouvelle-Zemble, grand nord Russe : 31 oct. 1961
Bombe H la plus puissante tire : 57 Mgatonnes
2400 fois la bombe A dHiroshima
Onde de choc : 3 fois le tour de la Terre
Zone dtruite : quivalente Paris
Video : Tsar Bomba
L. de FORGES de PARNY (INLN) sept. 2010 13 / 190
Le numrique et la physique
Programme de simulation nuclaire franais
Commisariat lEnergie Nuclaire (CEA)
simuler les tapes dune explosion thermonuclaire
validation des modles via les donnes des campagnes du Pacique
3 types de systmes :
AIRIX : Acclrateur Induction de Radiographie pour lImagerie X
Laser Mgajoule : 240 faisceaux lasers convergeant !
TERA : logiciels de calculs extrmement puissants, 5000 milliards
doprations / seconde. 2560 processeurs dans 60 m
2
L. de FORGES de PARNY (INLN) sept. 2010 14 / 190
Le numrique et la physique
Programme de simulation nuclaire franais
Commisariat lEnergie Nuclaire (CEA)
simuler les tapes dune explosion thermonuclaire
validation des modles via les donnes des campagnes du Pacique
3 types de systmes :
AIRIX : Acclrateur Induction de Radiographie pour lImagerie X
Laser Mgajoule : 240 faisceaux lasers convergeant !
TERA : logiciels de calculs extrmement puissants, 5000 milliards
doprations / seconde. 2560 processeurs dans 60 m
2
L. de FORGES de PARNY (INLN) sept. 2010 14 / 190
Le numrique et la physique
Programme de simulation nuclaire franais
Commisariat lEnergie Nuclaire (CEA)
simuler les tapes dune explosion thermonuclaire
validation des modles via les donnes des campagnes du Pacique
3 types de systmes :
AIRIX : Acclrateur Induction de Radiographie pour lImagerie X
Laser Mgajoule : 240 faisceaux lasers convergeant !
TERA : logiciels de calculs extrmement puissants, 5000 milliards
doprations / seconde. 2560 processeurs dans 60 m
2
L. de FORGES de PARNY (INLN) sept. 2010 14 / 190
Le numrique et la physique
Modlisation et conception
Mcanique : Radial Engine
Animation 3D :
Superstructures (7 mins 20)
Lord of the Rings (2 mins 08)
Diplodocus
Kung Fu Panda (59 mins, 1H04, 1H18)
Animations soumises aux lois de la Physique (sauf Lgolas !)
intgrer, rsoudre des quations ...
L. de FORGES de PARNY (INLN) sept. 2010 15 / 190
Le numrique et la physique
Modlisation et conception
Mcanique : Radial Engine
Animation 3D :
Superstructures (7 mins 20)
Lord of the Rings (2 mins 08)
Diplodocus
Kung Fu Panda (59 mins, 1H04, 1H18)
Animations soumises aux lois de la Physique (sauf Lgolas !)
intgrer, rsoudre des quations ...
L. de FORGES de PARNY (INLN) sept. 2010 15 / 190
Le numrique et la physique
Simulation numrique en L3 Physique
10h cours "rappel"
Blocs cours spciques + TP
Projet numrique en trinme
But du projet :
Etudier un problme de Physique difcilement soluble analytiquement
onde, mca, optique, thermo, hydro, astro ...
Exemples : sujets et programmes
Prsentation orale devant jury "trs svre"
L. de FORGES de PARNY (INLN) sept. 2010 16 / 190
Le numrique et la physique
Simulation numrique en L3 Physique
10h cours "rappel"
Blocs cours spciques + TP
Projet numrique en trinme
But du projet :
Etudier un problme de Physique difcilement soluble analytiquement
onde, mca, optique, thermo, hydro, astro ...
Exemples : sujets et programmes
Prsentation orale devant jury "trs svre"
L. de FORGES de PARNY (INLN) sept. 2010 16 / 190
Le numrique et la physique
Simulation numrique en L3 Physique
10h cours "rappel"
Blocs cours spciques + TP
Projet numrique en trinme
But du projet :
Etudier un problme de Physique difcilement soluble analytiquement
onde, mca, optique, thermo, hydro, astro ...
Exemples : sujets et programmes
Prsentation orale devant jury "trs svre"
L. de FORGES de PARNY (INLN) sept. 2010 16 / 190
Le numrique et la physique
Simulation numrique en L3 Physique
10h cours "rappel"
Blocs cours spciques + TP
Projet numrique en trinme
But du projet :
Etudier un problme de Physique difcilement soluble analytiquement
onde, mca, optique, thermo, hydro, astro ...
Exemples : sujets et programmes
Prsentation orale devant jury "trs svre"
L. de FORGES de PARNY (INLN) sept. 2010 16 / 190
Le numrique et la physique
Simulation numrique en L3 Physique
10h cours "rappel"
Blocs cours spciques + TP
Projet numrique en trinme
But du projet :
Etudier un problme de Physique difcilement soluble analytiquement
onde, mca, optique, thermo, hydro, astro ...
Exemples : sujets et programmes
Prsentation orale devant jury "trs svre"
L. de FORGES de PARNY (INLN) sept. 2010 16 / 190
Le numrique et la physique
Simulation numrique en L3 Physique
10h cours "rappel"
Blocs cours spciques + TP
Projet numrique en trinme
But du projet :
Etudier un problme de Physique difcilement soluble analytiquement
onde, mca, optique, thermo, hydro, astro ...
Exemples : sujets et programmes
Prsentation orale devant jury "trs svre"
L. de FORGES de PARNY (INLN) sept. 2010 16 / 190
Plan du cours
But : "RAPPEL" des bases du langage C
Quest-ce que le langage C ? Comment utiliser un programme ?
un premier programme, comment utiliser un compilateur
Concepts fondamentaux du langage C
dclarations et types des variables
Lecture et criture par un programme, manipuler des donnes
entres (scanf) et sorties (printf), oprations de base
Instructions et oprateurs logiques
fonctions itratives (for, while, do-while) et instructions conditionnelles
(if, if-else)
Stockage des donnes, fonctions C et fonctions mathmatiques
les tableaux, structurer un programme, fonctions sin, cos, sqrt ...
L. de FORGES de PARNY (INLN) sept. 2010 17 / 190
Plan du cours
But : "RAPPEL" des bases du langage C
Quest-ce que le langage C ? Comment utiliser un programme ?
un premier programme, comment utiliser un compilateur
Concepts fondamentaux du langage C
dclarations et types des variables
Lecture et criture par un programme, manipuler des donnes
entres (scanf) et sorties (printf), oprations de base
Instructions et oprateurs logiques
fonctions itratives (for, while, do-while) et instructions conditionnelles
(if, if-else)
Stockage des donnes, fonctions C et fonctions mathmatiques
les tableaux, structurer un programme, fonctions sin, cos, sqrt ...
L. de FORGES de PARNY (INLN) sept. 2010 17 / 190
Plan du cours
But : "RAPPEL" des bases du langage C
Quest-ce que le langage C ? Comment utiliser un programme ?
un premier programme, comment utiliser un compilateur
Concepts fondamentaux du langage C
dclarations et types des variables
Lecture et criture par un programme, manipuler des donnes
entres (scanf) et sorties (printf), oprations de base
Instructions et oprateurs logiques
fonctions itratives (for, while, do-while) et instructions conditionnelles
(if, if-else)
Stockage des donnes, fonctions C et fonctions mathmatiques
les tableaux, structurer un programme, fonctions sin, cos, sqrt ...
L. de FORGES de PARNY (INLN) sept. 2010 17 / 190
Plan du cours
But : "RAPPEL" des bases du langage C
Quest-ce que le langage C ? Comment utiliser un programme ?
un premier programme, comment utiliser un compilateur
Concepts fondamentaux du langage C
dclarations et types des variables
Lecture et criture par un programme, manipuler des donnes
entres (scanf) et sorties (printf), oprations de base
Instructions et oprateurs logiques
fonctions itratives (for, while, do-while) et instructions conditionnelles
(if, if-else)
Stockage des donnes, fonctions C et fonctions mathmatiques
les tableaux, structurer un programme, fonctions sin, cos, sqrt ...
L. de FORGES de PARNY (INLN) sept. 2010 17 / 190
Plan du cours
But : "RAPPEL" des bases du langage C
Quest-ce que le langage C ? Comment utiliser un programme ?
un premier programme, comment utiliser un compilateur
Concepts fondamentaux du langage C
dclarations et types des variables
Lecture et criture par un programme, manipuler des donnes
entres (scanf) et sorties (printf), oprations de base
Instructions et oprateurs logiques
fonctions itratives (for, while, do-while) et instructions conditionnelles
(if, if-else)
Stockage des donnes, fonctions C et fonctions mathmatiques
les tableaux, structurer un programme, fonctions sin, cos, sqrt ...
L. de FORGES de PARNY (INLN) sept. 2010 17 / 190
Le langage C ?
Pourquoi le langage C ?
un des langages de haut niveau les plus rpandus dans le monde
facile lire et comprendre, performant
abordable car proche de langlais
compilable sur tous les systmes UNIX (Mandriva, RedHat, Mac OS,
Ubuntu, Debian, Mandrake ...)
matrise du C : Perl, C++, Java ... facile apprendre
Mais ...
langage exigeant et explicite (permet dtre rigoureux)
... encore un langage apprendre !
L. de FORGES de PARNY (INLN) sept. 2010 18 / 190
Le langage C ?
Pourquoi le langage C ?
un des langages de haut niveau les plus rpandus dans le monde
facile lire et comprendre, performant
abordable car proche de langlais
compilable sur tous les systmes UNIX (Mandriva, RedHat, Mac OS,
Ubuntu, Debian, Mandrake ...)
matrise du C : Perl, C++, Java ... facile apprendre
Mais ...
langage exigeant et explicite (permet dtre rigoureux)
... encore un langage apprendre !
L. de FORGES de PARNY (INLN) sept. 2010 18 / 190
Le langage C ?
Pourquoi le langage C ?
un des langages de haut niveau les plus rpandus dans le monde
facile lire et comprendre, performant
abordable car proche de langlais
compilable sur tous les systmes UNIX (Mandriva, RedHat, Mac OS,
Ubuntu, Debian, Mandrake ...)
matrise du C : Perl, C++, Java ... facile apprendre
Mais ...
langage exigeant et explicite (permet dtre rigoureux)
... encore un langage apprendre !
L. de FORGES de PARNY (INLN) sept. 2010 18 / 190
Le langage C ?
Pourquoi le langage C ?
un des langages de haut niveau les plus rpandus dans le monde
facile lire et comprendre, performant
abordable car proche de langlais
compilable sur tous les systmes UNIX (Mandriva, RedHat, Mac OS,
Ubuntu, Debian, Mandrake ...)
matrise du C : Perl, C++, Java ... facile apprendre
Mais ...
langage exigeant et explicite (permet dtre rigoureux)
... encore un langage apprendre !
L. de FORGES de PARNY (INLN) sept. 2010 18 / 190
Le langage C ?
Pourquoi le langage C ?
un des langages de haut niveau les plus rpandus dans le monde
facile lire et comprendre, performant
abordable car proche de langlais
compilable sur tous les systmes UNIX (Mandriva, RedHat, Mac OS,
Ubuntu, Debian, Mandrake ...)
matrise du C : Perl, C++, Java ... facile apprendre
Mais ...
langage exigeant et explicite (permet dtre rigoureux)
... encore un langage apprendre !
L. de FORGES de PARNY (INLN) sept. 2010 18 / 190
Le langage C ?
Pourquoi le langage C ?
un des langages de haut niveau les plus rpandus dans le monde
facile lire et comprendre, performant
abordable car proche de langlais
compilable sur tous les systmes UNIX (Mandriva, RedHat, Mac OS,
Ubuntu, Debian, Mandrake ...)
matrise du C : Perl, C++, Java ... facile apprendre
Mais ...
langage exigeant et explicite (permet dtre rigoureux)
... encore un langage apprendre !
L. de FORGES de PARNY (INLN) sept. 2010 18 / 190
Le langage C ?
Pourquoi le langage C ?
un des langages de haut niveau les plus rpandus dans le monde
facile lire et comprendre, performant
abordable car proche de langlais
compilable sur tous les systmes UNIX (Mandriva, RedHat, Mac OS,
Ubuntu, Debian, Mandrake ...)
matrise du C : Perl, C++, Java ... facile apprendre
Mais ...
langage exigeant et explicite (permet dtre rigoureux)
... encore un langage apprendre !
L. de FORGES de PARNY (INLN) sept. 2010 18 / 190
Le langage C ?
Pourquoi le langage C ?
un des langages de haut niveau les plus rpandus dans le monde
facile lire et comprendre, performant
abordable car proche de langlais
compilable sur tous les systmes UNIX (Mandriva, RedHat, Mac OS,
Ubuntu, Debian, Mandrake ...)
matrise du C : Perl, C++, Java ... facile apprendre
Mais ...
langage exigeant et explicite (permet dtre rigoureux)
... encore un langage apprendre !
L. de FORGES de PARNY (INLN) sept. 2010 18 / 190
Le langage C ?
Pourquoi le langage C ?
un des langages de haut niveau les plus rpandus dans le monde
facile lire et comprendre, performant
abordable car proche de langlais
compilable sur tous les systmes UNIX (Mandriva, RedHat, Mac OS,
Ubuntu, Debian, Mandrake ...)
matrise du C : Perl, C++, Java ... facile apprendre
Mais ...
langage exigeant et explicite (permet dtre rigoureux)
... encore un langage apprendre !
L. de FORGES de PARNY (INLN) sept. 2010 18 / 190
Niveaux logiques des langages
L. de FORGES de PARNY (INLN) sept. 2010 19 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Pour utiliser ce programme il faut le compiler
traduction du code en langage machine (0 et 1)
Utiliser une console dans le rpertoire contenant le programme
gcc nom.du.programme
un chier excutable est cr : a.out (par dfaut)
pour excuter a.out : ./a.out
L. de FORGES de PARNY (INLN) sept. 2010 20 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Pour utiliser ce programme il faut le compiler
traduction du code en langage machine (0 et 1)
Utiliser une console dans le rpertoire contenant le programme
gcc nom.du.programme
un chier excutable est cr : a.out (par dfaut)
pour excuter a.out : ./a.out
L. de FORGES de PARNY (INLN) sept. 2010 20 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Pour utiliser ce programme il faut le compiler
traduction du code en langage machine (0 et 1)
Utiliser une console dans le rpertoire contenant le programme
gcc nom.du.programme
un chier excutable est cr : a.out (par dfaut)
pour excuter a.out : ./a.out
L. de FORGES de PARNY (INLN) sept. 2010 20 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Pour utiliser ce programme il faut le compiler
traduction du code en langage machine (0 et 1)
Utiliser une console dans le rpertoire contenant le programme
gcc nom.du.programme
un chier excutable est cr : a.out (par dfaut)
pour excuter a.out : ./a.out
L. de FORGES de PARNY (INLN) sept. 2010 20 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Pour utiliser ce programme il faut le compiler
traduction du code en langage machine (0 et 1)
Utiliser une console dans le rpertoire contenant le programme
gcc nom.du.programme
un chier excutable est cr : a.out (par dfaut)
pour excuter a.out : ./a.out
L. de FORGES de PARNY (INLN) sept. 2010 20 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Pour utiliser ce programme il faut le compiler
traduction du code en langage machine (0 et 1)
Utiliser une console dans le rpertoire contenant le programme
gcc nom.du.programme
un chier excutable est cr : a.out (par dfaut)
pour excuter a.out : ./a.out
L. de FORGES de PARNY (INLN) sept. 2010 20 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Que donne ce programme ???
il imprime dans la console : vive la physique
********************************* explications *********************************
L. de FORGES de PARNY (INLN) sept. 2010 21 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Que donne ce programme ???
il imprime dans la console : vive la physique
********************************* explications *********************************
L. de FORGES de PARNY (INLN) sept. 2010 21 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Que donne ce programme ???
il imprime dans la console : vive la physique
********************************* explications *********************************
L. de FORGES de PARNY (INLN) sept. 2010 21 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Que donne ce programme ???
il imprime dans la console : vive la physique
********************************* explications *********************************
La ligne 1 contient un commentaire : // commentaire
le compilateur ne traite pas cette ligne (voir progs. 1, 2 et 3)
L. de FORGES de PARNY (INLN) sept. 2010 22 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Que donne ce programme ???
il imprime dans la console : vive la physique
********************************* explications *********************************
La ligne 1 contient un commentaire : // commentaire
le compilateur ne traite pas cette ligne (voir progs. 1, 2 et 3)
L. de FORGES de PARNY (INLN) sept. 2010 22 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Ligne 2 :
#include : directive, ordre au prprocesseur (va chercher ...)
< ... > : indication, va hors du rpertoire actif
stdio.h (STanDard Input/Output Header): chier header (en-tte) de
la bibliothque standard du C, toujours ncessaire
Rq : on utilisera parfois dautres chiers en-tte (math.h, sdtlib.h, ..)
L. de FORGES de PARNY (INLN) sept. 2010 23 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Ligne 2 :
#include : directive, ordre au prprocesseur (va chercher ...)
< ... > : indication, va hors du rpertoire actif
stdio.h (STanDard Input/Output Header): chier header (en-tte) de
la bibliothque standard du C, toujours ncessaire
Rq : on utilisera parfois dautres chiers en-tte (math.h, sdtlib.h, ..)
L. de FORGES de PARNY (INLN) sept. 2010 23 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Ligne 2 :
#include : directive, ordre au prprocesseur (va chercher ...)
< ... > : indication, va hors du rpertoire actif
stdio.h (STanDard Input/Output Header): chier header (en-tte) de
la bibliothque standard du C, toujours ncessaire
Rq : on utilisera parfois dautres chiers en-tte (math.h, sdtlib.h, ..)
L. de FORGES de PARNY (INLN) sept. 2010 23 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Ligne 2 :
#include : directive, ordre au prprocesseur (va chercher ...)
< ... > : indication, va hors du rpertoire actif
stdio.h (STanDard Input/Output Header): chier header (en-tte) de
la bibliothque standard du C, toujours ncessaire
Rq : on utilisera parfois dautres chiers en-tte (math.h, sdtlib.h, ..)
L. de FORGES de PARNY (INLN) sept. 2010 23 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Lignes 3 7 :
main() : fonction principale du programme
n du programme C lorsque toutes les instructions de main() sont
traites
L. de FORGES de PARNY (INLN) sept. 2010 24 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Lignes 3 7 :
main() : fonction principale du programme
n du programme C lorsque toutes les instructions de main() sont
traites
L. de FORGES de PARNY (INLN) sept. 2010 24 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Lignes 3 7 :
main() : fonction principale du programme
n du programme C lorsque toutes les instructions de main() sont
traites
Ligne 5 :
instruction printf() : imprime le contenu des guillemets
\n : retour chariot, saut de ligne
L. de FORGES de PARNY (INLN) sept. 2010 25 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Lignes 3 7 :
main() : fonction principale du programme
n du programme C lorsque toutes les instructions de main() sont
traites
Ligne 5 :
instruction printf() : imprime le contenu des guillemets
\n : retour chariot, saut de ligne
L. de FORGES de PARNY (INLN) sept. 2010 25 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
Ligne 6 :
return 0 : main renvoie 0 si tout cest bien pass
L. de FORGES de PARNY (INLN) sept. 2010 26 / 190
Un programme lmentaire
dans un chier texte
1: // Premier exemple de programme simple
2: #include <stdio.h>
3: int main()
4: {
5: printf("vive la physique\n");
6: return 0;
7: }
En rouge : INDISPENSABLE dans tous vos programmes !
L. de FORGES de PARNY (INLN) sept. 2010 27 / 190
programme_part1_4.c
1: #include <stdio.h>
2: int main()
3: {
4: printf("\n \n");
5: printf("************************************************\n");
6: printf("** Laurent de FORGES **\n");
7: printf("** **\n");
8: printf("** Institut Non Lineaire de Nice **\n");
9: printf("** Universite de Nice Sophia-Antipolis **\n");
10: printf("************************************************\n");
11: printf("\n \n");
12: return 0;
13: }
Ce programme donne :
************************************************
** Laurent de FORGES **
** **
** Institut Non Lineaire de Nice **
** Universite de Nice Sophia-Antipolis **
************************************************
L. de FORGES de PARNY (INLN) sept. 2010 28 / 190
Questions-rponses parties1
A quoi servent les commentaires dans les programmes ?
documenter, indispensables dans les programmes complexes
Quel est le rle de la fonction main ?
elle dnit le dbut et la n du programme, en son absence, le
programme est inoprant
A quoi sert la directive #include ?
elle ordonne au prprocesseur de chercher des chiers et den
associer le contenu au chier .c
A quoi sert la compilation ?
lordinateur est incapable de comprendre directement un programme
C, il faut donc le compiler pour le transformer en chier excutable
Quel type de chier produit le compilateur ?
un chier excutable (a.out par dfaut)
L. de FORGES de PARNY (INLN) sept. 2010 29 / 190
Questions-rponses parties1
A quoi servent les commentaires dans les programmes ?
documenter, indispensables dans les programmes complexes
Quel est le rle de la fonction main ?
elle dnit le dbut et la n du programme, en son absence, le
programme est inoprant
A quoi sert la directive #include ?
elle ordonne au prprocesseur de chercher des chiers et den
associer le contenu au chier .c
A quoi sert la compilation ?
lordinateur est incapable de comprendre directement un programme
C, il faut donc le compiler pour le transformer en chier excutable
Quel type de chier produit le compilateur ?
un chier excutable (a.out par dfaut)
L. de FORGES de PARNY (INLN) sept. 2010 29 / 190
Questions-rponses parties1
A quoi servent les commentaires dans les programmes ?
documenter, indispensables dans les programmes complexes
Quel est le rle de la fonction main ?
elle dnit le dbut et la n du programme, en son absence, le
programme est inoprant
A quoi sert la directive #include ?
elle ordonne au prprocesseur de chercher des chiers et den
associer le contenu au chier .c
A quoi sert la compilation ?
lordinateur est incapable de comprendre directement un programme
C, il faut donc le compiler pour le transformer en chier excutable
Quel type de chier produit le compilateur ?
un chier excutable (a.out par dfaut)
L. de FORGES de PARNY (INLN) sept. 2010 29 / 190
Questions-rponses parties1
A quoi servent les commentaires dans les programmes ?
documenter, indispensables dans les programmes complexes
Quel est le rle de la fonction main ?
elle dnit le dbut et la n du programme, en son absence, le
programme est inoprant
A quoi sert la directive #include ?
elle ordonne au prprocesseur de chercher des chiers et den
associer le contenu au chier .c
A quoi sert la compilation ?
lordinateur est incapable de comprendre directement un programme
C, il faut donc le compiler pour le transformer en chier excutable
Quel type de chier produit le compilateur ?
un chier excutable (a.out par dfaut)
L. de FORGES de PARNY (INLN) sept. 2010 29 / 190
Questions-rponses parties1
A quoi servent les commentaires dans les programmes ?
documenter, indispensables dans les programmes complexes
Quel est le rle de la fonction main ?
elle dnit le dbut et la n du programme, en son absence, le
programme est inoprant
A quoi sert la directive #include ?
elle ordonne au prprocesseur de chercher des chiers et den
associer le contenu au chier .c
A quoi sert la compilation ?
lordinateur est incapable de comprendre directement un programme
C, il faut donc le compiler pour le transformer en chier excutable
Quel type de chier produit le compilateur ?
un chier excutable (a.out par dfaut)
L. de FORGES de PARNY (INLN) sept. 2010 29 / 190
Questions-rponses parties1
A quoi servent les commentaires dans les programmes ?
documenter, indispensables dans les programmes complexes
Quel est le rle de la fonction main ?
elle dnit le dbut et la n du programme, en son absence, le
programme est inoprant
A quoi sert la directive #include ?
elle ordonne au prprocesseur de chercher des chiers et den
associer le contenu au chier .c
A quoi sert la compilation ?
lordinateur est incapable de comprendre directement un programme
C, il faut donc le compiler pour le transformer en chier excutable
Quel type de chier produit le compilateur ?
un chier excutable (a.out par dfaut)
L. de FORGES de PARNY (INLN) sept. 2010 29 / 190
Questions-rponses parties1
A quoi servent les commentaires dans les programmes ?
documenter, indispensables dans les programmes complexes
Quel est le rle de la fonction main ?
elle dnit le dbut et la n du programme, en son absence, le
programme est inoprant
A quoi sert la directive #include ?
elle ordonne au prprocesseur de chercher des chiers et den
associer le contenu au chier .c
A quoi sert la compilation ?
lordinateur est incapable de comprendre directement un programme
C, il faut donc le compiler pour le transformer en chier excutable
Quel type de chier produit le compilateur ?
un chier excutable (a.out par dfaut)
L. de FORGES de PARNY (INLN) sept. 2010 29 / 190
Questions-rponses parties1
A quoi servent les commentaires dans les programmes ?
documenter, indispensables dans les programmes complexes
Quel est le rle de la fonction main ?
elle dnit le dbut et la n du programme, en son absence, le
programme est inoprant
A quoi sert la directive #include ?
elle ordonne au prprocesseur de chercher des chiers et den
associer le contenu au chier .c
A quoi sert la compilation ?
lordinateur est incapable de comprendre directement un programme
C, il faut donc le compiler pour le transformer en chier excutable
Quel type de chier produit le compilateur ?
un chier excutable (a.out par dfaut)
L. de FORGES de PARNY (INLN) sept. 2010 29 / 190
Questions-rponses parties1
A quoi servent les commentaires dans les programmes ?
documenter, indispensables dans les programmes complexes
Quel est le rle de la fonction main ?
elle dnit le dbut et la n du programme, en son absence, le
programme est inoprant
A quoi sert la directive #include ?
elle ordonne au prprocesseur de chercher des chiers et den
associer le contenu au chier .c
A quoi sert la compilation ?
lordinateur est incapable de comprendre directement un programme
C, il faut donc le compiler pour le transformer en chier excutable
Quel type de chier produit le compilateur ?
un chier excutable (a.out par dfaut)
L. de FORGES de PARNY (INLN) sept. 2010 29 / 190
Questions-rponses parties1
A quoi servent les commentaires dans les programmes ?
documenter, indispensables dans les programmes complexes
Quel est le rle de la fonction main ?
elle dnit le dbut et la n du programme, en son absence, le
programme est inoprant
A quoi sert la directive #include ?
elle ordonne au prprocesseur de chercher des chiers et den
associer le contenu au chier .c
A quoi sert la compilation ?
lordinateur est incapable de comprendre directement un programme
C, il faut donc le compiler pour le transformer en chier excutable
Quel type de chier produit le compilateur ?
un chier excutable (a.out par dfaut)
L. de FORGES de PARNY (INLN) sept. 2010 29 / 190
Concepts fondamentaux du langage C
Les variables en C
zones mmoires utilises pour rserver des donnes
diffrents types de donnes : nombres ou caractres alphabtiques
nombres : on distinguera les entiers de tous les autres (dcimaux)
Dclarer une variable (i) pour stocker un nombre entier : int i;
Dclarer une variable (x) pour stocker un nombre dcimale :
oat x; (stock sur 40 octets)
double x; (stock sur 80 octets) plus prcis !
Dclarer une variable (c) pour stocker un caractre : char c;
L. de FORGES de PARNY (INLN) sept. 2010 30 / 190
Concepts fondamentaux du langage C
Les variables en C
zones mmoires utilises pour rserver des donnes
diffrents types de donnes : nombres ou caractres alphabtiques
nombres : on distinguera les entiers de tous les autres (dcimaux)
Dclarer une variable (i) pour stocker un nombre entier : int i;
Dclarer une variable (x) pour stocker un nombre dcimale :
oat x; (stock sur 40 octets)
double x; (stock sur 80 octets) plus prcis !
Dclarer une variable (c) pour stocker un caractre : char c;
L. de FORGES de PARNY (INLN) sept. 2010 30 / 190
Concepts fondamentaux du langage C
Les variables en C
zones mmoires utilises pour rserver des donnes
diffrents types de donnes : nombres ou caractres alphabtiques
nombres : on distinguera les entiers de tous les autres (dcimaux)
Dclarer une variable (i) pour stocker un nombre entier : int i;
Dclarer une variable (x) pour stocker un nombre dcimale :
oat x; (stock sur 40 octets)
double x; (stock sur 80 octets) plus prcis !
Dclarer une variable (c) pour stocker un caractre : char c;
L. de FORGES de PARNY (INLN) sept. 2010 30 / 190
Concepts fondamentaux du langage C
Les variables en C
zones mmoires utilises pour rserver des donnes
diffrents types de donnes : nombres ou caractres alphabtiques
nombres : on distinguera les entiers de tous les autres (dcimaux)
Dclarer une variable (i) pour stocker un nombre entier : int i;
Dclarer une variable (x) pour stocker un nombre dcimale :
oat x; (stock sur 40 octets)
double x; (stock sur 80 octets) plus prcis !
Dclarer une variable (c) pour stocker un caractre : char c;
L. de FORGES de PARNY (INLN) sept. 2010 30 / 190
Concepts fondamentaux du langage C
Les variables en C
zones mmoires utilises pour rserver des donnes
diffrents types de donnes : nombres ou caractres alphabtiques
nombres : on distinguera les entiers de tous les autres (dcimaux)
Dclarer une variable (i) pour stocker un nombre entier : int i;
Dclarer une variable (x) pour stocker un nombre dcimale :
oat x; (stock sur 40 octets)
double x; (stock sur 80 octets) plus prcis !
Dclarer une variable (c) pour stocker un caractre : char c;
L. de FORGES de PARNY (INLN) sept. 2010 30 / 190
Concepts fondamentaux du langage C
Les variables en C
zones mmoires utilises pour rserver des donnes
diffrents types de donnes : nombres ou caractres alphabtiques
nombres : on distinguera les entiers de tous les autres (dcimaux)
Dclarer une variable (i) pour stocker un nombre entier : int i;
Dclarer une variable (x) pour stocker un nombre dcimale :
oat x; (stock sur 40 octets)
double x; (stock sur 80 octets) plus prcis !
Dclarer une variable (c) pour stocker un caractre : char c;
L. de FORGES de PARNY (INLN) sept. 2010 30 / 190
Concepts fondamentaux du langage C
Les variables en C
zones mmoires utilises pour rserver des donnes
diffrents types de donnes : nombres ou caractres alphabtiques
nombres : on distinguera les entiers de tous les autres (dcimaux)
Dclarer une variable (i) pour stocker un nombre entier : int i;
Dclarer une variable (x) pour stocker un nombre dcimale :
oat x; (stock sur 40 octets)
double x; (stock sur 80 octets) plus prcis !
Dclarer une variable (c) pour stocker un caractre : char c;
L. de FORGES de PARNY (INLN) sept. 2010 30 / 190
Concepts fondamentaux du langage C
Les variables en C
zones mmoires utilises pour rserver des donnes
diffrents types de donnes : nombres ou caractres alphabtiques
nombres : on distinguera les entiers de tous les autres (dcimaux)
Dclarer une variable (i) pour stocker un nombre entier : int i;
Dclarer une variable (x) pour stocker un nombre dcimale :
oat x; (stock sur 40 octets)
double x; (stock sur 80 octets) plus prcis !
Dclarer une variable (c) pour stocker un caractre : char c;
L. de FORGES de PARNY (INLN) sept. 2010 30 / 190
Les variables en C
programme_ part2_1.c
1: #include <stdio.h>
2: int main()
3: {
4: // declaration des variables
5: int i;
6: oat x;
7: double y;
8: char c;
9:
10: // affectations des variables
11: i=2;
12: x=4.2;
13: y=3.14159;
14: c=a;
15:
16: // impression des variables
17: printf("i vaut : %d\n",i);
18: printf("x vaut : %f\n",x);
19: printf("y vaut : %lf\n",y);
20: printf("c vaut : %c\n",c);
22: return 0;
23: }
L. de FORGES de PARNY (INLN) sept. 2010 31 / 190
Les variables en C
programme_part2_1.c (dans main)
4: // declaration des variables
5: int i;
6: oat x;
7: double y;
8: char c;
9:
10: // affectations des variables
11: i=2;
12: x=4.2;
13: y=3.14159;
14: c=a;
15:
16: // impression des variables
17: printf("i vaut : %d\n",i);
18: printf("x vaut : %f\n",x);
19: printf("y vaut : %lf\n",y);
20: printf("c vaut : %c\n",c);
Premier bloc : on dclare les variables
un entier (i), deux dcimaux (x,y) et un caractre (c)
L. de FORGES de PARNY (INLN) sept. 2010 32 / 190
Les variables en C
programme_part2_1.c (dans main)
4: // declaration des variables
5: int i;
6: oat x;
7: double y;
8: char c;
9:
10: // affectations des variables
11: i=2;
12: x=4.2;
13: y=3.14159;
14: c=a;
15:
16: // impression des variables
17: printf("i vaut : %d\n",i);
18: printf("x vaut : %f\n",x);
19: printf("y vaut : %lf\n",y);
20: printf("c vaut : %c\n",c);
Deuxime bloc : on donne des valeurs aux variables
attention : int=entier, oat et double=dcimaux, char=caractre
L. de FORGES de PARNY (INLN) sept. 2010 33 / 190
Les variables en C
programme_part2_1.c (dans main)
4: // declaration des variables
5: int i;
6: oat x;
7: double y;
8: char c;
9:
10: // affectations des variables
11: i=2;
12: x=4.2;
13: y=3.14159;
14: c=a;
15:
16: // impression des variables
17: printf("i vaut : %d\n",i);
18: printf("x vaut : %f\n",x);
19: printf("y vaut : %lf\n",y);
20: printf("c vaut : %c\n",c);
Troisime bloc : on imprime les valeurs des variables
on utilise linstruction printf();
L. de FORGES de PARNY (INLN) sept. 2010 34 / 190
Les variables en C
programme_part2_1.c (dans main)
4: // declaration des variables
5: int i;
6: oat x;
7: double y;
8: char c;
9:
10: // affectations des variables
11: i=2;
12: x=4.2;
13: y=3.14159;
14: c=a;
15:
16: // impression des variables
17: printf("i vaut : %d\n" ,i);
18: printf("x vaut : %f\n",x);
19: printf("y vaut : %lf\n",y);
20: printf("c vaut : %c\n",c);
Troisime bloc : on imprime les valeurs des variables
entre parenthses : texte imprimer (dlimit par les guillemets)
L. de FORGES de PARNY (INLN) sept. 2010 35 / 190
Les variables en C
programme_part2_1.c (dans main)
4: // declaration des variables
5: int i;
6: oat x;
7: double y;
8: char c;
9:
10: // affectations des variables
11: i=2;
12: x=4.2;
13: y=3.14159;
14: c=a;
15:
16: // impression des variables
17: printf("i vaut : %d \n",i);
18: printf("x vaut : %f\n",x);
19: printf("y vaut : %lf\n",y);
20: printf("c vaut : %c\n",c);
Troisime bloc : on imprime les valeurs des variables
entre parenthses : indicateur du format de la variable (i)
L. de FORGES de PARNY (INLN) sept. 2010 36 / 190
Les variables en C
programme_part2_1.c (dans main)
4: // declaration des variables
5: int i;
6: oat x;
7: double y;
8: char c;
9:
10: // affectations des variables
11: i=2;
12: x=4.2;
13: y=3.14159;
14: c=a;
15:
16: // impression des variables
17: printf("i vaut : %d \n",i);
18: printf("x vaut : %f\n",x);
19: printf("y vaut : %lf\n",y);
20: printf("c vaut : %c\n",c);
Troisime bloc : on imprime les valeurs des variables
entre parenthses : retour chariot, on passe la ligne suivante
L. de FORGES de PARNY (INLN) sept. 2010 37 / 190
Les variables en C
programme_part2_1.c (dans main)
4: // declaration des variables
5: int i;
6: oat x;
7: double y;
8: char c;
9:
10: // affectations des variables
11: i=2;
12: x=4.2;
13: y=3.14159;
14: c=a;
15:
16: // impression des variables
17: printf("i vaut : %d\n",i);
18: printf("x vaut : %f\n",x);
19: printf("y vaut : %lf\n",y);
20: printf("c vaut : %c\n",c);
Troisime bloc : on imprime les valeurs des variables
entre parenthses : variable afcher l ou se trouve lindicateur (%d)
L. de FORGES de PARNY (INLN) sept. 2010 38 / 190
Les variables en C
Les indicateurs de formats
Caractre (char ) :
indicateur du format caractre : %c
Nombre entier (int) :
indicateur du format entier : %d (ou %i)
Nombre dcimale (oat) :
indicateur du format oat : %f
Nombre dcimale (double) :
indicateur du format double :%g (ou %lf)
L. de FORGES de PARNY (INLN) sept. 2010 39 / 190
Les variables en C
Les indicateurs de formats
Caractre (char ) :
indicateur du format caractre : %c
Nombre entier (int) :
indicateur du format entier : %d (ou %i)
Nombre dcimale (oat) :
indicateur du format oat : %f
Nombre dcimale (double) :
indicateur du format double :%g (ou %lf)
L. de FORGES de PARNY (INLN) sept. 2010 39 / 190
Les variables en C
Les indicateurs de formats
Caractre (char ) :
indicateur du format caractre : %c
Nombre entier (int) :
indicateur du format entier : %d (ou %i)
Nombre dcimale (oat) :
indicateur du format oat : %f
Nombre dcimale (double) :
indicateur du format double :%g (ou %lf)
L. de FORGES de PARNY (INLN) sept. 2010 39 / 190
Les variables en C
Les indicateurs de formats
Caractre (char ) :
indicateur du format caractre : %c
Nombre entier (int) :
indicateur du format entier : %d (ou %i)
Nombre dcimale (oat) :
indicateur du format oat : %f
Nombre dcimale (double) :
indicateur du format double :%g (ou %lf)
L. de FORGES de PARNY (INLN) sept. 2010 39 / 190
Les indicateurs de formats : attention erreurs !
programme_part2_2.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables
8: i=2, j=5;
9:
10: // impression des variables
11: printf("i vaut : %c\n",i);
12: printf("j/i vaut : %i\n",j/i);
13: printf("j/i vaut : %f\n",j/i);
Cherchez les erreurs ...
L. de FORGES de PARNY (INLN) sept. 2010 40 / 190
Les indicateurs de formats : attention erreurs !
programme_part2_2.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables
8: i=2, j=5;
9:
10: // impression des variables
11: printf("i vaut : %c\n",i);
12: printf("j/i vaut : %i\n",j/i);
13: printf("j/i vaut : %f\n",j/i);
Cherchez les erreurs ...
utilisation de lindicateur de format de caractre %c avec une variable
int : pas beau !
L. de FORGES de PARNY (INLN) sept. 2010 41 / 190
Les indicateurs de formats : attention erreurs !
programme_part2_2.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables
8: i=2, j=5;
9:
10: // impression des variables
11: printf("i vaut : %c\n",i);
12: printf("j/i vaut : %i\n",j/i);
13: printf("j/i vaut : %f\n",j/i);
Cherchez les erreurs ...
dlicat : %i appelle ici la division entire de 5/2, soit 2. Il faut faire
attention avec ce genre de subtilit !
L. de FORGES de PARNY (INLN) sept. 2010 42 / 190
Les indicateurs de formats : attention erreurs !
programme_part2_2.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables
8: i=2, j=5;
9:
10: // impression des variables
11: printf("i vaut : %c\n",i);
12: printf("j/i vaut : %i\n",j/i);
13: printf("j/i vaut : %f\n",j/i);
Cherchez les erreurs ...
j/i est considr comme un int car division de deux int. Utiliser %f va
donc donner nimporte quoi : trs sale !
L. de FORGES de PARNY (INLN) sept. 2010 43 / 190
Les indicateurs de formats : attention erreurs !
Une correction possible ...
programme_part2_2_corrige.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables
8: i=2, j=5;
9:
10: // impression des variables
11: printf("i vaut : %d\n",i);
12: printf("j/i vaut : %i\n",j/i);
13: printf("j/i vaut : %f\n",(oat) j/i);
L. de FORGES de PARNY (INLN) sept. 2010 44 / 190
Dclarer des constantes
Avant la fonction main()
Dclaration des constantes avec un type explicitement prcis :
pour les entiers : const int i=3;
sinon : const oat x=4.111;
Dclaration des constantes avec un type implicitement prcis :
#dene PI 3.141592
#dene N 10
rq : pas de point virgule la n avec #dene
voir : programme_part2_3.c
L. de FORGES de PARNY (INLN) sept. 2010 45 / 190
Dclarer des constantes
Avant la fonction main()
Dclaration des constantes avec un type explicitement prcis :
pour les entiers : const int i=3;
sinon : const oat x=4.111;
Dclaration des constantes avec un type implicitement prcis :
#dene PI 3.141592
#dene N 10
rq : pas de point virgule la n avec #dene
voir : programme_part2_3.c
L. de FORGES de PARNY (INLN) sept. 2010 45 / 190
Dclarer des constantes
Avant la fonction main()
Dclaration des constantes avec un type explicitement prcis :
pour les entiers : const int i=3;
sinon : const oat x=4.111;
Dclaration des constantes avec un type implicitement prcis :
#dene PI 3.141592
#dene N 10
rq : pas de point virgule la n avec #dene
voir : programme_part2_3.c
L. de FORGES de PARNY (INLN) sept. 2010 45 / 190
Dclarer des constantes
Avant la fonction main()
Dclaration des constantes avec un type explicitement prcis :
pour les entiers : const int i=3;
sinon : const oat x=4.111;
Dclaration des constantes avec un type implicitement prcis :
#dene PI 3.141592
#dene N 10
rq : pas de point virgule la n avec #dene
voir : programme_part2_3.c
L. de FORGES de PARNY (INLN) sept. 2010 45 / 190
Dclarer des constantes
Avant la fonction main()
Dclaration des constantes avec un type explicitement prcis :
pour les entiers : const int i=3;
sinon : const oat x=4.111;
Dclaration des constantes avec un type implicitement prcis :
#dene PI 3.141592
#dene N 10
rq : pas de point virgule la n avec #dene
voir : programme_part2_3.c
L. de FORGES de PARNY (INLN) sept. 2010 45 / 190
Dclarer des constantes
Avant la fonction main()
Dclaration des constantes avec un type explicitement prcis :
pour les entiers : const int i=3;
sinon : const oat x=4.111;
Dclaration des constantes avec un type implicitement prcis :
#dene PI 3.141592
#dene N 10
rq : pas de point virgule la n avec #dene
voir : programme_part2_3.c
L. de FORGES de PARNY (INLN) sept. 2010 45 / 190
Dclarer des constantes
Avant la fonction main()
Dclaration des constantes avec un type explicitement prcis :
pour les entiers : const int i=3;
sinon : const oat x=4.111;
Dclaration des constantes avec un type implicitement prcis :
#dene PI 3.141592
#dene N 10
rq : pas de point virgule la n avec #dene
voir : programme_part2_3.c
L. de FORGES de PARNY (INLN) sept. 2010 45 / 190
Dclarer des constantes
Avant la fonction main()
Dclaration des constantes avec un type explicitement prcis :
pour les entiers : const int i=3;
sinon : const oat x=4.111;
Dclaration des constantes avec un type implicitement prcis :
#dene PI 3.141592
#dene N 10
rq : pas de point virgule la n avec #dene
voir : programme_part2_3.c
L. de FORGES de PARNY (INLN) sept. 2010 45 / 190
Questions-rponses parties 2
Comment dclarer deux variables entires ?
int variable1, variable2;
ou
int variable1;
int variable2;
Que sont %c, %d et %f ?
indicateur de format, utiliss avec printf ... permet de traiter le format
caractre (%c), entier (%d) et dcimal (%f)
Les noms de variables suivants sont-ils valides ?
2eme_variable
positions_2
_rotation
Amplitude_1
L. de FORGES de PARNY (INLN) sept. 2010 46 / 190
Questions-rponses parties 2
Comment dclarer deux variables entires ?
int variable1, variable2;
ou
int variable1;
int variable2;
Que sont %c, %d et %f ?
indicateur de format, utiliss avec printf ... permet de traiter le format
caractre (%c), entier (%d) et dcimal (%f)
Les noms de variables suivants sont-ils valides ?
2eme_variable
positions_2
_rotation
Amplitude_1
L. de FORGES de PARNY (INLN) sept. 2010 46 / 190
Questions-rponses parties 2
Comment dclarer deux variables entires ?
int variable1, variable2;
ou
int variable1;
int variable2;
Que sont %c, %d et %f ?
indicateur de format, utiliss avec printf ... permet de traiter le format
caractre (%c), entier (%d) et dcimal (%f)
Les noms de variables suivants sont-ils valides ?
2eme_variable
positions_2
_rotation
Amplitude_1
L. de FORGES de PARNY (INLN) sept. 2010 46 / 190
Questions-rponses parties 2
Comment dclarer deux variables entires ?
int variable1, variable2;
ou
int variable1;
int variable2;
Que sont %c, %d et %f ?
indicateur de format, utiliss avec printf ... permet de traiter le format
caractre (%c), entier (%d) et dcimal (%f)
Les noms de variables suivants sont-ils valides ?
2eme_variable
positions_2
_rotation
Amplitude_1
L. de FORGES de PARNY (INLN) sept. 2010 46 / 190
Questions-rponses parties 2
Comment dclarer deux variables entires ?
int variable1, variable2;
ou
int variable1;
int variable2;
Que sont %c, %d et %f ?
indicateur de format, utiliss avec printf ... permet de traiter le format
caractre (%c), entier (%d) et dcimal (%f)
Les noms de variables suivants sont-ils valides ?
2eme_variable
positions_2
_rotation
Amplitude_1
L. de FORGES de PARNY (INLN) sept. 2010 46 / 190
Questions-rponses parties 2
Comment dclarer deux variables entires ?
int variable1, variable2;
ou
int variable1;
int variable2;
Que sont %c, %d et %f ?
indicateur de format, utiliss avec printf ... permet de traiter le format
caractre (%c), entier (%d) et dcimal (%f)
Les noms de variables suivants sont-ils valides ?
2eme_variable
positions_2
_rotation
Amplitude_1
L. de FORGES de PARNY (INLN) sept. 2010 46 / 190
Questions-rponses parties 2
Comment dclarer deux variables entires ?
int variable1, variable2;
ou
int variable1;
int variable2;
Que sont %c, %d et %f ?
indicateur de format, utiliss avec printf ... permet de traiter le format
caractre (%c), entier (%d) et dcimal (%f)
Les noms de variables suivants sont-ils valides ?
2eme_variable
positions_2
_rotation
Amplitude_1
L. de FORGES de PARNY (INLN) sept. 2010 46 / 190
Questions-rponses parties 2
Comment dclarer deux variables entires ?
int variable1, variable2;
ou
int variable1;
int variable2;
Que sont %c, %d et %f ?
indicateur de format, utiliss avec printf ... permet de traiter le format
caractre (%c), entier (%d) et dcimal (%f)
Les noms de variables suivants sont-ils valides ?
2eme_variable pas valide !
positions_2 pas valide !
_rotation valide
Amplitude_1 valide
L. de FORGES de PARNY (INLN) sept. 2010 47 / 190
Entres-sorties, manipuler des donnes
Comment entrer dans la console deux nombres et faire des oprations avec ?
Pour les entres : fonction scanf();
Pour les sorties : fonction printf();
programme_part3_1.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables via la console
8: printf("Entrez deux nombres entiers i et j:\n");
9: scanf("%d%d",&i,&j);
10:
11: // impression des variables
12: printf("i+j=%d\n",i+j);
13: printf("i-j=%d\n",i-j);
14: printf("i*j=%d\n",i*j);
15: printf("i/j=%f\n",(oat)i/j);
L. de FORGES de PARNY (INLN) sept. 2010 48 / 190
Entres-sorties, manipuler des donnes
Comment entrer dans la console deux nombres et faire des oprations avec ?
Pour les entres : fonction scanf();
Pour les sorties : fonction printf();
programme_part3_1.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables via la console
8: printf("Entrez deux nombres entiers i et j:\n");
9: scanf("%d%d",&i,&j);
10:
11: // impression des variables
12: printf("i+j=%d\n",i+j);
13: printf("i-j=%d\n",i-j);
14: printf("i*j=%d\n",i*j);
15: printf("i/j=%f\n",(oat)i/j);
L. de FORGES de PARNY (INLN) sept. 2010 48 / 190
Entres-sorties, manipuler des donnes
Comment entrer dans la console deux nombres et faire des oprations avec ?
Pour les entres : fonction scanf();
Pour les sorties : fonction printf();
programme_part3_1.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables via la console
8: printf("Entrez deux nombres entiers i et j:\n");
9: scanf("%d%d",&i,&j);
10:
11: // impression des variables
12: printf("i+j=%d\n",i+j);
13: printf("i-j=%d\n",i-j);
14: printf("i*j=%d\n",i*j);
15: printf("i/j=%f\n",(oat)i/j);
L. de FORGES de PARNY (INLN) sept. 2010 48 / 190
Entres-sorties, manipuler des donnes
Comment entrer dans la console deux nombres et faire des oprations avec ?
Pour les entres : fonction scanf();
Pour les sorties : fonction printf();
programme_part3_1.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables via la console
8: printf("Entrez deux nombres entiers i et j:\n");
9: scanf("%d%d",&i,&j);
10:
11: // impression des variables
12: printf("i+j=%d\n",i+j);
13: printf("i-j=%d\n",i-j);
14: printf("i*j=%d\n",i*j);
15: printf("i/j=%f\n",(oat)i/j);
L. de FORGES de PARNY (INLN) sept. 2010 48 / 190
Entres-sorties, manipuler des donnes
programme_part3_1.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables via la console
8: printf("Entrez deux nombres entiers i et j:\n");
9: scanf("%d%d",&i,&j);
scanf() permet daffecter une valeur une (ou plusieurs) variable(s)
L. de FORGES de PARNY (INLN) sept. 2010 49 / 190
Entres-sorties, manipuler des donnes
programme_part3_1.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables via la console
8: printf("Entrez deux nombres entiers i et j:\n");
9: scanf("%d%d",&i,&j);
scanf() permet daffecter une valeur une (ou plusieurs) variable(s)
entre guillemets : type de format des variables (sans virgule)
L. de FORGES de PARNY (INLN) sept. 2010 50 / 190
Entres-sorties, manipuler des donnes
programme_part3_1.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables via la console
8: printf("Entrez deux nombres entiers i et j:\n");
9: scanf("%d%d",&i,&j);
scanf() permet daffecter une valeur une (ou plusieurs) variable(s)
entre guillemets : type de format des variables (sans virgule)
aprs la virgule : noms des variables (&: voir pointeurs)
L. de FORGES de PARNY (INLN) sept. 2010 51 / 190
Entres-sorties, manipuler des donnes
Que se passe t-il si lon entre un nombre dcimale dans la console ???
programme_part3_1.c (dans main)
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables via la console
8: printf("Entrez deux nombres entiers i et j:\n");
9: scanf("%d%d",&i,&j);
10:
11: // impression des variables
12: printf("i+j=%d\n",i+j);
13: printf("i-j=%d\n",i-j);
14: printf("i*j=%d\n",i*j);
15: printf("i/j=%f\n",(oat)i/j);
L. de FORGES de PARNY (INLN) sept. 2010 52 / 190
Entres-sorties, manipuler des donnes
Plus fun !!!
programme_part3_2.c
1: #include <stdio.h>
2: int main()
3: {
4: // declaration des variables
5: int i, j;
6:
7: // affectations des variables via la console
8: printf("Entre ton jour et moi de naissance :\n");
9: scanf("%d%d",&i,&j);
10:
11: // impression des variables
12: printf("Il te reste %d jours a vivre !\n",i*j);
13: printf("PROFITE UN MAX DE TA VIE !!!\n");
14:
15: return 0;
16: }
L. de FORGES de PARNY (INLN) sept. 2010 53 / 190
Entres-sorties, manipuler des donnes
Encore plus fort
Pour lire dans un chier : fonction fscanf();
Pour crire dans un chier : fonction fprintf();
L. de FORGES de PARNY (INLN) sept. 2010 54 / 190
Entres-sorties, manipuler des donnes
Encore plus fort
Pour lire dans un chier : fonction fscanf();
Pour crire dans un chier : fonction fprintf();
L. de FORGES de PARNY (INLN) sept. 2010 54 / 190
Entres-sorties, manipuler des donnes
Encore plus fort
Pour lire dans un chier : fonction fscanf();
Pour crire dans un chier : fonction fprintf();
L. de FORGES de PARNY (INLN) sept. 2010 54 / 190
Entres-sorties, manipuler des donnes
Pour lire dans le chier mesdonnees_input.txt avec la fonction fscanf()
fonction scanf (dans main)
1: FILE *le1; // declaration d un pointeur de type FILE
2:
3: double x, y, z; // declaration des variables (decimales)
4:
5: // pour ouvrir le chier existant mesdonnees_input.txt
6: le1=fopen("mesdonnees_input.txt","r");
7:
8: // pour affecter le contenu du chier aux variables
9: fscanf(le1,"%lf%lf%lf",&x,&y,&z);
10:
11: // il faut refermer le chier lu
12: fclose(le1);
L. de FORGES de PARNY (INLN) sept. 2010 55 / 190
Entres-sorties, manipuler des donnes
fonction scanf (dans main)
1: FILE *le1; // declaration d un pointeur de type FILE
2:
3: double x, y, z; // declaration des variables (decimales)
4:
5: // pour ouvrir le chier existant mesdonnees_input.txt
6: le1=fopen("mesdonnees_input.txt","r");
7:
8: // pour affecter le contenu du chier aux variables
9: fscanf(le1,"%lf%lf%lf",&x,&y,&z);
10:
11: // il faut refermer le chier lu
12: fclose(le1);
FILE : structure de contrle, *le1: pointeur de type FILE
L. de FORGES de PARNY (INLN) sept. 2010 56 / 190
Entres-sorties, manipuler des donnes
fonction scanf (dans main)
1: FILE *le1; // declaration d un pointeur de type FILE
2:
3: double x, y, z; // declaration des variables (decimales)
4:
5: // pour ouvrir le chier existant mesdonnees_input.txt
6: le1=fopen("mesdonnees_input.txt","r");
7:
8: // pour affecter le contenu du chier aux variables
9: fscanf(le1,"%lf%lf%lf",&x,&y,&z);
10:
11: // il faut refermer le chier lu
12: fclose(le1);
association du ux du chier au pointeur le1
L. de FORGES de PARNY (INLN) sept. 2010 57 / 190
Entres-sorties, manipuler des donnes
fonction scanf (dans main)
1: FILE *le1; // declaration d un pointeur de type FILE
2:
3: double x, y, z; // declaration des variables (decimales)
4:
5: // pour ouvrir le chier existant mesdonnees_input.txt
6: le1=fopen("mesdonnees_input.txt","r");
7:
8: // pour affecter le contenu du chier aux variables
9: fscanf(le1,"%lf%lf%lf",&x,&y,&z);
10:
11: // il faut refermer le chier lu
12: fclose(le1);
fopen : ouvre le chier mesdonnees_input.txt en mode lecture (r : read)
L. de FORGES de PARNY (INLN) sept. 2010 58 / 190
Entres-sorties, manipuler des donnes
fonction scanf (dans main)
1: FILE *le1; // declaration d un pointeur de type FILE
2:
3: double x, y, z; // declaration des variables (decimales)
4:
5: // pour ouvrir le chier existant mesdonnees_input.txt
6: le1=fopen("mesdonnees_input.txt","r");
7:
8: // pour affecter le contenu du chier aux variables
9: fscanf(le1,"%lf%lf%lf",&x,&y,&z);
10:
11: // il faut refermer le chier lu
12: fclose(le1);
le chier input est ouvert, scanf() affecte ce quon lit aux variables x, y et z
L. de FORGES de PARNY (INLN) sept. 2010 59 / 190
Entres-sorties, manipuler des donnes
fonction scanf (dans main)
1: FILE *le1; // declaration d un pointeur de type FILE
2:
3: double x, y, z; // declaration des variables (decimales)
4:
5: // pour ouvrir le chier existant mesdonnees_input.txt
6: le1=fopen("mesdonnees_input.txt","r");
7:
8: // pour affecter le contenu du chier aux variables
9: fscanf(le1,"%lf%lf%lf",&x,&y,&z);
10:
11: // il faut refermer le chier lu
12: fclose(le1);
fclose sauve les donnes dans un buffer, ferme le chier associ au ux (le1)
L. de FORGES de PARNY (INLN) sept. 2010 60 / 190
Entres-sorties, manipuler des donnes
Pour crire dans le chier mesdonnees_output.txt avec la fonction fprintf()
fonction fprintf (dans main)
1: FILE *le2; // declaration d un pointeur de type FILE
2:
3: double x=2.1, y=4.0, z=5.4; // declaration et affectation des variables (decimales)
4:
5: // pour creer le chier mesdonnees_output.txt
6: le2=fopen("mesdonnees_output.txt","w");
7:
8: // pour imprimer dans le chier mesdonnees_output.txt
9: fprintf(le2,"%lf %lf\n",x,y+z);
10:
11: // il faut refermer le chier cr
12: fclose(le2);
L. de FORGES de PARNY (INLN) sept. 2010 61 / 190
Entres-sorties, manipuler des donnes
fonction fprintf (dans main)
1: FILE *le2; // declaration d un pointeur de type FILE
2:
3: double x=2.1, y=4.0, z=5.4; // declaration et affectation des variables (decimales)
4:
5: // pour creer le chier mesdonnees_output.txt
6: le2=fopen("mesdonnees_output.txt","w");
7:
8: // pour imprimer dans le chier mesdonnees_output.txt
9: fprintf(le2,"%lf %lf\n",x,y+z);
10:
11: // il faut refermer le chier cr
12: fclose(le2);
fopen : cre le chier mesdonnees_output.txt avec loption criture (w : write)
L. de FORGES de PARNY (INLN) sept. 2010 62 / 190
Entres-sorties, manipuler des donnes
fonction fprintf (dans main)
1: FILE *le2; // declaration d un pointeur de type FILE
2:
3: double x=2.1, y=4.0, z=5.4; // declaration et affectation des variables (decimales)
4:
5: // pour creer le chier mesdonnees_output.txt
6: le2=fopen("mesdonnees_output.txt","w");
7:
8: // pour imprimer dans le chier mesdonnees_output.txt
9: fprintf(le2,"%lf %lf\n",x,y+z);
10:
11: // il faut refermer le chier cr
12: fclose(le2);
ici aussi, fclose sauve les donnes et ferme le chier associ au ux (le2)
L. de FORGES de PARNY (INLN) sept. 2010 63 / 190
Entres-sorties, manipuler des donnes
Lire dans un chier, manipuler les donnes et crire dans un autre chier !
programme_part3_3.c (dans main) avec mesdonnees_input.txt
1: FILE * le1;
2: FILE * le2;
3:
4: double x1, y1, z1;
5: double x2, y2, z2;
6:
7: le1=fopen("mesdonnees_input.txt","r");
8: le2=fopen("mesdonnees_output.txt","w");
9:
10: fscanf(le1,"%lf%lf%lf",&x1,&y1,&z1);
11: fscanf(le1,"%lf%lf%lf",&x2,&y2,&z2);
12:
13: fprintf(le2,"%lf %lf\n",x1,y1+z1);
14: fprintf(le2,"%lf %lf\n",x2,y2+z2);
15:
16: fclose(le1);
17: fclose(le2);
L. de FORGES de PARNY (INLN) sept. 2010 64 / 190
Entres-sorties, manipuler des donnes
En Physique (Licence 3)
On utilisera surtout printf et fprintf
On calculera des quantits que lon imprimera dans des chiers
Pour cela, on rptera des oprations grce aux instructions
L. de FORGES de PARNY (INLN) sept. 2010 65 / 190
Entres-sorties, manipuler des donnes
En Physique (Licence 3)
On utilisera surtout printf et fprintf
On calculera des quantits que lon imprimera dans des chiers
Pour cela, on rptera des oprations grce aux instructions
L. de FORGES de PARNY (INLN) sept. 2010 65 / 190
Entres-sorties, manipuler des donnes
En Physique (Licence 3)
On utilisera surtout printf et fprintf
On calculera des quantits que lon imprimera dans des chiers
Pour cela, on rptera des oprations grce aux instructions
L. de FORGES de PARNY (INLN) sept. 2010 65 / 190
Entres-sorties, manipuler des donnes
En Physique (Licence 3)
On utilisera surtout printf et fprintf
On calculera des quantits que lon imprimera dans des chiers
Pour cela, on rptera des oprations grce aux instructions
L. de FORGES de PARNY (INLN) sept. 2010 65 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Questions-rponses parties 3
A quoi servent les fonctions printf, fprintf, scanf et fscanf ?
printf permet dimprimer lcran (console)
fprintf permet dimprimer dans un chier texte
scanf permet de lire lcran (console)
fscanf permet de lire dans un chier texte
Jutilise fprintf et jomet fclose(le1); le programme peut-il tre compil ?
non car il faut fermer les ux entrants et/ou sortants
A quoi servent "r" et "w" dans programme_part3_gamma.c ?
"r" pour read et "w" pour write
Corrigez les erreurs :
fprintf("coucou\n"); fprintf( le1,"coucou\n");
scanf("%d",i) scanf("%d",&i);
fscanf(le1,"%d"); fscanf(le1,"%d",&i);
L. de FORGES de PARNY (INLN) sept. 2010 66 / 190
Instructions et oprateurs logiques
Traitements rptitifs : for, while et do-while
En Physique, il est trs souvent utile de rpter une opration
On va utiliser des boucles, des traitements rptitifs que le programme
rpte jusqu ce quune ou plusieurs conditions soient vries
Ex : tracer la fonction gaussienne f (x) =
1

2
2
e
x
2
2
2
sur lintervalle
x [5, +5] avec = 1
L. de FORGES de PARNY (INLN) sept. 2010 67 / 190
Instructions et oprateurs logiques
Traitements rptitifs : for, while et do-while
En Physique, il est trs souvent utile de rpter une opration
On va utiliser des boucles, des traitements rptitifs que le programme
rpte jusqu ce quune ou plusieurs conditions soient vries
Ex : tracer la fonction gaussienne f (x) =
1

2
2
e
x
2
2
2
sur lintervalle
x [5, +5] avec = 1
L. de FORGES de PARNY (INLN) sept. 2010 67 / 190
Instructions et oprateurs logiques
Traitements rptitifs : for, while et do-while
En Physique, il est trs souvent utile de rpter une opration
On va utiliser des boucles, des traitements rptitifs que le programme
rpte jusqu ce quune ou plusieurs conditions soient vries
Ex : tracer la fonction gaussienne f (x) =
1

2
2
e
x
2
2
2
sur lintervalle
x [5, +5] avec = 1
L. de FORGES de PARNY (INLN) sept. 2010 67 / 190
Instructions et oprateurs logiques
Traitements rptitifs : for, while et do-while
En Physique, il est trs souvent utile de rpter une opration
On va utiliser des boucles, des traitements rptitifs que le programme
rpte jusqu ce quune ou plusieurs conditions soient vries
Ex : tracer la fonction gaussienne f (x) =
1

2
2
e
x
2
2
2
sur lintervalle
x [5, +5] avec = 1
L. de FORGES de PARNY (INLN) sept. 2010 67 / 190
Instructions et oprateurs logiques
Tracer f (x) =
1

2
e
x
2
2
sur lintervalle x [5, +5]
programme_part4_1.c
1: #include <stdio.h>
2: #include <math.h> // on inclut les librairies pour utiliser sqrt et exp
3:
4: #dene PI 3.141592 // declaration de la constante PI
5:
6: int main()
7: {
8: ...
9: return 0;
10: }
Pour utiliser les fonctions mathmatiques en C, on inclut math.h
Pour compiler, on rajoute -lm : gcc chier.c -lm
L. de FORGES de PARNY (INLN) sept. 2010 68 / 190
Instructions et oprateurs logiques
Tracer f (x) =
1

2
e
x
2
2
sur lintervalle x [5, +5]
programme_part4_1.c
1: #include <stdio.h>
2: #include <math.h> // on inclut les librairies pour utiliser sqrt et exp
3:
4: #dene PI 3.141592 // declaration de la constante PI
5:
6: int main()
7: {
8: ...
9: return 0;
10: }
Pour utiliser les fonctions mathmatiques en C, on inclut math.h
Pour compiler, on rajoute -lm : gcc chier.c -lm
L. de FORGES de PARNY (INLN) sept. 2010 68 / 190
Instructions et oprateurs logiques
Tracer f (x) =
1

2
e
x
2
2
sur lintervalle x [5, +5]
programme_part4_1.c
1: #include <stdio.h>
2: #include <math.h> // on inclut les librairies pour utiliser sqrt et exp
3:
4: #dene PI 3.141592 // declaration de la constante PI
5:
6: int main()
7: {
8: ...
9: return 0;
10: }
Pour utiliser les fonctions mathmatiques en C, on inclut math.h
Pour compiler, on rajoute -lm : gcc chier.c -lm
L. de FORGES de PARNY (INLN) sept. 2010 68 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
Variables pour les bornes, la position et la norme de la gaussienne
L. de FORGES de PARNY (INLN) sept. 2010 69 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
La variable i va servir pour la boucle for
L. de FORGES de PARNY (INLN) sept. 2010 70 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
Nombrepoints est le nombre total de points que lon va calculer
L. de FORGES de PARNY (INLN) sept. 2010 71 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
On donne des valeurs aux variables
L. de FORGES de PARNY (INLN) sept. 2010 72 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
Boucle qui rpte son opration jusqu ce que i=Nombrepoints
L. de FORGES de PARNY (INLN) sept. 2010 73 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
i=0, opration, i=1, opration, i=2, opration, ... i=Nombrepoints, stop
L. de FORGES de PARNY (INLN) sept. 2010 74 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
Trois expressions dans le champ dexpression (.. ; .. ; ..)
L. de FORGES de PARNY (INLN) sept. 2010 75 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
i plus petit ou gal Nombrepoints
L. de FORGES de PARNY (INLN) sept. 2010 76 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
i++ : incrmente i dune unit chaque nouvelle excution
L. de FORGES de PARNY (INLN) sept. 2010 77 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
Au dbut de la boucle : i=0 x=xmin
L. de FORGES de PARNY (INLN) sept. 2010 78 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
A la n de la boucle : i= Nombrepoints x=xmax
L. de FORGES de PARNY (INLN) sept. 2010 79 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
A un instant quelconque : x= (xmax-xmin)/Nombrepoints
L. de FORGES de PARNY (INLN) sept. 2010 80 / 190
Instructions et oprateurs logiques
programme_part4_1.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8:
9: for(i=0;i<=Nombrepoints;i++)
10: {
11: x=xmin+i*(xmax-xmin)/Nombrepoints;
12: printf("%f %f\n",x,norm*exp(-x*x/2));
13: }
A chaque tape, on imprime x et f(x) dans la console
L. de FORGES de PARNY (INLN) sept. 2010 81 / 190
Instructions et oprateurs logiques
Il est plus pratique dimprimer x et f(x) dans un chier texte avec fprintf
programme_part4_2.c (dans main)
1: FILE * le;
2: le=fopen("gauss_ouput.txt","w");
3:
4: oat xmin, xmax, x, norm;
5: int i, Nombrepoints;
6:
7: xmin=-5;
8: xmax=5;
9: norm=1/sqrt(2*PI);
10: Nombrepoints=200;
11:
12: for(i=0;i<=Nombrepoints;i++)
13: {
14: x=xmin+i*(xmax-xmin)/Nombrepoints;
15: fprintf(le,"%f %f\n",x,norm*exp(-x*x/2));
16: }
17: fclose(le);
L. de FORGES de PARNY (INLN) sept. 2010 82 / 190
Instructions et oprateurs logiques
Pour aller un peu plus loin ...
On peut mme entrer dans la console la valeur de
Un peu plus technique mais bien pratique !
Voir : programme_part4_3.c
L. de FORGES de PARNY (INLN) sept. 2010 83 / 190
Instructions et oprateurs logiques
Pour aller un peu plus loin ...
On peut mme entrer dans la console la valeur de
Un peu plus technique mais bien pratique !
Voir : programme_part4_3.c
L. de FORGES de PARNY (INLN) sept. 2010 83 / 190
Instructions et oprateurs logiques
Pour aller un peu plus loin ...
On peut mme entrer dans la console la valeur de
Un peu plus technique mais bien pratique !
Voir : programme_part4_3.c
L. de FORGES de PARNY (INLN) sept. 2010 83 / 190
Instructions et oprateurs logiques
On peut utiliser while la place de for dans programme_part4_1.c
programme_part4_4.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8: i=0;
9:
10: while(i<=Nombrepoints)
11: {
12: x=xmin+i*(xmax-xmin)/Nombrepoints;
13: printf("%f %f\n",x,norm*exp(-x*x/2));
14: i = i+1;
15: }
L. de FORGES de PARNY (INLN) sept. 2010 84 / 190
Instructions et oprateurs logiques
programme_part4_4.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8: i=0;
9:
10: while(i<=Nombrepoints)
11: {
12: x=xmin+i*(xmax-xmin)/Nombrepoints;
13: printf("%f %f\n",x,norm*exp(-x*x/2));
14: i = i+1;
15: }
while = "as long as" en C = tant que
L. de FORGES de PARNY (INLN) sept. 2010 85 / 190
Instructions et oprateurs logiques
programme_part4_4.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8: i=0;
9:
10: while(i<=Nombrepoints)
11: {
12: x=xmin+i*(xmax-xmin)/Nombrepoints;
13: printf("%f %f\n",x,norm*exp(-x*x/2));
14: i = i+1;
15: }
Avantage ou dsavantage : une seule expression
L. de FORGES de PARNY (INLN) sept. 2010 86 / 190
Instructions et oprateurs logiques
Autre fonction utile : do-while
programme_part4_5.c (dans main)
1: oat xmin, xmax, x, norm;
2: int i, Nombrepoints;
3:
4: xmin=-5;
5: xmax=5;
6: norm=1/sqrt(2*PI);
7: Nombrepoints=200;
8: i=0;
9:
10: do
11: {
12: x=xmin+i*(xmax-xmin)/Nombrepoints;
13: printf("%f %f\n",x,norm*exp(-x*x/2));
14: i = i+1;
15: }
16: while(i<=Nombrepoints);
L. de FORGES de PARNY (INLN) sept. 2010 87 / 190
Instructions et oprateurs logiques
Boucle do-while :
for et while : excution des instructions conditionne par le rsultat de
lvaluation
Avec do-while : excute dabord les instructions puis test ensuite
lexpression
On excutera toujours au moins une fois linstruction
L. de FORGES de PARNY (INLN) sept. 2010 88 / 190
Instructions et oprateurs logiques
Boucle do-while :
for et while : excution des instructions conditionne par le rsultat de
lvaluation
Avec do-while : excute dabord les instructions puis test ensuite
lexpression
On excutera toujours au moins une fois linstruction
L. de FORGES de PARNY (INLN) sept. 2010 88 / 190
Instructions et oprateurs logiques
Boucle do-while :
for et while : excution des instructions conditionne par le rsultat de
lvaluation
Avec do-while : excute dabord les instructions puis test ensuite
lexpression
On excutera toujours au moins une fois linstruction
L. de FORGES de PARNY (INLN) sept. 2010 88 / 190
Instructions et oprateurs logiques
Autre avantage des boucles : elles peuvent simbriquer !
programme_part4_6.c
1: #include <stdio.h>
2: int main()
3: {
4: int i, j;
5: int imax=7, jmax=5;
6:
7: for(i=1;i<=imax;i++)
8: {
9: for(j=1;j<=jmax;j++)
10: {
11: printf("c%d%d ",i,j);
12: }
13: printf("\n");
14: }
15: return 0;
16: }
L. de FORGES de PARNY (INLN) sept. 2010 89 / 190
Instructions et oprateurs logiques
Soyez propre sinon vous tes perdu ...
programme_part4_6.c
1: #include <stdio.h>
2: int main()
3: {
4: int i, j;
5: int imax=7, jmax=5;
6:
7: for(i=1;i<=imax;i++)
8: {
9: for(j=1;j<=jmax;j++)
10: {
11: printf("c%d%d ",i,j);
12: }
13: printf("\n");
14: }
15: return 0;
16: }
L. de FORGES de PARNY (INLN) sept. 2010 90 / 190
Instructions et oprateurs logiques
Soyez propre sinon vous tes perdu ...
programme_part4_6.c
1: #include <stdio.h>
2: int main()
3: {
4: int i, j;
5: int imax=7, jmax=5;
6:
7: for(i=1;i<=imax;i++)
8: {
9: for(j=1;j<=jmax;j++)
10: {
11: printf("c%d%d ",i,j);
12: }
13: printf("\n");
14: }
15: return 0;
16: }
L. de FORGES de PARNY (INLN) sept. 2010 91 / 190
Instructions et oprateurs logiques
Soyez propre sinon vous tes perdu ...
programme_part4_6.c
1: #include <stdio.h>
2: int main()
3: {
4: int i, j;
5: int imax=7, jmax=5;
6:
7: for(i=1;i<=imax;i++)
8: {
9: for(j=1;j<=jmax;j++)
10: {
11: printf("c%d%d ",i,j);
12: }
13: printf("\n");
14: }
15: return 0;
16: }
L. de FORGES de PARNY (INLN) sept. 2010 92 / 190
Instructions et oprateurs logiques
Excuter une instruction sous condition : if
programme_part4_7.c
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <time.h>
4: int main()
5: {
6: int i,N;
7: srand48(time(NULL));
8: i=10*drand48();
9:
10: printf("Entrez un nombre entre 0 et 10 :\n");
11: scanf("%d",&N);
12: printf("i=%d\n",i);
13:
14: if(N==i)
15: {
16: printf("WAW ... VOUS AVEZ GAGNE\n");
17: }
18: return 0;
19: }
L. de FORGES de PARNY (INLN) sept. 2010 93 / 190
Instructions et oprateurs logiques
programme_part4_7.c
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <time.h>
4: int main()
5: {
6: int i,N;
7: srand48(time(NULL));
8: i=10*drand48();
9:
10: printf("Entrez un nombre entre 0 et 10 :\n");
11: scanf("%d",&N);
12: printf("i=%d\n",i);
13:
14: if(N==i)
15: {
16: printf("WAW ... VOUS AVEZ GAGNE\n");
17: }
18: return 0;
19: }
Librairies ncessaires pour le gnrateur alatoire
L. de FORGES de PARNY (INLN) sept. 2010 94 / 190
Instructions et oprateurs logiques
programme_part4_7.c
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <time.h>
4: int main()
5: {
6: int i,N;
7: srand48(time(NULL));
8: i=10*drand48();
9:
10: printf("Entrez un nombre entre 0 et 10 :\n");
11: scanf("%d",&N);
12: printf("i=%d\n",i);
13:
14: if(N==i)
15: {
16: printf("WAW ... VOUS AVEZ GAGNE\n");
17: }
18: return 0;
19: }
Permet de tirer un nombre dcimale alatoire compris entre 0 et 1
L. de FORGES de PARNY (INLN) sept. 2010 95 / 190
Instructions et oprateurs logiques
programme_part4_7.c
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <time.h>
4: int main()
5: {
6: int i,N;
7: srand48(time(NULL));
8: i=10*drand48();
9:
10: printf("Entrez un nombre entre 0 et 10 :\n");
11: scanf("%d",&N);
12: printf("i=%d\n",i);
13:
14: if(N==i)
15: {
16: printf("WAW ... VOUS AVEZ GAGNE\n");
17: }
18: return 0;
19: }
On en fait un nombre entier compris entre 0 et 10
L. de FORGES de PARNY (INLN) sept. 2010 96 / 190
Instructions et oprateurs logiques
programme_part4_7.c
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <time.h>
4: int main()
5: {
6: int i,N;
7: srand48(time(NULL));
8: i=10*drand48();
9:
10: printf("Entrez un nombre entre 0 et 10 :\n");
11: scanf("%d",&N);
12: printf("i=%d\n",i);
13:
14: if(N==i)
15: {
16: printf("WAW ... VOUS AVEZ GAGNE\n");
17: }
18: return 0;
19: }
Le nombre entr par utilisateur dans la console est lu
L. de FORGES de PARNY (INLN) sept. 2010 97 / 190
Instructions et oprateurs logiques
programme_part4_7.c
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <time.h>
4: int main()
5: {
6: int i,N;
7: srand48(time(NULL));
8: i=10*drand48();
9:
10: printf("Entrez un nombre entre 0 et 10 :\n");
11: scanf("%d",&N);
12: printf("i=%d\n",i);
13:
14: if(N==i)
15: {
16: printf("WAW ... VOUS AVEZ GAGNE\n");
17: }
18: return 0;
19: }
On imprime la valeur de i pour vrication
L. de FORGES de PARNY (INLN) sept. 2010 98 / 190
Instructions et oprateurs logiques
programme_part4_7.c
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <time.h>
4: int main()
5: {
6: int i,N;
7: srand48(time(NULL));
8: i=10*drand48();
9:
10: printf("Entrez un nombre entre 0 et 10 :\n");
11: scanf("%d",&N);
12: printf("i=%d\n",i);
13:
14: if(N==i)
15: {
16: printf("WAW ... VOUS AVEZ GAGNE\n");
17: }
18: return 0;
19: }
Si i et N sont gaux, alors lutilisateur gagn : on imprime le texte
L. de FORGES de PARNY (INLN) sept. 2010 99 / 190
Instructions et oprateurs logiques
Pour aller encore plus loin : if-else
programme_part4_8.c (dans main)
1: int i,N;
2: srand48(time(NULL));
3: i=10*drand48();
4:
5: printf("Entrez un nombre entre 0 et 10 :\n");
6: scanf("%d",&N);
7: printf("i=%d\n",i);
8:
9: if(N==i)
10: {
11: printf("WAW ... VOUS AVEZ GAGNE\n");
12: }
13: else
14: {
15: printf("PERDU ... RECOMMENCEZ\n");
16: }
L. de FORGES de PARNY (INLN) sept. 2010 100 / 190
Instructions et oprateurs logiques
Crer un programme qui calcule
Utiliser la gomtrie et la loi des grands nombres
Gomtrie :
Aire du carr : A
car
= 1
Aire du quart de cercle : A
cer
= /4
Loi des grands nombres :
On tire N1 points alatoirement
dans le carr
L. de FORGES de PARNY (INLN) sept. 2010 101 / 190
Instructions et oprateurs logiques
Crer un programme qui calcule
Utiliser la gomtrie et la loi des grands nombres
Gomtrie :
Aire du carr : A
car
= 1
Aire du quart de cercle : A
cer
= /4
Loi des grands nombres :
On tire N1 points alatoirement
dans le carr
L. de FORGES de PARNY (INLN) sept. 2010 102 / 190
Instructions et oprateurs logiques
Crer un programme qui calcule
Utiliser la gomtrie et la loi des grands nombres
Gomtrie :
Aire du carr : A
car
= 1
Aire du quart de cercle : A
cer
= /4
Loi des grands nombres :
On tire N1 points alatoirement
dans le carr
L. de FORGES de PARNY (INLN) sept. 2010 103 / 190
Instructions et oprateurs logiques
Crer un programme qui calcule
Utiliser la gomtrie et la loi des grands nombres
Gomtrie :
Aire du carr : A
car
= 1
Aire du quart de cercle : A
cer
= /4
Loi des grands nombres :
On tire N1 points alatoirement
dans le carr
L. de FORGES de PARNY (INLN) sept. 2010 104 / 190
Instructions et oprateurs logiques
Crer un programme qui calcule
Utiliser la gomtrie et la loi des grands nombres
Gomtrie :
Aire du carr : A
car
= 1
Aire du quart de cercle : A
cer
= /4
Loi des grands nombres :
On compte le nombre de croix dans le
quart de cercle : n
L. de FORGES de PARNY (INLN) sept. 2010 105 / 190
Instructions et oprateurs logiques
Crer un programme qui calcule
Utiliser la gomtrie et la loi des grands nombres
Gomtrie :
Aire du carr : A
car
= 1
Aire du quart de cercle : A
cer
= /4
Loi des grands nombres :
lim
N
n
N
=
A
cer
A
car
=

4
L. de FORGES de PARNY (INLN) sept. 2010 106 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
x, y : positions du point tir, R : distance entre le point et lorigine
L. de FORGES de PARNY (INLN) sept. 2010 107 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
i : variable muette pour la boucle for
L. de FORGES de PARNY (INLN) sept. 2010 108 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
n : nombre de points compris dans le quart de cercle
L. de FORGES de PARNY (INLN) sept. 2010 109 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
N : nombre total de points tirs
L. de FORGES de PARNY (INLN) sept. 2010 110 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
Pour utiliser le gnrateur de nombre alatoire
L. de FORGES de PARNY (INLN) sept. 2010 111 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
Initialisation des variables N et n
L. de FORGES de PARNY (INLN) sept. 2010 112 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
i vaut 0, on excute les instructions en incrmentant i de 1 chaque tape
L. de FORGES de PARNY (INLN) sept. 2010 113 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
On sarrte lorsque i vaut N-1 (< : strictement infrieur ...)
L. de FORGES de PARNY (INLN) sept. 2010 114 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
On tire un nombre dans le carr, R : distance origine-point
L. de FORGES de PARNY (INLN) sept. 2010 115 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
Si le point se situe dans le quart de cercle, on rajoute 1 la valeur de n
L. de FORGES de PARNY (INLN) sept. 2010 116 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
On calcule la valeur de en faisant attention la conversion dcimale
L. de FORGES de PARNY (INLN) sept. 2010 117 / 190
Instructions et oprateurs logiques
programme_part4_9.c (dans main)
1: double x, y, R, Pi;
2: int i, n, N;
3: srand48(time(NULL));
4:
5: N=100000000;
6: n=0;
7:
8: for(i=0;i<N;i++)
9: {
10: x=drand48();
11: y=drand48();
12: R=sqrt(x*x+y*y);
13:
14: if(R<=1)
15: {
16: n++;
17: }
18: }
19: Pi=4*(oat)n/(oat)N;
20: printf("Pi=%f\n",Pi);
On imprime la valeur de dans la console
L. de FORGES de PARNY (INLN) sept. 2010 118 / 190
Instructions et oprateurs logiques
Les oprateurs relationnels
== : gal
! = : diffrent de
> : suprieur
< : infrieur
>= : suprieur ou gal
<= : infrieur ou gal
Les oprateurs logiques
&& : ET (donne 1 si les expressions sont simultanment ralises)
|| : OU (inclusif : donne 1 si au moins une des expressions est ralise)
! : NON (printf("%d",!(x==5)); donne 0 si x=5 et 1 sinon)
L. de FORGES de PARNY (INLN) sept. 2010 119 / 190
Instructions et oprateurs logiques
Les oprateurs relationnels
== : gal
! = : diffrent de
> : suprieur
< : infrieur
>= : suprieur ou gal
<= : infrieur ou gal
Les oprateurs logiques
&& : ET (donne 1 si les expressions sont simultanment ralises)
|| : OU (inclusif : donne 1 si au moins une des expressions est ralise)
! : NON (printf("%d",!(x==5)); donne 0 si x=5 et 1 sinon)
L. de FORGES de PARNY (INLN) sept. 2010 119 / 190
Instructions et oprateurs logiques
Les oprateurs relationnels
== : gal
! = : diffrent de
> : suprieur
< : infrieur
>= : suprieur ou gal
<= : infrieur ou gal
Les oprateurs logiques
&& : ET (donne 1 si les expressions sont simultanment ralises)
|| : OU (inclusif : donne 1 si au moins une des expressions est ralise)
! : NON (printf("%d",!(x==5)); donne 0 si x=5 et 1 sinon)
L. de FORGES de PARNY (INLN) sept. 2010 119 / 190
Instructions et oprateurs logiques
Les oprateurs relationnels
== : gal
! = : diffrent de
> : suprieur
< : infrieur
>= : suprieur ou gal
<= : infrieur ou gal
Les oprateurs logiques
&& : ET (donne 1 si les expressions sont simultanment ralises)
|| : OU (inclusif : donne 1 si au moins une des expressions est ralise)
! : NON (printf("%d",!(x==5)); donne 0 si x=5 et 1 sinon)
L. de FORGES de PARNY (INLN) sept. 2010 119 / 190
Instructions et oprateurs logiques
Les oprateurs relationnels
== : gal
! = : diffrent de
> : suprieur
< : infrieur
>= : suprieur ou gal
<= : infrieur ou gal
Les oprateurs logiques
&& : ET (donne 1 si les expressions sont simultanment ralises)
|| : OU (inclusif : donne 1 si au moins une des expressions est ralise)
! : NON (printf("%d",!(x==5)); donne 0 si x=5 et 1 sinon)
L. de FORGES de PARNY (INLN) sept. 2010 119 / 190
Instructions et oprateurs logiques
Les oprateurs relationnels
== : gal
! = : diffrent de
> : suprieur
< : infrieur
>= : suprieur ou gal
<= : infrieur ou gal
Les oprateurs logiques
&& : ET (donne 1 si les expressions sont simultanment ralises)
|| : OU (inclusif : donne 1 si au moins une des expressions est ralise)
! : NON (printf("%d",!(x==5)); donne 0 si x=5 et 1 sinon)
L. de FORGES de PARNY (INLN) sept. 2010 119 / 190
Instructions et oprateurs logiques
Les oprateurs relationnels
== : gal
! = : diffrent de
> : suprieur
< : infrieur
>= : suprieur ou gal
<= : infrieur ou gal
Les oprateurs logiques
&& : ET (donne 1 si les expressions sont simultanment ralises)
|| : OU (inclusif : donne 1 si au moins une des expressions est ralise)
! : NON (printf("%d",!(x==5)); donne 0 si x=5 et 1 sinon)
L. de FORGES de PARNY (INLN) sept. 2010 119 / 190
Instructions et oprateurs logiques
Les oprateurs relationnels
== : gal
! = : diffrent de
> : suprieur
< : infrieur
>= : suprieur ou gal
<= : infrieur ou gal
Les oprateurs logiques
&& : ET (donne 1 si les expressions sont simultanment ralises)
|| : OU (inclusif : donne 1 si au moins une des expressions est ralise)
! : NON (printf("%d",!(x==5)); donne 0 si x=5 et 1 sinon)
L. de FORGES de PARNY (INLN) sept. 2010 119 / 190
Instructions et oprateurs logiques
Les oprateurs relationnels
== : gal
! = : diffrent de
> : suprieur
< : infrieur
>= : suprieur ou gal
<= : infrieur ou gal
Les oprateurs logiques
&& : ET (donne 1 si les expressions sont simultanment ralises)
|| : OU (inclusif : donne 1 si au moins une des expressions est ralise)
! : NON (printf("%d",!(x==5)); donne 0 si x=5 et 1 sinon)
L. de FORGES de PARNY (INLN) sept. 2010 119 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Questions-rponses parties 4
Corrigez les erreurs :
for(i=0;i<=imax); { ... } for(i=0;i<=imax;i++) { ... }
while(i=0;i<=imax;i++); { ... } while(i<=imax) { ... }
if(i=0) { ... } if(i==0) { ... }
if(i!=0); { ... } if(i!=0) { ... }
Que donne linstruction suivante ?
i=5;
j=4;
if((i==5)&&(j>=10))
{ printf("test 1 ok\n"); }
if((i==5)||(j>=10))
{ printf("test 2 ok\n"); }
test 2 ok
L. de FORGES de PARNY (INLN) sept. 2010 120 / 190
Stockage des donnes et fonctions C
Enn un peu de Physique ...
Un bateau en panne de moteur se dplace en ligne droite la vitesse v
et est soumis un frottement visqueux :
Problme : comment volue la vitesse du bateau ?
Equation fondamentale de la dynamique :

F = ma = m
dv
dt
=v
Do :
dv
dt
=
v

o = m/
Intgration numrique : mthode dEuler (pas prcis)
dv
dt
= lim
0
v(t +)v(t )


v(t +)v(t )

si << 1
Do : v(t +) = v(t )(1/)
Pour calculer v linstant t + il faut connatre v linstant t
Utiliser un tableau pour stocker v linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 121 / 190
Stockage des donnes et fonctions C
Enn un peu de Physique ...
Un bateau en panne de moteur se dplace en ligne droite la vitesse v
et est soumis un frottement visqueux :
Problme : comment volue la vitesse du bateau ?
Equation fondamentale de la dynamique :

F = ma = m
dv
dt
=v
Do :
dv
dt
=
v

o = m/
Intgration numrique : mthode dEuler (pas prcis)
dv
dt
= lim
0
v(t +)v(t )


v(t +)v(t )

si << 1
Do : v(t +) = v(t )(1/)
Pour calculer v linstant t + il faut connatre v linstant t
Utiliser un tableau pour stocker v linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 121 / 190
Stockage des donnes et fonctions C
Enn un peu de Physique ...
Un bateau en panne de moteur se dplace en ligne droite la vitesse v
et est soumis un frottement visqueux :
Problme : comment volue la vitesse du bateau ?
Equation fondamentale de la dynamique :

F = ma = m
dv
dt
=v
Do :
dv
dt
=
v

o = m/
Intgration numrique : mthode dEuler (pas prcis)
dv
dt
= lim
0
v(t +)v(t )


v(t +)v(t )

si << 1
Do : v(t +) = v(t )(1/)
Pour calculer v linstant t + il faut connatre v linstant t
Utiliser un tableau pour stocker v linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 121 / 190
Stockage des donnes et fonctions C
Enn un peu de Physique ...
Un bateau en panne de moteur se dplace en ligne droite la vitesse v
et est soumis un frottement visqueux :
Problme : comment volue la vitesse du bateau ?
Equation fondamentale de la dynamique :

F = ma = m
dv
dt
=v
Do :
dv
dt
=
v

o = m/
Intgration numrique : mthode dEuler (pas prcis)
dv
dt
= lim
0
v(t +)v(t )


v(t +)v(t )

si << 1
Do : v(t +) = v(t )(1/)
Pour calculer v linstant t + il faut connatre v linstant t
Utiliser un tableau pour stocker v linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 121 / 190
Stockage des donnes et fonctions C
Enn un peu de Physique ...
Un bateau en panne de moteur se dplace en ligne droite la vitesse v
et est soumis un frottement visqueux :
Problme : comment volue la vitesse du bateau ?
Equation fondamentale de la dynamique :

F = ma = m
dv
dt
=v
Do :
dv
dt
=
v

o = m/
Intgration numrique : mthode dEuler (pas prcis)
dv
dt
= lim
0
v(t +)v(t )


v(t +)v(t )

si << 1
Do : v(t +) = v(t )(1/)
Pour calculer v linstant t + il faut connatre v linstant t
Utiliser un tableau pour stocker v linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 121 / 190
Stockage des donnes et fonctions C
Enn un peu de Physique ...
Un bateau en panne de moteur se dplace en ligne droite la vitesse v
et est soumis un frottement visqueux :
Problme : comment volue la vitesse du bateau ?
Equation fondamentale de la dynamique :

F = ma = m
dv
dt
=v
Do :
dv
dt
=
v

o = m/
Intgration numrique : mthode dEuler (pas prcis)
dv
dt
= lim
0
v(t +)v(t )


v(t +)v(t )

si << 1
Do : v(t +) = v(t )(1/)
Pour calculer v linstant t + il faut connatre v linstant t
Utiliser un tableau pour stocker v linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 121 / 190
Stockage des donnes et fonctions C
Enn un peu de Physique ...
Un bateau en panne de moteur se dplace en ligne droite la vitesse v
et est soumis un frottement visqueux :
Problme : comment volue la vitesse du bateau ?
Equation fondamentale de la dynamique :

F = ma = m
dv
dt
=v
Do :
dv
dt
=
v

o = m/
Intgration numrique : mthode dEuler (pas prcis)
dv
dt
= lim
0
v(t +)v(t )


v(t +)v(t )

si << 1
Do : v(t +) = v(t )(1/)
Pour calculer v linstant t + il faut connatre v linstant t
Utiliser un tableau pour stocker v linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 121 / 190
Stockage des donnes et fonctions C
Enn un peu de Physique ...
Un bateau en panne de moteur se dplace en ligne droite la vitesse v
et est soumis un frottement visqueux :
Problme : comment volue la vitesse du bateau ?
Equation fondamentale de la dynamique :

F = ma = m
dv
dt
=v
Do :
dv
dt
=
v

o = m/
Intgration numrique : mthode dEuler (pas prcis)
dv
dt
= lim
0
v(t +)v(t )


v(t +)v(t )

si << 1
Do : v(t +) = v(t )(1/)
Pour calculer v linstant t + il faut connatre v linstant t
Utiliser un tableau pour stocker v linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 121 / 190
Stockage des donnes et fonctions C
Enn un peu de Physique ...
Un bateau en panne de moteur se dplace en ligne droite la vitesse v
et est soumis un frottement visqueux :
Problme : comment volue la vitesse du bateau ?
Equation fondamentale de la dynamique :

F = ma = m
dv
dt
=v
Do :
dv
dt
=
v

o = m/
Intgration numrique : mthode dEuler (pas prcis)
dv
dt
= lim
0
v(t +)v(t )


v(t +)v(t )

si << 1
Do : v(t +) = v(t )(1/)
Pour calculer v linstant t + il faut connatre v linstant t
Utiliser un tableau pour stocker v linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 121 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
Ncessaire pour imprimer les rsultats dans un chier texte
L. de FORGES de PARNY (INLN) sept. 2010 122 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
tau : temps caractristique de relaxation (xe lchelle de temps)
L. de FORGES de PARNY (INLN) sept. 2010 123 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
delta : pas de temps dintgration ( delta 1)
L. de FORGES de PARNY (INLN) sept. 2010 124 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
Bornes min et sup du temps dintgration
L. de FORGES de PARNY (INLN) sept. 2010 125 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
i : variable muette pour la boucle for
L. de FORGES de PARNY (INLN) sept. 2010 126 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
N : nombre total de points, N : nombre de cases du tableau v
L. de FORGES de PARNY (INLN) sept. 2010 127 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
t : temps; v[N] : tableau N cases pour stocker la vitesse (de v[0] v[N-1])
L. de FORGES de PARNY (INLN) sept. 2010 128 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
Initialisation de la vitesse et du temps
L. de FORGES de PARNY (INLN) sept. 2010 129 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
Boucle dintgration de lquation diffrentielle de la vitesse
L. de FORGES de PARNY (INLN) sept. 2010 130 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
A chaque pas, le temps scoule de delta
L. de FORGES de PARNY (INLN) sept. 2010 131 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
Calcul de la vitesse au temps t+delta connaissant la vitesse au temps t
L. de FORGES de PARNY (INLN) sept. 2010 132 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
La vitesse au temps t+delta est stocke dans la case i+1 du tableau v
L. de FORGES de PARNY (INLN) sept. 2010 133 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
On imprime le temps et la vitesse correspondante dans le chier out.txt
L. de FORGES de PARNY (INLN) sept. 2010 134 / 190
Stockage des donnes et fonctions C
programme_part5_1.c (dans main)
1: FILE *le;
2: le=fopen("out.txt","w");
3:
4: double tau=1.0, delta=0.01;
5: double a=0,b=5*tau;
6: int i, N=(int)(b-a)/delta;
7: double t, v[N];
8:
9: v[0]=1.0;
10: t=0.0;
11:
12: for(i=0;i<N;i++)
13: {
14: t=t+delta;
15: v[i+1]=v[i]*(1-delta/tau);
16: fprintf(le,"%lf %lf\n",t,v[i+1]);
17: }
18: fclose(le);
On ferme le chier out.txt
L. de FORGES de PARNY (INLN) sept. 2010 135 / 190
Stockage des donnes et fonctions C
On obtient ...
L. de FORGES de PARNY (INLN) sept. 2010 136 / 190
Stockage des donnes et fonctions C
On obtient ...
L. de FORGES de PARNY (INLN) sept. 2010 137 / 190
Stockage des donnes et fonctions C
On obtient ...
L. de FORGES de PARNY (INLN) sept. 2010 138 / 190
Stockage des donnes et fonctions C
On obtient ...
L. de FORGES de PARNY (INLN) sept. 2010 139 / 190
Stockage des donnes et fonctions C
On obtient ...
L. de FORGES de PARNY (INLN) sept. 2010 140 / 190
Stockage des donnes et fonctions C
En chelle semi-log : droites exponentielles
L. de FORGES de PARNY (INLN) sept. 2010 141 / 190
Stockage des donnes et fonctions C
Exemple de dynamique de population ...
Soit une population de coccinelle dans un espace clt avec une
nourriture abondante :
Problme : comment volue le nombre de coccinelle n(t) ?

dn
dt
= n n
2
: tau de natalit; : tau de mortalit par individu
Intgration numrique : mthode dEuler (pas prcis)
dn
dt
= lim
0
n(t +)n(t )


n(t +)n(t )

si << 1
Do : n(t +) = n(t )(1+n(t ))
Pour calculer n linstant t + il faut connatre n linstant t
Utiliser un tableau pour stocker n linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 142 / 190
Stockage des donnes et fonctions C
Exemple de dynamique de population ...
Soit une population de coccinelle dans un espace clt avec une
nourriture abondante :
Problme : comment volue le nombre de coccinelle n(t) ?

dn
dt
= n n
2
: tau de natalit; : tau de mortalit par individu
Intgration numrique : mthode dEuler (pas prcis)
dn
dt
= lim
0
n(t +)n(t )


n(t +)n(t )

si << 1
Do : n(t +) = n(t )(1+n(t ))
Pour calculer n linstant t + il faut connatre n linstant t
Utiliser un tableau pour stocker n linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 142 / 190
Stockage des donnes et fonctions C
Exemple de dynamique de population ...
Soit une population de coccinelle dans un espace clt avec une
nourriture abondante :
Problme : comment volue le nombre de coccinelle n(t) ?

dn
dt
= n n
2
: tau de natalit; : tau de mortalit par individu
Intgration numrique : mthode dEuler (pas prcis)
dn
dt
= lim
0
n(t +)n(t )


n(t +)n(t )

si << 1
Do : n(t +) = n(t )(1+n(t ))
Pour calculer n linstant t + il faut connatre n linstant t
Utiliser un tableau pour stocker n linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 142 / 190
Stockage des donnes et fonctions C
Exemple de dynamique de population ...
Soit une population de coccinelle dans un espace clt avec une
nourriture abondante :
Problme : comment volue le nombre de coccinelle n(t) ?

dn
dt
= n n
2
: tau de natalit; : tau de mortalit par individu
Intgration numrique : mthode dEuler (pas prcis)
dn
dt
= lim
0
n(t +)n(t )


n(t +)n(t )

si << 1
Do : n(t +) = n(t )(1+n(t ))
Pour calculer n linstant t + il faut connatre n linstant t
Utiliser un tableau pour stocker n linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 142 / 190
Stockage des donnes et fonctions C
Exemple de dynamique de population ...
Soit une population de coccinelle dans un espace clt avec une
nourriture abondante :
Problme : comment volue le nombre de coccinelle n(t) ?

dn
dt
= n n
2
: tau de natalit; : tau de mortalit par individu
Intgration numrique : mthode dEuler (pas prcis)
dn
dt
= lim
0
n(t +)n(t )


n(t +)n(t )

si << 1
Do : n(t +) = n(t )(1+n(t ))
Pour calculer n linstant t + il faut connatre n linstant t
Utiliser un tableau pour stocker n linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 142 / 190
Stockage des donnes et fonctions C
Exemple de dynamique de population ...
Soit une population de coccinelle dans un espace clt avec une
nourriture abondante :
Problme : comment volue le nombre de coccinelle n(t) ?

dn
dt
= n n
2
: tau de natalit; : tau de mortalit par individu
Intgration numrique : mthode dEuler (pas prcis)
dn
dt
= lim
0
n(t +)n(t )


n(t +)n(t )

si << 1
Do : n(t +) = n(t )(1+n(t ))
Pour calculer n linstant t + il faut connatre n linstant t
Utiliser un tableau pour stocker n linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 142 / 190
Stockage des donnes et fonctions C
Exemple de dynamique de population ...
Soit une population de coccinelle dans un espace clt avec une
nourriture abondante :
Problme : comment volue le nombre de coccinelle n(t) ?

dn
dt
= n n
2
: tau de natalit; : tau de mortalit par individu
Intgration numrique : mthode dEuler (pas prcis)
dn
dt
= lim
0
n(t +)n(t )


n(t +)n(t )

si << 1
Do : n(t +) = n(t )(1+n(t ))
Pour calculer n linstant t + il faut connatre n linstant t
Utiliser un tableau pour stocker n linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 142 / 190
Stockage des donnes et fonctions C
Exemple de dynamique de population ...
Soit une population de coccinelle dans un espace clt avec une
nourriture abondante :
Problme : comment volue le nombre de coccinelle n(t) ?

dn
dt
= n n
2
: tau de natalit; : tau de mortalit par individu
Intgration numrique : mthode dEuler (pas prcis)
dn
dt
= lim
0
n(t +)n(t )


n(t +)n(t )

si << 1
Do : n(t +) = n(t )(1+n(t ))
Pour calculer n linstant t + il faut connatre n linstant t
Utiliser un tableau pour stocker n linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 142 / 190
Stockage des donnes et fonctions C
Exemple de dynamique de population ...
Soit une population de coccinelle dans un espace clt avec une
nourriture abondante :
Problme : comment volue le nombre de coccinelle n(t) ?

dn
dt
= n n
2
: tau de natalit; : tau de mortalit par individu
Intgration numrique : mthode dEuler (pas prcis)
dn
dt
= lim
0
n(t +)n(t )


n(t +)n(t )

si << 1
Do : n(t +) = n(t )(1+n(t ))
Pour calculer n linstant t + il faut connatre n linstant t
Utiliser un tableau pour stocker n linstant t !
L. de FORGES de PARNY (INLN) sept. 2010 142 / 190
Stockage des donnes et fonctions C
Voir programme : programme_part5_2.c
Population initiale : n(0)=20 coccinelles
L. de FORGES de PARNY (INLN) sept. 2010 143 / 190
Stockage des donnes et fonctions C
Voir programme : programme_part5_2.c
Population initiale : n(0)=500 coccinelles
L. de FORGES de PARNY (INLN) sept. 2010 144 / 190
Stockage des donnes et fonctions C
Voir programme : programme_part5_2.c
Le nombre de coccinelles converge vers n
eq
=/ =200
L. de FORGES de PARNY (INLN) sept. 2010 145 / 190
Stockage des donnes et fonctions C
Utiliser une fonction C
Quest-ce quune fonction ?
portion de code qui peut travailler avec des donnes quon lui fournit
elle peut renvoyer un rsultat, elle peut tre utilise plusieurs fois
elle permet de ne pas rcrire chaque fois ce code
Dclaration et utilisation facile
Exemple de fonctions : main, printf et scanf (dclare dans stdio.h)
L. de FORGES de PARNY (INLN) sept. 2010 146 / 190
Stockage des donnes et fonctions C
Utiliser une fonction C
Quest-ce quune fonction ?
portion de code qui peut travailler avec des donnes quon lui fournit
elle peut renvoyer un rsultat, elle peut tre utilise plusieurs fois
elle permet de ne pas rcrire chaque fois ce code
Dclaration et utilisation facile
Exemple de fonctions : main, printf et scanf (dclare dans stdio.h)
L. de FORGES de PARNY (INLN) sept. 2010 146 / 190
Stockage des donnes et fonctions C
Utiliser une fonction C
Quest-ce quune fonction ?
portion de code qui peut travailler avec des donnes quon lui fournit
elle peut renvoyer un rsultat, elle peut tre utilise plusieurs fois
elle permet de ne pas rcrire chaque fois ce code
Dclaration et utilisation facile
Exemple de fonctions : main, printf et scanf (dclare dans stdio.h)
L. de FORGES de PARNY (INLN) sept. 2010 146 / 190
Stockage des donnes et fonctions C
Utiliser une fonction C
Quest-ce quune fonction ?
portion de code qui peut travailler avec des donnes quon lui fournit
elle peut renvoyer un rsultat, elle peut tre utilise plusieurs fois
elle permet de ne pas rcrire chaque fois ce code
Dclaration et utilisation facile
Exemple de fonctions : main, printf et scanf (dclare dans stdio.h)
L. de FORGES de PARNY (INLN) sept. 2010 146 / 190
Stockage des donnes et fonctions C
Utiliser une fonction C
Quest-ce quune fonction ?
portion de code qui peut travailler avec des donnes quon lui fournit
elle peut renvoyer un rsultat, elle peut tre utilise plusieurs fois
elle permet de ne pas rcrire chaque fois ce code
Dclaration et utilisation facile
Exemple de fonctions : main, printf et scanf (dclare dans stdio.h)
L. de FORGES de PARNY (INLN) sept. 2010 146 / 190
Stockage des donnes et fonctions C
Utiliser une fonction C
Quest-ce quune fonction ?
portion de code qui peut travailler avec des donnes quon lui fournit
elle peut renvoyer un rsultat, elle peut tre utilise plusieurs fois
elle permet de ne pas rcrire chaque fois ce code
Dclaration et utilisation facile
Exemple de fonctions : main, printf et scanf (dclare dans stdio.h)
L. de FORGES de PARNY (INLN) sept. 2010 146 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
1: #include <stdio.h>
2: # dene tau 1.0
3: # dene delta 0.01
4:
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
Librairies et dclarations globales des constantes tau et delta
L. de FORGES de PARNY (INLN) sept. 2010 147 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
On dclare une fonction nomme f qui va utiliser un nombre dcimale v
L. de FORGES de PARNY (INLN) sept. 2010 148 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
La fonction f renverra en sortie le nombre v*(1-delta/tau)
L. de FORGES de PARNY (INLN) sept. 2010 149 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
Boucle principale "main"
L. de FORGES de PARNY (INLN) sept. 2010 150 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
On dclare les bornes, le nombre de pas, le temps et le tableau vitesse v[N]
L. de FORGES de PARNY (INLN) sept. 2010 151 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
On initialise les variables vitesse et temps
L. de FORGES de PARNY (INLN) sept. 2010 152 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
Boucle qui calcule la vitesse du bateau via la fonction f
L. de FORGES de PARNY (INLN) sept. 2010 153 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
Le temps scoule de delta chaque pas
L. de FORGES de PARNY (INLN) sept. 2010 154 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
On calcule la valeur de la vitesse au temps t+delta via la fonction f
L. de FORGES de PARNY (INLN) sept. 2010 155 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
On donne le nombre v[i] comme argument la fonction f
L. de FORGES de PARNY (INLN) sept. 2010 156 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
La fonction f va comprendre que v=v[i] ...
L. de FORGES de PARNY (INLN) sept. 2010 157 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
... et va calculer v*(1-delta/tau)
L. de FORGES de PARNY (INLN) sept. 2010 158 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
... et renvoyer cette valeur : f(v[i])=v*(1-delta/tau)
L. de FORGES de PARNY (INLN) sept. 2010 159 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
on stocke ensuite cette valeur dans la case i+1 du tableau v ...
L. de FORGES de PARNY (INLN) sept. 2010 160 / 190
Stockage des donnes et fonctions C
programme_part5_3.c (problme du bateau bis)
5: double f(double v)
6: {
7: return v*(1-delta/tau);
8: }
9: int main()
10: {
11: double a=0,b=5*tau;
12: int i, N=(int)(b-a)/delta;
13: double t, v[N];
14:
15: v[0]=1.0;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: t=t+delta;
21: v[i+1]=f(v[i]);
22: printf("%lf %lf\n",t,v[i+1]);
23: }
24: return 0;
25: }
Puis on imprime le temps t et la vitesse dans la console
L. de FORGES de PARNY (INLN) sept. 2010 161 / 190
Stockage des donnes et fonctions C
En TDs/Tps sur ordinateur
On utilisera souvent des fonctions pour rsoudre des quations
diffrentielles
On utilisera une mthode beaucoup plus prcise : Runge Kutta 4 (RK4)
On rsoudra aussi des qs. diffs. du second ordre (pendule ...)
Tout le contenu de ce cours sera utile !
L. de FORGES de PARNY (INLN) sept. 2010 162 / 190
Stockage des donnes et fonctions C
En TDs/Tps sur ordinateur
On utilisera souvent des fonctions pour rsoudre des quations
diffrentielles
On utilisera une mthode beaucoup plus prcise : Runge Kutta 4 (RK4)
On rsoudra aussi des qs. diffs. du second ordre (pendule ...)
Tout le contenu de ce cours sera utile !
L. de FORGES de PARNY (INLN) sept. 2010 162 / 190
Stockage des donnes et fonctions C
En TDs/Tps sur ordinateur
On utilisera souvent des fonctions pour rsoudre des quations
diffrentielles
On utilisera une mthode beaucoup plus prcise : Runge Kutta 4 (RK4)
On rsoudra aussi des qs. diffs. du second ordre (pendule ...)
Tout le contenu de ce cours sera utile !
L. de FORGES de PARNY (INLN) sept. 2010 162 / 190
Stockage des donnes et fonctions C
En TDs/Tps sur ordinateur
On utilisera souvent des fonctions pour rsoudre des quations
diffrentielles
On utilisera une mthode beaucoup plus prcise : Runge Kutta 4 (RK4)
On rsoudra aussi des qs. diffs. du second ordre (pendule ...)
Tout le contenu de ce cours sera utile !
L. de FORGES de PARNY (INLN) sept. 2010 162 / 190
Questions-rponses parties 5
Quest ce quun tableau ? Combien de cases possde le tableau T[10] ?
Un tableau est un ensemble de variables de mme type. Ces
variables sont des lments du tableau.
on stocke leurs valeurs dans les cases i du tableau T[i]. Le tableau
T[10] possde 10 cases (de T[0] T[9] !)
Puis-je utiliser un tableau 2D T[3][3] pour stocker une matrice 3*3 ?
On peut dnir un tableau plusieurs dimensions. Oui, T[3][3] peut
stocker une matrice 3*3
Corrigez les erreurs :
double f(x) { return x; } double f(double x) { return x; }
double f(double x, double y) { return x*y; }
v=f(x); v=f(x,y);
L. de FORGES de PARNY (INLN) sept. 2010 163 / 190
Questions-rponses parties 5
Quest ce quun tableau ? Combien de cases possde le tableau T[10] ?
Un tableau est un ensemble de variables de mme type. Ces
variables sont des lments du tableau.
on stocke leurs valeurs dans les cases i du tableau T[i]. Le tableau
T[10] possde 10 cases (de T[0] T[9] !)
Puis-je utiliser un tableau 2D T[3][3] pour stocker une matrice 3*3 ?
On peut dnir un tableau plusieurs dimensions. Oui, T[3][3] peut
stocker une matrice 3*3
Corrigez les erreurs :
double f(x) { return x; } double f(double x) { return x; }
double f(double x, double y) { return x*y; }
v=f(x); v=f(x,y);
L. de FORGES de PARNY (INLN) sept. 2010 163 / 190
Questions-rponses parties 5
Quest ce quun tableau ? Combien de cases possde le tableau T[10] ?
Un tableau est un ensemble de variables de mme type. Ces
variables sont des lments du tableau.
on stocke leurs valeurs dans les cases i du tableau T[i]. Le tableau
T[10] possde 10 cases (de T[0] T[9] !)
Puis-je utiliser un tableau 2D T[3][3] pour stocker une matrice 3*3 ?
On peut dnir un tableau plusieurs dimensions. Oui, T[3][3] peut
stocker une matrice 3*3
Corrigez les erreurs :
double f(x) { return x; } double f(double x) { return x; }
double f(double x, double y) { return x*y; }
v=f(x); v=f(x,y);
L. de FORGES de PARNY (INLN) sept. 2010 163 / 190
Questions-rponses parties 5
Quest ce quun tableau ? Combien de cases possde le tableau T[10] ?
Un tableau est un ensemble de variables de mme type. Ces
variables sont des lments du tableau.
on stocke leurs valeurs dans les cases i du tableau T[i]. Le tableau
T[10] possde 10 cases (de T[0] T[9] !)
Puis-je utiliser un tableau 2D T[3][3] pour stocker une matrice 3*3 ?
On peut dnir un tableau plusieurs dimensions. Oui, T[3][3] peut
stocker une matrice 3*3
Corrigez les erreurs :
double f(x) { return x; } double f(double x) { return x; }
double f(double x, double y) { return x*y; }
v=f(x); v=f(x,y);
L. de FORGES de PARNY (INLN) sept. 2010 163 / 190
Questions-rponses parties 5
Quest ce quun tableau ? Combien de cases possde le tableau T[10] ?
Un tableau est un ensemble de variables de mme type. Ces
variables sont des lments du tableau.
on stocke leurs valeurs dans les cases i du tableau T[i]. Le tableau
T[10] possde 10 cases (de T[0] T[9] !)
Puis-je utiliser un tableau 2D T[3][3] pour stocker une matrice 3*3 ?
On peut dnir un tableau plusieurs dimensions. Oui, T[3][3] peut
stocker une matrice 3*3
Corrigez les erreurs :
double f(x) { return x; } double f(double x) { return x; }
double f(double x, double y) { return x*y; }
v=f(x); v=f(x,y);
L. de FORGES de PARNY (INLN) sept. 2010 163 / 190
Questions-rponses parties 5
Quest ce quun tableau ? Combien de cases possde le tableau T[10] ?
Un tableau est un ensemble de variables de mme type. Ces
variables sont des lments du tableau.
on stocke leurs valeurs dans les cases i du tableau T[i]. Le tableau
T[10] possde 10 cases (de T[0] T[9] !)
Puis-je utiliser un tableau 2D T[3][3] pour stocker une matrice 3*3 ?
On peut dnir un tableau plusieurs dimensions. Oui, T[3][3] peut
stocker une matrice 3*3
Corrigez les erreurs :
double f(x) { return x; } double f(double x) { return x; }
double f(double x, double y) { return x*y; }
v=f(x); v=f(x,y);
L. de FORGES de PARNY (INLN) sept. 2010 163 / 190
Questions-rponses parties 5
Quest ce quun tableau ? Combien de cases possde le tableau T[10] ?
Un tableau est un ensemble de variables de mme type. Ces
variables sont des lments du tableau.
on stocke leurs valeurs dans les cases i du tableau T[i]. Le tableau
T[10] possde 10 cases (de T[0] T[9] !)
Puis-je utiliser un tableau 2D T[3][3] pour stocker une matrice 3*3 ?
On peut dnir un tableau plusieurs dimensions. Oui, T[3][3] peut
stocker une matrice 3*3
Corrigez les erreurs :
double f(x) { return x; } double f(double x) { return x; }
double f(double x, double y) { return x*y; }
v=f(x); v=f(x,y);
L. de FORGES de PARNY (INLN) sept. 2010 163 / 190
Questions-rponses parties 5
Quest ce quun tableau ? Combien de cases possde le tableau T[10] ?
Un tableau est un ensemble de variables de mme type. Ces
variables sont des lments du tableau.
on stocke leurs valeurs dans les cases i du tableau T[i]. Le tableau
T[10] possde 10 cases (de T[0] T[9] !)
Puis-je utiliser un tableau 2D T[3][3] pour stocker une matrice 3*3 ?
On peut dnir un tableau plusieurs dimensions. Oui, T[3][3] peut
stocker une matrice 3*3
Corrigez les erreurs :
double f(x) { return x; } double f(double x) { return x; }
double f(double x, double y) { return x*y; }
v=f(x); v=f(x,y);
L. de FORGES de PARNY (INLN) sept. 2010 163 / 190
Questions-rponses parties 5
Quest ce quun tableau ? Combien de cases possde le tableau T[10] ?
Un tableau est un ensemble de variables de mme type. Ces
variables sont des lments du tableau.
on stocke leurs valeurs dans les cases i du tableau T[i]. Le tableau
T[10] possde 10 cases (de T[0] T[9] !)
Puis-je utiliser un tableau 2D T[3][3] pour stocker une matrice 3*3 ?
On peut dnir un tableau plusieurs dimensions. Oui, T[3][3] peut
stocker une matrice 3*3
Corrigez les erreurs :
double f(x) { return x; } double f(double x) { return x; }
double f(double x, double y) { return x*y; }
v=f(x); v=f(x,y);
L. de FORGES de PARNY (INLN) sept. 2010 163 / 190
Questions-rponses parties 5
Quest ce quun tableau ? Combien de cases possde le tableau T[10] ?
Un tableau est un ensemble de variables de mme type. Ces
variables sont des lments du tableau.
on stocke leurs valeurs dans les cases i du tableau T[i]. Le tableau
T[10] possde 10 cases (de T[0] T[9] !)
Puis-je utiliser un tableau 2D T[3][3] pour stocker une matrice 3*3 ?
On peut dnir un tableau plusieurs dimensions. Oui, T[3][3] peut
stocker une matrice 3*3
Corrigez les erreurs :
double f(x) { return x; } double f(double x) { return x; }
double f(double x, double y) { return x*y; }
v=f(x); v=f(x,y);
L. de FORGES de PARNY (INLN) sept. 2010 163 / 190
Approfondissement ...
Deux problmes de dynamique
Pendule pesant (exo de TDs/TPs)
Deux corps en interaction gravitationnelle
L. de FORGES de PARNY (INLN) sept. 2010 164 / 190
Approfondissement ...
Pendule pesant
Energie :
E =E
c
+E
p
= cste (forces conservatives)
E =
1
2
M(L

)
2
+MgL(1cos())
Equation du mouvement :

+
2
sin() = 0 avec
2
=
g
L
L. de FORGES de PARNY (INLN) sept. 2010 165 / 190
Approfondissement ...
Pendule pesant
Eq. du mouvement :

+
2
sin() = 0
Rappel : sin() =

n=0
(1)
n

(2n+1)
(2n +1)!
=

3
3!
+

5
5!
+...
Petits angles ( < 30

) : sin() do

+
2
= 0
Solutions gnrales : (t ) = Acos(t ) +Bsin(t )
Petits et grands angles :

+
2
sin() = 0
Solutions gnrales : fonctions elliptiques de Jacobi (cnodales)
Comment rsoudre numriquement cette quation diffrentielle ?
L. de FORGES de PARNY (INLN) sept. 2010 166 / 190
Approfondissement ...
Pendule pesant
Eq. du mouvement :

+
2
sin() = 0
Rappel : sin() =

n=0
(1)
n

(2n+1)
(2n +1)!
=

3
3!
+

5
5!
+...
Petits angles ( < 30

) : sin() do

+
2
= 0
Solutions gnrales : (t ) = Acos(t ) +Bsin(t )
Petits et grands angles :

+
2
sin() = 0
Solutions gnrales : fonctions elliptiques de Jacobi (cnodales)
Comment rsoudre numriquement cette quation diffrentielle ?
L. de FORGES de PARNY (INLN) sept. 2010 166 / 190
Approfondissement ...
Pendule pesant
Eq. du mouvement :

+
2
sin() = 0
Rappel : sin() =

n=0
(1)
n

(2n+1)
(2n +1)!
=

3
3!
+

5
5!
+...
Petits angles ( < 30

) : sin() do

+
2
= 0
Solutions gnrales : (t ) = Acos(t ) +Bsin(t )
Petits et grands angles :

+
2
sin() = 0
Solutions gnrales : fonctions elliptiques de Jacobi (cnodales)
Comment rsoudre numriquement cette quation diffrentielle ?
L. de FORGES de PARNY (INLN) sept. 2010 166 / 190
Approfondissement ...
Pendule pesant
Eq. du mouvement :

+
2
sin() = 0
Rappel : sin() =

n=0
(1)
n

(2n+1)
(2n +1)!
=

3
3!
+

5
5!
+...
Petits angles ( < 30

) : sin() do

+
2
= 0
Solutions gnrales : (t ) = Acos(t ) +Bsin(t )
Petits et grands angles :

+
2
sin() = 0
Solutions gnrales : fonctions elliptiques de Jacobi (cnodales)
Comment rsoudre numriquement cette quation diffrentielle ?
L. de FORGES de PARNY (INLN) sept. 2010 166 / 190
Approfondissement ...
Pendule pesant
Eq. du mouvement :

+
2
sin() = 0
Rappel : sin() =

n=0
(1)
n

(2n+1)
(2n +1)!
=

3
3!
+

5
5!
+...
Petits angles ( < 30

) : sin() do

+
2
= 0
Solutions gnrales : (t ) = Acos(t ) +Bsin(t )
Petits et grands angles :

+
2
sin() = 0
Solutions gnrales : fonctions elliptiques de Jacobi (cnodales)
Comment rsoudre numriquement cette quation diffrentielle ?
L. de FORGES de PARNY (INLN) sept. 2010 166 / 190
Approfondissement ...
Pendule pesant
Eq. du mouvement :

+
2
sin() = 0
Rappel : sin() =

n=0
(1)
n

(2n+1)
(2n +1)!
=

3
3!
+

5
5!
+...
Petits angles ( < 30

) : sin() do

+
2
= 0
Solutions gnrales : (t ) = Acos(t ) +Bsin(t )
Petits et grands angles :

+
2
sin() = 0
Solutions gnrales : fonctions elliptiques de Jacobi (cnodales)
Comment rsoudre numriquement cette quation diffrentielle ?
L. de FORGES de PARNY (INLN) sept. 2010 166 / 190
Approfondissement ...
Pendule pesant
Eq. du mouvement :

+
2
sin() = 0
Rappel : sin() =

n=0
(1)
n

(2n+1)
(2n +1)!
=

3
3!
+

5
5!
+...
Petits angles ( < 30

) : sin() do

+
2
= 0
Solutions gnrales : (t ) = Acos(t ) +Bsin(t )
Petits et grands angles :

+
2
sin() = 0
Solutions gnrales : fonctions elliptiques de Jacobi (cnodales)
Comment rsoudre numriquement cette quation diffrentielle ?
L. de FORGES de PARNY (INLN) sept. 2010 166 / 190
Approfondissement ...
Pendule pesant
On connat (0), donc

(0), et

(0) t=0
On intgre

on obtient

On intgre maintenant

on obtient
Comment intgrer ?
Deux mthodes : Euler (pas bien) ou RK4 (bien)
L. de FORGES de PARNY (INLN) sept. 2010 167 / 190
Approfondissement ...
Pendule pesant
On connat (0), donc

(0), et

(0) t=0
On intgre

on obtient

On intgre maintenant

on obtient
Comment intgrer ?
Deux mthodes : Euler (pas bien) ou RK4 (bien)
L. de FORGES de PARNY (INLN) sept. 2010 167 / 190
Approfondissement ...
Pendule pesant
On connat (0), donc

(0), et

(0) t=0
On intgre

on obtient

On intgre maintenant

on obtient
Comment intgrer ?
Deux mthodes : Euler (pas bien) ou RK4 (bien)
L. de FORGES de PARNY (INLN) sept. 2010 167 / 190
Approfondissement ...
Pendule pesant
On connat (0), donc

(0), et

(0) t=0
On intgre

on obtient

On intgre maintenant

on obtient
Comment intgrer ?
Deux mthodes : Euler (pas bien) ou RK4 (bien)
L. de FORGES de PARNY (INLN) sept. 2010 167 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
Librairie math.h pour sin() et M_PI et dnition de la pulsation = 1
L. de FORGES de PARNY (INLN) sept. 2010 168 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
Fonction g qui prend (theta) et renvoie la valeur
2
sin()
L. de FORGES de PARNY (INLN) sept. 2010 169 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
Fonction f qui prend

(thetapoint) et renvoie la mme valeur

!
L. de FORGES de PARNY (INLN) sept. 2010 170 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
On va crire dans le chier texte "pendule.dat"
L. de FORGES de PARNY (INLN) sept. 2010 171 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
theta= angle, thetapoint= vitesse angulaire, t= temps, dt=pas de temps
L. de FORGES de PARNY (INLN) sept. 2010 172 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
N=nombre total de points (itrations) = 10*T/dt ou T=2/
L. de FORGES de PARNY (INLN) sept. 2010 173 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
Initialisation des variables : angle, vitesse et temps
L. de FORGES de PARNY (INLN) sept. 2010 174 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
Vitesse initiale maximum pour osciller:

= 2 (POURQUOI ?)
L. de FORGES de PARNY (INLN) sept. 2010 175 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
On va intgrer tape par tape, stop quand i=N-1
L. de FORGES de PARNY (INLN) sept. 2010 176 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
On calcule la nouvelle vitesse en intgrant lacclration via g()
L. de FORGES de PARNY (INLN) sept. 2010 177 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
On calcule le nouvel angle en intgrant la vitesse via f()
L. de FORGES de PARNY (INLN) sept. 2010 178 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
Le temps scoule de dt chaque itration
L. de FORGES de PARNY (INLN) sept. 2010 179 / 190
Approfondissement ...
Avec la mthode dEuler
1: #include <stdio.h>
2: #include <math.h>
3: # dene w 1
4:
5: double g(double theta) { return -w*w*sin(theta); }
6: double f(double thetapoint) { return thetapoint; }
7: int main()
8: {
9: FILE *le;
10: le=fopen("pendule.dat","w");
11: double theta, thetapoint, t, dt=0.01;
12: int i, N=(int)((10.0*2*M_PI)/(w*dt));
13:
14: theta=0;
15: thetapoint=1.9999;
16: t=0.0;
17:
18: for(i=0;i<N;i++)
19: {
20: thetapoint=thetapoint+dt*g(theta);
21: theta=theta+dt*f(thetapoint);
22: t=t+dt;
23: fprintf(le,"%lf %lf\n", t, theta*180/M_PI);
24: }
25: fclose(le);
26: return 0;
27: }
On imprime dans le chier de sortie le temps et langle (en degr)
L. de FORGES de PARNY (INLN) sept. 2010 180 / 190
Approfondissement ...
Pendule pesant
Petites oscillations : sinusode
L. de FORGES de PARNY (INLN) sept. 2010 181 / 190
Approfondissement ...
Pendule pesant
La priode des oscillations est trs proche de T =2

L/g
L. de FORGES de PARNY (INLN) sept. 2010 182 / 190
Approfondissement ...
Pendule pesant
On augmente la vitesse initiale : la priode augmente
L. de FORGES de PARNY (INLN) sept. 2010 183 / 190
Approfondissement ...
Pendule pesant
On augmente la vitesse initiale : la priode augmente
L. de FORGES de PARNY (INLN) sept. 2010 184 / 190
Approfondissement ...
Pendule pesant
Grandes oscillations : fonctions elliptiques de Jacobi
L. de FORGES de PARNY (INLN) sept. 2010 185 / 190
Approfondissement ...
Avec la mthode de Runge-Kutta dordre 4 (RK4)
Problme quelconque : y

= f (t , y) avec y(t
0
) = y
0
Au temps t+, on a y(t +) = y(t ) +

6
(k
1
+2k
2
+2k
3
+k
4
)
Avec :
k
1
= f (t , y)
k
2
= f (t +

2
, y +

2
k
1
)
k
3
= f (t +

2
, y +

2
k
2
)
k
4
= f (t +, y + k
3
)
Comparaison avec Euler : y(t +) = y(t ) + k
1
L. de FORGES de PARNY (INLN) sept. 2010 186 / 190
Approfondissement ...
Avec la mthode de Runge-Kutta dordre 4 (RK4)
Problme quelconque : y

= f (t , y) avec y(t
0
) = y
0
Au temps t+, on a y(t +) = y(t ) +

6
(k
1
+2k
2
+2k
3
+k
4
)
Avec :
k
1
= f (t , y)
k
2
= f (t +

2
, y +

2
k
1
)
k
3
= f (t +

2
, y +

2
k
2
)
k
4
= f (t +, y + k
3
)
Comparaison avec Euler : y(t +) = y(t ) + k
1
L. de FORGES de PARNY (INLN) sept. 2010 186 / 190
Approfondissement ...
Avec la mthode de Runge-Kutta dordre 4 (RK4)
Problme quelconque : y

= f (t , y) avec y(t
0
) = y
0
Au temps t+, on a y(t +) = y(t ) +

6
(k
1
+2k
2
+2k
3
+k
4
)
Avec :
k
1
= f (t , y)
k
2
= f (t +

2
, y +

2
k
1
)
k
3
= f (t +

2
, y +

2
k
2
)
k
4
= f (t +, y + k
3
)
Comparaison avec Euler : y(t +) = y(t ) + k
1
L. de FORGES de PARNY (INLN) sept. 2010 186 / 190
Approfondissement ...
Avec la mthode de Runge-Kutta dordre 4 (RK4)
Problme quelconque : y

= f (t , y) avec y(t
0
) = y
0
Au temps t+, on a y(t +) = y(t ) +

6
(k
1
+2k
2
+2k
3
+k
4
)
Avec :
k
1
= f (t , y)
k
2
= f (t +

2
, y +

2
k
1
)
k
3
= f (t +

2
, y +

2
k
2
)
k
4
= f (t +, y + k
3
)
Comparaison avec Euler : y(t +) = y(t ) + k
1
L. de FORGES de PARNY (INLN) sept. 2010 186 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Forces :

F
21
= m
1
a
1
=
Gm
1
m
2
r
3
r

F
12
= m
2
a
2
=
Gm
1
m
2
r
3
r =

F
21
Avecr = (x
2
x
1
) x +(y
2
y
1
) y
do r =

(x
2
x
1
)
2
+(y
2
y
1
)
2
Equations du mouvement :
x
1
=
Gm
2
r
3
(x
2
x
1
)
y
1
=
Gm
2
r
3
(y
2
y
1
)
x
2
=
Gm
1
r
3
(x
2
x
1
)
y
2
=
Gm
1
r
3
(y
2
y
1
)
L. de FORGES de PARNY (INLN) sept. 2010 187 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Avec la mthode dEuler, on va intgrer x
1
, y
1
, x
2
et y
2
On obtient donc les vitesses : x
1
, y
1
, x
2
et y
2
... quon intgre pour avoir les positions : x
1
(t ), y
1
(t ), x
2
(t ) et y
2
(t )
Exemple avec la position x
1
:
x
1
(t ) = x
1
(t ) + x
1
(t ) avec << 1
x
1
(t +) = x
1
(t ) + x
1
(t )
L. de FORGES de PARNY (INLN) sept. 2010 188 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Avec la mthode dEuler, on va intgrer x
1
, y
1
, x
2
et y
2
On obtient donc les vitesses : x
1
, y
1
, x
2
et y
2
... quon intgre pour avoir les positions : x
1
(t ), y
1
(t ), x
2
(t ) et y
2
(t )
Exemple avec la position x
1
:
x
1
(t ) = x
1
(t ) + x
1
(t ) avec << 1
x
1
(t +) = x
1
(t ) + x
1
(t )
L. de FORGES de PARNY (INLN) sept. 2010 188 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Avec la mthode dEuler, on va intgrer x
1
, y
1
, x
2
et y
2
On obtient donc les vitesses : x
1
, y
1
, x
2
et y
2
... quon intgre pour avoir les positions : x
1
(t ), y
1
(t ), x
2
(t ) et y
2
(t )
Exemple avec la position x
1
:
x
1
(t ) = x
1
(t ) + x
1
(t ) avec << 1
x
1
(t +) = x
1
(t ) + x
1
(t )
L. de FORGES de PARNY (INLN) sept. 2010 188 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Avec la mthode dEuler, on va intgrer x
1
, y
1
, x
2
et y
2
On obtient donc les vitesses : x
1
, y
1
, x
2
et y
2
... quon intgre pour avoir les positions : x
1
(t ), y
1
(t ), x
2
(t ) et y
2
(t )
Exemple avec la position x
1
:
x
1
(t ) = x
1
(t ) + x
1
(t ) avec << 1
x
1
(t +) = x
1
(t ) + x
1
(t )
L. de FORGES de PARNY (INLN) sept. 2010 188 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Vectoriellement : r (t ) = (x
1
(t ), y
1
(t ), x
2
(t ), y
2
(t ))
A t=0 :

r (0) etr (0) donc

r (0) car

r (0) = f (r (0))
A t= :

r () =

r (0) +

r (0)
r () =r (0) +

r (0) do

r ()
A t=2 :

r (2) =

r () +

r ()
r (2) =r () +

r () do

r (2)
etc ...
L. de FORGES de PARNY (INLN) sept. 2010 189 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Vectoriellement : r (t ) = (x
1
(t ), y
1
(t ), x
2
(t ), y
2
(t ))
A t=0 :

r (0) etr (0) donc

r (0) car

r (0) = f (r (0))
A t= :

r () =

r (0) +

r (0)
r () =r (0) +

r (0) do

r ()
A t=2 :

r (2) =

r () +

r ()
r (2) =r () +

r () do

r (2)
etc ...
L. de FORGES de PARNY (INLN) sept. 2010 189 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Vectoriellement : r (t ) = (x
1
(t ), y
1
(t ), x
2
(t ), y
2
(t ))
A t=0 :

r (0) etr (0) donc

r (0) car

r (0) = f (r (0))
A t= :

r () =

r (0) +

r (0)
r () =r (0) +

r (0) do

r ()
A t=2 :

r (2) =

r () +

r ()
r (2) =r () +

r () do

r (2)
etc ...
L. de FORGES de PARNY (INLN) sept. 2010 189 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Vectoriellement : r (t ) = (x
1
(t ), y
1
(t ), x
2
(t ), y
2
(t ))
A t=0 :

r (0) etr (0) donc

r (0) car

r (0) = f (r (0))
A t= :

r () =

r (0) +

r (0)
r () =r (0) +

r (0) do

r ()
A t=2 :

r (2) =

r () +

r ()
r (2) =r () +

r () do

r (2)
etc ...
L. de FORGES de PARNY (INLN) sept. 2010 189 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Vectoriellement : r (t ) = (x
1
(t ), y
1
(t ), x
2
(t ), y
2
(t ))
A t=0 :

r (0) etr (0) donc

r (0) car

r (0) = f (r (0))
A t= :

r () =

r (0) +

r (0)
r () =r (0) +

r (0) do

r ()
A t=2 :

r (2) =

r () +

r ()
r (2) =r () +

r () do

r (2)
etc ...
L. de FORGES de PARNY (INLN) sept. 2010 189 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Dans le programme : 4 fonctions fx1, fy1, fx2 et fy2 qui renvoient les
acclrations x
1
, y
1
, x
2
et y
2
Ces 4 fonctions ont comme arguments les positions x
1
, y
1
, x
2
et y
2
On utilisera aussi une autre fonction g qui prend la vitesse et renvoie la
vitesse
Effectuez des "tests" simples pour sonder la validit de votre programme !
L. de FORGES de PARNY (INLN) sept. 2010 190 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Dans le programme : 4 fonctions fx1, fy1, fx2 et fy2 qui renvoient les
acclrations x
1
, y
1
, x
2
et y
2
Ces 4 fonctions ont comme arguments les positions x
1
, y
1
, x
2
et y
2
On utilisera aussi une autre fonction g qui prend la vitesse et renvoie la
vitesse
Effectuez des "tests" simples pour sonder la validit de votre programme !
L. de FORGES de PARNY (INLN) sept. 2010 190 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Dans le programme : 4 fonctions fx1, fy1, fx2 et fy2 qui renvoient les
acclrations x
1
, y
1
, x
2
et y
2
Ces 4 fonctions ont comme arguments les positions x
1
, y
1
, x
2
et y
2
On utilisera aussi une autre fonction g qui prend la vitesse et renvoie la
vitesse
Effectuez des "tests" simples pour sonder la validit de votre programme !
L. de FORGES de PARNY (INLN) sept. 2010 190 / 190
Approfondissement ...
Deux corps en interaction gravitationnelle
Dans le programme : 4 fonctions fx1, fy1, fx2 et fy2 qui renvoient les
acclrations x
1
, y
1
, x
2
et y
2
Ces 4 fonctions ont comme arguments les positions x
1
, y
1
, x
2
et y
2
On utilisera aussi une autre fonction g qui prend la vitesse et renvoie la
vitesse
Effectuez des "tests" simples pour sonder la validit de votre programme !
L. de FORGES de PARNY (INLN) sept. 2010 190 / 190
Programmer en langage C :
Un outil pour physicien Introduction
Programmes du Cours de Licence 3 Physique
Universit de Nice Sophia!ntipolis
Nice "#$#"#$$
Laurent de %&'()S de P!'N*
email: de+,orges+de+parny+laurent-etu+unice+,r
Partie $
programme_part1_1.c
// Premier exemple de programme simple
#include <stdio.h>
int main()
{
printf("vive la physiue!n")"
return #"
$
programme_part1_2.c
/% Premier exemple de programme simple %/
#include <stdio.h>
int main()
{
printf("vive la physiue!n")"
return #"
$
programme_part1_3.c
// Premier exemple de programme simple
/%
&e commentaire ne modifie ni la taille'
ni les performances du fichier ex(cuta)le (a.out)
%/
#include <stdio.h>
int main()
{
printf("vive la physiue!n")"
return #"
$
programme_part1_4.c
#include <stdio.h>
int main()
{
printf("!n!n")"
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!n")"
printf("%% *aurent de +,-./0 %%!n")"
printf("%% %%!n")"
printf("%% 1nstitut 2on *ineaire de 2ice %%!n")"
printf("%% 3niversite de 2ice 0ophia45ntipolis %%!n")"
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!n")"
printf("!n!n")"
return #"
$
Partie "
programme_part2_1.c
#include <stdio.h>
int main()
{
// declaration des varia)les
int i"
float x"
dou)le y"
char c"
// affectations des varia)les
i67"
x68.7"
y69.:8:;<"
c6=a="
// impression des varia)les
printf("i vaut > ?d!n"'i)"
printf("x vaut > ?f!n"'x)"
printf("y vaut > ?lf!n"'y)"
printf("c vaut > ?c!n"'c)"
return #"
$
programme_part2_2.c
// 5ttention > ce programme est un exemple de ce u il ne faut pas faire @
#include <stdio.h>
int main()
{
// declaration des varia)les
int i' A"

// affectations des varia)les
i67' A6;"

// impression des varia)les
printf("i vaut > ?c!n"'i)"
printf("A/i vaut > ?i!n"'A/i)"
printf("A/i vaut > ?f!n"'A/i)"
return #"
$
programme_part2_2_corrige.c
// 5ttention > ce programme est une correction de programmeBpart7B7.c

#include <stdio.h>
int main()
{
// declaration des varia)les
int i' A"

// affectations des varia)les
i67' A6;"

// impression des varia)les
printf("i vaut > ?d!n"'i)"
printf("A/i vaut > ?i!n"'A/i)"
printf("A/i vaut > ?f!n"'(float) A/i)"
return #"
$
programme_part2_3.c
#include <stdio.h>
// declaration des constantes avec un type precise
// ces constantes peuvent etre utilisees dans main et en dehors
const int i69"
const float x68.:::"
// declaration des constantes avec un type implicitement precise
// ces constantes peuvent etre utilisees dans main et en dehors
#define P1 9.:8:;<7
#define 2 :#
int main()
{
// impression des constantes
printf("i vaut > ?d!n"'i)"
printf("x vaut > ?f!n"'x)"
printf("P1 vaut > ?f!n"'P1)"
printf("2 vaut > ?d!n"'2)"
return #"
$
Partie 3
programme_part3_1.c
#include <stdio.h>
int main()
{
// declaration des varia)les
int i' A"

// affectations des varia)les via la console
printf("/ntreC deux nom)res entiers i et A>!n")"
scanf("?d?d"'Di'DA)"

// impression des varia)les
printf("iEA6?d!n"'iEA)"
printf("i4A6?d!n"'i4A)"
printf("i%A6?d!n"'i%A)"
printf("i/A6?f!n"'(float)i/A)"
return #"
$
programme_part3_2.c
#include <stdio.h>
int main()
{
// declaration des varia)les
int i' A"

// affectations des varia)les via la console
printf("/ntre ton Aour et moi de naissance >!n")"
scanf("?d?d"'Di'DA)"

// impression des varia)les
printf("1l te reste ?d Aours a vivre @!n"'i%A)"
printf("P-,+1F/ 32 G5H I/ F5 J1/ @@@!n")"
return #"
$
programme_part3_3.c
#include <stdio.h>
int main()
{
+1*/ % file:" // pointeur de type +1*/ pour lire ici
+1*/ % file7" // pointeur de type +1*/ pour ecrire ici
// declaration des varia)les (decimales)
dou)le x:' y:' C:"
dou)le x7' y7' C7"
// pour lire dans le fichier existant mesdonneesBinput.txt
file:6fopen("mesdonneesBinput.txt"'"r")"
// pour creer et ecrire dans le fichier mesdonneesBouput.txt
file76fopen("mesdonneesBouput.txt"'"K")"
// affectation des valeurs des nom)res de la ligne : aux varia)les x:'y:'C:
fscanf(file:'"?lf?lf?lf"'Dx:'Dy:'DC:)"
// affectation des valeurs des nom)res de la ligne 7 aux varia)les x7'y7'C7
fscanf(file:'"?lf?lf?lf"'Dx7'Dy7'DC7)"
// impression dans un fichier texte
fprintf(file7'"?lf ?lf!n"'x:'y:EC:)"
fprintf(file7'"?lf ?lf!n"'x7'y7EC7)"
// on ferme les fichiers dans lesuels on a lu et ecrit
fclose(file:)"
fclose(file7)"
return # "
$
mesdonnees_input.txt
1.0 10.0 100.0
2.0 20.0 200.0
Partie .
programme_part4_1.c
#include <stdio.h>
#include <math.h> // on inclut les li)rairies pour utiliser srt et exp
#define P1 9.:8:;<7 // declaration de la constante P1
int main()
{
// declaration des varia)les
float xmin' xmax' x" // )ornes de l intervalle et varia)le de la gaussienne
float norm" // norme de la gaussienne
// i> varia)le muette de la )oucle for" 2om)repoints> nom)re total de points
int i' 2om)repoints"
// initialisation des varia)les
xmin64;"
xmax6;"
norm6:/srt(7%P1)"
2om)repoints67##"
// la )oucle commence pour i6# et finit en i62om)repoints
// on incremente i de : a chaue pas
for(i6#"i<62om)repoints"iEE)
{
// x augmente de (xmax4xmin)/2om)repoints L chaue pas
x6xminEi%(xmax4xmin)/2om)repoints"
// on imprime x et la valeur de la gaussienne correspondante
printf("?f ?f!n"'x'norm%exp(4x%x/7))"
$ // fin de la )oucle uand i62om)repoints
return #"
$

programme_part4_2.c
#include <stdio.h>
#include <math.h> // on inclut les li)rairies pour utiliser srt et exp
#define P1 9.:8:;<7 // declaration de la constante P1
int main()
{
// declaration d un pointeur de type +1*/ pour ecrire dans un fichier
+1*/ %file"
// pour creer le fichier gaussBoutput.txt
file6fopen("gaussBoutput.txt"'"K")"
// declaration des varia)les
// )ornes de l intervalle et varia)le de la gaussienne
float xmin' xmax' x"
// norme de la gaussienne
float norm"
// i> varia)le muette de la )oucle for" 2om)repoints> nom)re total de points
int i' 2om)repoints"
// initialisation des varia)les
xmin64;"
xmax6;"
norm6:/srt(7%P1)"
2om)repoints67##"
// la )oucle commence pour i6# et finit en i62om)repoints
// on incremente i de : a chaue pas
for(i6#"i<62om)repoints"iEE)
{
// x augmente de (xmax4xmin)/2om)repoints a chaue pas
x6xminEi%(xmax4xmin)/2om)repoints"
// on imprime x et f(x) dans le fichier gaussBoutput.txt
fprintf(file'"?f ?f!n"'x'norm%exp(4x%x/7))"
$ // fin de la )oucle uand i62om)repoints
// il faut refermer le fichier cree
fclose(file)"
return #"
$
programme_part4_3.c
#include <stdio.h>
// on inclut les li)rairies pour utiliser srt et exp
#include <math.h>
// declaration de la constante P1
#define P1 9.:8:;<7
int main()
{
// declaration d un pointeur de type +1*/ pour ecrire dans un fichier
+1*/ %file"
// pour creer le fichier gaussBoutput.txt
file6fopen("gaussBoutput.txt"'"K")"
// declaration des varia)les
// )ornes de l intervalle et varia)le de la gaussienne
float xmin' xmax' x"
// norme et ecart type de la gaussienne
float norm' sigma"
// i> varia)le muette de la )oucle for" 2om)repoints> nom)re total de points
int i' 2om)repoints"
printf("/ntreC la valeur de sigma >!n")"
// lecture de l ecart type dans la console
scanf("?f"'Dsigma)"
// initialisation des varia)les
xmin64;"
xmax6;"
norm6:/srt(7%P1%sigma%sigma)"
2om)repoints67##"
// la )oucle commence pour i6# et finit en i62om)repoints
// on incremente i de : a chaue pas
for(i6#"i<62om)repoints"iEE)
{
// x augmente de (xmax4xmin)/2om)repoints a chaue pas
x6xminEi%(xmax4xmin)/2om)repoints"
// on imprime x et f(x) dans le fichier gaussBouput.txt
fprintf(file'"?f ?f!n"'x'norm%exp(4x%x/(7%sigma%sigma)))"
$ // fin de la )oucle uand i62om)repoints
// il faut refermer le fichier cree
fclose(file)"
return #"
$
programme_part4_4.c
#include <stdio.h>
// on inclut les li)rairies pour utiliser srt et exp
#include <math.h>
// declaration de la constante P1
#define P1 9.:8:;<7
int main()
{
// declaration des varia)les
// )ornes de l intervalle et varia)le de la gaussienne
float xmin' xmax' x"
// norme de la gaussienne
float norm"
// i> varia)le muette de la )oucle for" 2om)repoints> nom)re total de points
int i' 2om)repoints"
// initialisation des varia)les
xmin64;"
xmax6;"
norm6:/srt(7%P1)"
2om)repoints67##"
i6#"
// la )oucle commence pour i6# et finit en i62om)repoints
// on incremente i de : a chaue pas
Khile(i<62om)repoints)
{
// x augmente de (xmax4xmin)/2om)repoints a chaue pas
x6xminEi%(xmax4xmin)/2om)repoints"

// on imprime x et la valeur de la gaussienne correspondante
printf("?f ?f!n"'x'norm%exp(4x%x/7))"
// on incremente i d une unite
i6iE:"

$ // fin de la )oucle uand i62om)repoints
return #"
$

programme_part4_5.c
#include <stdio.h>
// on inclut les li)rairies pour utiliser srt et exp
#include <math.h>
// declaration de la constante P1
#define P1 9.:8:;<7
int main()
{
// declaration des varia)les
// )ornes de l intervalle et varia)le de la gaussienne
float xmin' xmax' x"
// norme de la gaussienne
float norm"
// i> varia)le muette de la )oucle for" 2om)repoints> nom)re total de points
int i' 2om)repoints"
// initialisation des varia)les
xmin64;"
xmax6;"
norm6:/srt(7%P1)"
2om)repoints67##"
i6#"
// la )oucle commence avec i6#
// elle incremente i de : a chaue pas et tourne tant ue i<62om)repoints
// on executera touAours au moins : fois l instruction
// meme si i>62om)repoints
do
{
// x augmente de (xmax4xmin)/2om)repoints a chaue pas
x6xminEi%(xmax4xmin)/2om)repoints"

// on imprime x et la valeur de la gaussienne correspondante
printf("?f ?f!n"'x'norm%exp(4x%x/7))"
// on incremente i d une unite
i6iE:"

$ // fin de la )oucle uand i62om)repoints
Khile(i<62om)repoints)"
return #"
$
programme_part4_6.c
#include <stdio.h>
int main()
{
int i' A"
int imax6M' Amax6;"

for(i6:"i<6imax"iEE)
{
for(A6:"A<6Amax"AEE)
{
printf("c?d?d "'i'A)"
$
printf("!n")"
$
return #"
$
programme_part4_7.c
#include <stdio.h>
#include <stdli).h>
#include <time.h>
int main()
{
int i'2"
srand8N(time(23**))"
i6:#%drand8N()"
printf("/ntreC un nom)re entre # et :# >!n")"
scanf("?d"'D2)"
printf("i6?d!n"'i)"
if(266i)
{
printf("O5O ... J,30 5J/P .5.2/!n")"
$
return #"
$
programme_part4_8.c

#include <stdio.h>
#include <stdli).h>
#include <time.h>
int main()
{
int i'2"
srand8N(time(23**))"
i6:#%drand8N()"
printf("/ntreC un nom)re entre # et :# >!n")"
scanf("?d"'D2)"
printf("i6?d!n"'i)"
// si 2 et i sont egaux' le programme execute l insctruction
if(266i)
{
printf("O5O ... J,30 5J/P .5.2/!n")"
$
// si 2 et i ne sont pas egaux' le programme execute l insctruction
else
{
printf("P/-I3 ... -/&,GG/2&/P!n")"
$
return #"
$
programme_part4_9.c
#include <stdio.h>
#include <stdli).h>
#include <math.h>
#include <time.h>
int main()
{
// declaration des varia)les
dou)le x' y' -' Pi"
int i' n' 2"
srand8N(time(23**))"
// initialisation des varia)les
26:########"
n6#"

// on utilise une )oucle pour repartir les points dans le carre
for(i6#"i<2"iEE)
{
x6drand8N()"
y6drand8N()"
// on calcul la distance entre le point tire et l origine
-6srt(x%xEy%y)"

// on test si ce point se situe dans le uart de cercle
if(-<6:)
{
// on compta)ilise les points dans le uart de cercle
nEE"
$
$
// on calcul pi en faisant attention d avoir un nom)re decimale
Pi68%(float)n/(float)2"
// on imprime a l ecran la valeur de pi
printf("Pi6?f!n"'Pi)"
return #"
$
Partie /
programme_part5_1.c
#include <stdio.h>
#include <math.h>
#include <stdli).h>
int main()
{
+1*/ %file"
// ouverture d un fichier de donnees dans leuel on va ecrire
file6fopen("out.txt"'"K")"
// declaration des varia)les
// temps caracteristiue de relaxation et pas d integration
dou)le tau6:.#' delta6#.#:"
// )ornes de l intervalle du temps d integration
dou)le a6#')6;%tau"
// varia)le muette pour la )oucle et nom)re d etapes
int i' 26(int)()4a)/delta"
// temps et vitesse (ta)leau a 2E: cases)
dou)le t' vQ2R"
// initialisation des varia)les
vQ#R6:.#" // vitesse initiale
t6#.#" // temps initial
for(i6#"i<2"iEE) // )oucle d integration de la vitesse du )ateau
{
// le temps s ecoule de delta
t6tEdelta"
// calcul de la vitesse au pas suivant (iE:)
vQiE:R6vQiR%(:4delta/tau)"
// impression du temps et de la vitesse
fprintf(file'"?lf ?lf!n"'t'vQiE:R)"
$
fclose(file)"
return #"
$
programme_part5_2.c
#include <stdio.h>
#include <math.h>
#include <stdli).h>
int main()
{
+1*/ %file"
// ouverture d un fichier de donnees dans leuel on va ecrire
file6fopen("out.txt"'"K")"
// declaration des varia)les
// taux de natalite' de mortalite et pas d integration
dou)le alpha6:.#' )eta6#.;' delta6#.#:"
// )ornes de l intervalle du temps d integration
dou)le a6#')6:#"
// varia)le muette pour la )oucle et nom)re d etapes
int i' 26(int)()4a)/delta"
// temps et nom)re de coccinelles(%:##) (ta)leau a 2E: cases)
dou)le t' nQ2R"
// initialisation des varia)les
nQ#R6;.#" // nom)re initial de coccinelles(%:##)
t6#.#" // temps initial
for(i6#"i<2"iEE) // )oucle d integration de la vitesse du )ateau
{
// le temps s ecoule de delta
t6tEdelta"
// calcul du nom)re de coccinelles au pas suivant (iE:)
nQiE:R6nQiR%(:Ealpha%delta4)eta%delta%nQiR)"
// impression du temps et du nom)re de coccinelles
fprintf(file'"?lf ?lf!n"'t'nQiE:R)"

$
fclose(file)"
return #"
$
programme_part5_3.c
#include <stdio.h>
// temps caracteristiue de relaxation
# define tau :.#
// pas d integration
# define delta #.#:
// fonction ui a comme argument un nom)re decimale v
// elle renvoie un nom)re decimale f(v)
dou)le f(dou)le v)
{
// la fonction calcul la valeur v%(:4delta/tau) et la renvoie
return v%(:4delta/tau)"
$
int main()
{
// declaration des varia)les
// )ornes de l intervalle du temps d integration
dou)le a6#')6;%tau"
// varia)le muette pour la )oucle et nom)re d etapes
int i' 26(int)()4a)/delta"
// temps et vitesse (ta)leau a 2E: cases)
dou)le t' vQ2R"
// initialisation des varia)les
vQ#R6:.#" // vitesse initiale
t6#.#" // temps initial
// )oucle d integration de la vitesse du )ateau
for(i6#"i<2"iEE)
{
// le temps s ecoule de delta a chaue pas
t6tEdelta"
// calcul de la vitesse au pas suivant (iE:) grace a la fonction f
vQiE:R6f(vQiR)"
// impression du temps et de la vitesse
printf("?lf ?lf!n"'t'vQiE:R)"
$
return #"
$