You are on page 1of 98

Codification dun algorithme et Programmation procdurale

Partie 01 : Algorithme

Page : 3

Codification dun algorithme et Programmation procdurale

1. INT !"#CTI!N 1.1. Notion de programme Si lon sintresse aux applications de lordinateur, on saperoit quelles sont trs nombreuses. En voici quelques exemples : Etablissement de feuille de payes, de factures Gestion de stoc s !alcul de la tra"ectoire dun satellite Suivi mdical de patients dans un #$pital % &n ordinateur pour quil puisse effectuer des t'c#es aussi varies il suffit de le pro(rammer. Effectivement lordinateur est capable de mettre en mmoire un pro(ramme quon lui fournit puis lexcuter. )lus prcisment, lordinateur possde un ensemble limit doprations lmentaires quil sait excuter. &n pro(ramme est constitu dun ensemble de directives, nommes instructions, qui spcifient : les oprations lmentaires * excuter la faon dont elles senc#a+nent. )our sexcuter, un pro(ramme ncessite quon lui fournisse ce quon peut appel , informations donnes - ou plus simplement , donnes -. En retour, le pro(ramme va fournir des , informations rsultats - ou plus simplement rsultats. )ar exemple un pro(ramme de paye ncessite des informations donnes : noms des employs, situations de famille, nombres d#eures supplmentaires, etc% .es rsultats seront imprims sur les diffrents bulletins de paye. 1.$. %e proce&&u& de la programmation .a pro(rammation consiste, avant tout, * dterminer la dmarc#e permettant dobtenir, * laide dun ordinateur, la solution dun problme donn. .e processus de la pro(rammation se droule en deux p#ases : dans un premier temps, on procde * ce quon appelle lanalyse du problme pos ou encore la rec#erc#e dun al(orit#me / qui consiste * dfinir les diffrentes tapes de la rsolution du problme. !est la partie essentielle dans le processus de pro(rammation. Elle permet de dfinir le contenu dun pro(ramme en termes de donnes et dactions. 0ans un deuxime temps, on exprime dans un lan(a(e de pro(rammation donn, le rsultat de ltape prcdente. !e travail, quoi quil soit facile, exi(e le respect strict de la syntaxe du lan(a(e de pro(rammation. .ors de ltape dexcution, il se peut que des erreurs syntaxiques sont si(nales, ce qui entra+ne des corrections en (nral simple ou des erreurs smantiques plus difficiles * dceler. 0ans ce dernier cas, le pro(ramme produit des rsultats qui ne correspondent pas * ceux escompts : le retour vers lanalyse sera alors invitable.

Un algorithme est une suite dactions que devra effectuer un ordinateur pour arriver un rsultat, partir dune situation donne.
1

Page : 4

Codification dun algorithme et Programmation procdurale

Pro-l0me rel

ANA%.)(

Algorithme
C!"A/(

Programme &ultat&

%e& diffrente& tape& du proce&&u& de programmation 0onc, la rsolution dun problme passe tout dabord par la rec#erc#e dun al(orit#me. .ob"ectif de ce cours est de vous fournir les lments de base intervenant dans un al(orit#me : variable, type, instructions daffectation, de lecture, dcriture, structures. $. %() *A IA+%() $.1. %a notion de ,aria-le 0ans un pro(ramme informatique, on va avoir en permanence besoin de stoc er provisoirement en mmoire des valeurs. 1l peut sa(ir de donnes issues du disque dur ou fournies par lutilisateur 2frappes au clavier3. 1l peut aussi sa(ir de rsultats obtenus par le pro(ramme, intermdiaires ou dfinitifs. !es donnes peuvent 4tre de plusieurs types 2on en reparlera3 : elles peuvent 4tre des nombres, du texte, etc. 0s que lon a besoin de stoc er une information au cours dun pro(ramme, on utilise une variable. &ne variable est un nom qui sert * reprer un emplacement donn de la mmoire, cest * dire que la variable ce nest quune adresse de mmoire. !ette notion contribue considrablement * faciliter la ralisation des pro(rammes. Elle permet de manipuler des donnes sans avoir * se proccuper de lemplacement quelles occupent effectivement en mmoire. )our cela, il vous suffit tout simplement de leur c#oisir un nom. 5ien entendu, la c#ose nest possible que parce quil existe un pro(ramme de traduction 2compilateur, interprteur3 de votre pro(ramme dans le lan(a(e mac#ine 6 cest lui qui attribuera une adresse * c#aque variable. .e pro(rammeur ne conna+t que les noms 7, 89:;7:;, <7!1:E% 1l ne se proccupe pas des adresses qui leur sont attribues en mmoires. .e nom 2on dit aussi identificateur3 dune variable, dans tous les lan(a(es, est form dune ou plusieurs lettres 6 les c#iffres sont (alement autoriss * condition de ne pas appara+tre au dbut du nom. .a plupart des si(nes de ponctuation sont exclus en particulier les espaces. )ar contre, le nombre maximum de caractres autoriss varie avec les lan(a(es. 1l va de deux dans certains lan(a(es "usqu* quarante. 0ans ce cours, aucune contrainte de lon(ueur ne vous sera impose. 0e m4me nous admettrons que les lettres peuvent 4tre indiffrents des ma"uscules ou des minuscules.

Page : '

Codification dun algorithme et Programmation procdurale

emar2ue : )our les noms des variables c#oisisse= des noms reprsentatifs des informations quils dsi(nent 6 ainsi 89:;7:; est un meilleur c#oix que > pour dsi(ner le montant dune facture. &ne variable peut 4tre caractris aussi par sa valeur. 7 un instant donn, une variable ne peut contenir quune seule valeur. 5ien s?r, cette valeur pourra voluer sous laction de certaines instructions du pro(ramme. 9utre le nom et la valeur, une variable peut 4tre caractrise par son type. .e type dune variable dfinit la nature des informations qui seront reprsentes dans les variables 2numriques, caractres%3. !e type implique des limitations concernant les valeurs qui peuvent 4tre reprsentes. 1l limite aussi les oprations ralisables avec les variables correspondantes. 7insi, les oprations arit#mtiques 2addition, soustraction, multiplication, division3 possibles des variables numriques, nont aucun sens pour des variables de type caractres. )ar contre les comparaisons seront possibles pour les deux types. $.$. "claration de& ,aria-le& .a premire c#ose * faire tout au dbut de lal(orit#me, avant de pouvoir utiliser des variables, cest de faire la dclaration des variables. .orsquon dclare une variable, on lui attribue un nom et on lui rserve un emplacement mmoire. .a taille de cet emplacement mmoire dpend du type de variable. !est pour cette raison quon doit prciser lors de la dclaration le type du variable. .a syntaxe dune dclaration de variable est la suivante : ou $.3. T3pe& de ,aria-le& $.3.1. T3pe numri2ue !ommenons par le cas trs frquent, celui dune variable destine * recevoir des nombres. Gnralement, les lan(a(es de pro(rammation offrent les types suivants : E:;1E< .e type entier dsi(ne lensemble des nombres entiers n(atifs ou positifs dont les valeurs varient entre ABC DEF * BC DED. 9n crit alors : VARIABLES i, j, k : ENTIER <EE. .e type rel comprend les variables numriques qui ont des valeurs relles. .a pla(e des valeurs du type rel est : AB,GHx/HBF * A/,GHx/HGI pour les valeurs n(atives /,GHx/HAGI * B,GHx/HBF pour les valeurs positives 9n crit alors : VARIABLES x, y : REEL emar2ue : .e type de variable c#oisi pour un nombre va dterminer les valeurs maximales et minimales des nombres pouvant 4tre stoc s dans la variable. Elle dtermine aussi la prcision de ces nombres 2dans le cas de nombres dcimaux3. VARIABLE nom : TYPE @)E VARIABLES nom1, nom2, :T

Page : 1

Codification dun algorithme et Programmation procdurale

$.3.$. T3pe cha5ne En plus, du type numrique on dispose (alement du type c#a+ne 2(alement appel caractre ou alp#anumrique3. 0ans une variable de ce type, on stoc e des caractres, quil sa(isse de lettres, de si(nes de ponctuation, despaces, ou m4me de c#iffres. .e nombre maximal de caractres pouvant 4tre stoc s dans une seule variable c#a+ne dpend du lan(a(e utilis. 9n crit alors : VARIABLE nom, prenom, adre e : !"AINE &ne c#a+ne de caractres est note tou"ours soit entre (uillemets, soit entre des apostrop#es. !ette notation permet dviter les confusions suivantes : !onfondre un c#iffre et une suite de c#iffres. )ar exemple, GCB peut reprsenter le nombre GCB 2quatre cent vin(tAtrois3, ou la suite de caractres G, C, et B. .a confusion qui consiste * ne pas pouvoir faire la distinction entre le nom dJune variable et son contenu. emar2ue : )our les valeurs des variables de type c#a+ne, il faut respecter la casse. )ar exemple, la c#a+ne Salut est diffrente de la c#a+ne salut. $.3.3. T3pe -oolen 0ans ce type de variables on y stoc e uniquement des valeurs lo(iques K<71 ou L7&>, ;<&E ou L7.SE, H ou /. 9n crit alors : VARIABLE e#a# : B$$LEEN $.3.4. !prateur& et e6pre&&ion& $.3.4.1. !prateur& &n oprateur est un si(ne qui relie deux variables pour produire un rsultat. .es oprateurs dpendent des types de variables mis en "eu. )our le type numrique on a les oprateurs suivants : 7 : 7ddition 8 : Soustraction 9 : 8ultiplication : : 0ivision ; : )uissance ;andis que pour le type c#a+ne, on a un seul oprateur qui permet de concatner deux c#a+nes de caractres. !et oprateur de concatnation est not M. )ar exemple : la c#a+ne de caractres Salut concatner * la c#a+ne tout le monde donne comme rsultat la c#a+ne Salut tout le monde. $.3.4.$. (6pre&&ion& &ne expression est un ensemble de variables 2ou valeurs3 relies par des oprateurs et dont la valeur du rsultat de cette combinaison est unique. )ar exemple : D ING x N /I O yPC nom M prenom oQ x et y sont des variables numriques 2rels ou entiers3 et nom et prenom sont des variables c#a+ne.

Page : 4

Codification dun algorithme et Programmation procdurale

0ans une expression oQ on y trouve des variables ou valeurs numriques, lordre de priorit des oprateurs est important. En effet, la multiplication et la division sont prioritaires par rapport * laddition et la soustraction. )ar exemple, /C R B N I donne comme rsultat G/. Si lon veut modifier cette ordre de priorit on sera obli( dutiliser les parent#se. )ar exemple, /C R 2B N I3 donne comme rsultat SE. $.3.'. %in&truction daffectation .instruction daffection est opration qui consiste * attribuer une valeur * une variable. 9n la notera avec le si(ne . !ette instruction scrit : VARIABLE %a&e'r )ar exemple : 89:;7:; BIHH. 9n dit quon affecte 2ou on attribue3 la valeur BIHH * la variable numrique 89:;7:;. Si dans une instruction daffectation, la variable * laquelle on affecte la valeur et la valeur affecte ont des types diffrents, cela provoquera une erreur. 9n peut aussi attribuer * une variable la valeur dune variable ou dune expression de faon (nrale. 9n crit : VARIABLE E(PRESSI$N )ar exemple : 7 5 7 5RCNI 0ans ce cas, linstruction daffectation sera excute en deux temps : A 0abord, on calcule la valeur de lexpression A 9n affecte la valeur obtenue * la variable * (auc#e. 9n peut m4me avoir des cas oQ la variable de (auc#e qui fi(ure dans lexpression * droite. )ar exemple : 7 7NI 0ans cette exemple, aprs lexcution de linstruction daffectation la valeur de la variable 7 sera au(menter de I. emar2ue : 0ans une instruction daffection on a tou"ours : A * (auc#e de la flc#e daffection un nom de variable A * droite de la flc#e daffectation une valeur ou une expression A lexpression * droite de la flc#e doit 4tre du m4me type que la variable situe * (auc#e. Si dans une instruction daffectation une ces points nest pas respect, cela en(endra une erreur. 1l est * noter que lordre dans lequel sont crites les instructions est essentiel dans le rsultat final. (6emple : CA) I CA) II 7 /I 7 BH 7 BH 7 /I 7prs excution des deux instructions daffection, la valeur de 7 sera : A !as 1 : BH A !as 11 : /I (6ercice& 1. Tuelles seront les valeurs des variables 7 et 5 aprs excution des instructions suivantes U

Page : <

Codification dun algorithme et Programmation procdurale

*aria-le& 7, 5 : (ntier "-ut 7/ 7NB 7B >in

$. Tuelles seront les valeurs des variables 7, 5 et ! aprs excution des instructions suivantes U *aria-le& 7, 5, ! : (ntier "-ut 7I B 7N5 C 5O7 >in

5 ! 7 !

3. Tuelles seront les valeurs des variables 7 et 5 aprs excution des instructions suivantes U "-ut 7 5 7 5 *aria-le& 7, 5 : (ntier I 7NG 7N/ 7OG

>in

4. Tuelles seront les valeurs des variables 7, 5 et ! aprs excution des instructions suivantes U *aria-le& 7, 5, ! : (ntier "-ut B /H 7N5 7N5 ! >in

7 5 ! 5 7

'.Tuelles seront les valeurs des variables 7 et 5 aprs excution des instructions suivantes U "-ut 7 5 7 5 *aria-le& 7, 5 : (ntier I C 5 7

>in

Tuestions : les deux dernires instructions permettentAelles dc#an(er les deux valeurs de 5 et 7 U Si lon inverse les deux dernires instructions, cela c#an(eAtAil quelque c#ose U

Page : =

Codification dun algorithme et Programmation procdurale

1. Ecrire un al(orit#me permettant dc#an(er les valeurs de deux variables 7 et 5, et ce quel que soit leur contenu pralable. 4. 9n dispose de trois variables 7, 5 et !. Ecrive= un al(orit#me transfrant * 5 la valeur de 7, * ! la valeur de 5 et * 7 la valeur de ! 2tou"ours quels que soient les contenus pralables de ces variables3. <. Tue produit lal(orit#me suivant U *aria-le& 7, 5, ! : Caract0re& "-ut 7 5 ! >in VGCBV V/CW 7N5

=. Tue produit lal(orit#me suivant U *aria-le& 7, 5 : Caract0re& "-ut 7 5 ! >in VGCBV V/CW 7M5

Page : 10

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Apr0& e6cution de lin&truction %a ,aleur de& ,aria-le& e&t : 7XB 5XU !XU 7B 7 X B 5 X /H ! X U 5 /H 7 X B 5 X /H ! X /B !7N5 7 X B 5 X /B ! X /B 57N5 A @ 13 + @ 13 C @ 13 7! '. Apr0& e6cution de lin&truction %a ,aleur de& ,aria-le& e&t : 7XI 5XU 7I 7XI 5XC 5C 7XC 5XC 75 A@$ +@$ 57 .es deux dernires instructions ne permettent donc pas dc#an(er les deux valeurs de 5 et 7, puisque lune des deux valeurs 2celle de 73 est ici crase. Si lon inverse les deux dernires instructions, cela ne c#an(era rien du tout, #ormis le fait que cette fois cest la valeur de 5 qui sera crase. 1. .al(orit#me est : "-ut !7 7 5 5 ! >in 9n est obli( de passer par une variable dite temporaire 2la variable !3. 4. .al(orit#me est : "-ut 0! ! 5 57 7 0 >in En fait, quel que soit le nombre de variables, une seule variable temporaire suffit. <. 1l ne peut produire quune erreur dexcution, puisquon ne peut pas additionner des caractres. =. 9n peut concatner ces variables. 7 la fin de lal(orit#me, ! vaudra donc VGCB/CW. 3. %() IN)T #CTI!N) "( %(CT# ( (T (C IT# ( !onsidrons le pro(ramme suivant : *A IA+%( 7 : (NTI( "-ut 7 Y /C Z C >in 1l permet de calculer le carr de /C. .e problme de ce pro(ramme, cest que, si lon veut calculer le carr dun autre nombre que /C, il faut rcrire le pro(ramme.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 11

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

0autre part, la mac#ine calcule le rsultat et lutilisateur qui fait excuter ce pro(ramme ne saura "amais que ce rsultat correspond au carr de /C. !est pour cela quil faut introduire des instructions qui permettent le dialo(ue avec lutilisateur. En effet, il existe une instruction qui permet * lutilisateur de faire entrer des valeurs au clavier pour quelles soient utilises par le pro(ramme. .a syntaxe de cette instruction de lecture est : %I ( :omKariable .orsque le pro(ramme rencontre une instruction .1<E, lexcution du pro(ramme sinterrompt, attendant la saisie dune valeur au clavier. "0& 2ue lon frappe &ur la touche (NT( A le6cution reprend. &ne autre instruction permet au pro(ramme de communiquer des valeurs * lutilisateur en les affic#ant * lcran. .a syntaxe de cette instruction dcriture est : (C I ( :omKariable ou de faon (nrale (C I ( Expression emar2ue : 7vant de lire une variable, il est fortement conseill dcrire des libells * lcran, afin de prvenir lutilisateur de ce quil doit frapper. .a m4me c#ose pour linstruction dcriture. (6emple : *aria-le& 7, !7<<E : el& "(+#T (crire [Entre= un nombre %ire 7 !7<<E Y 7 R 7 (crire [.e carr de ce nombre est : (crire !7<<E >IN

(6ercice& 1. Tuel rsultat produit le pro(ramme suivant U *A IA+%() Kal, 0ouble : (NTI( ) "-ut Kal Y CB/ 0ouble Y Kal R C (C I ( Kal (C I ( 0ouble >in $. Ecrire un pro(ramme qui demande deux nombres entiers * lutilisateur, puis qui calcule et affic#e le somme de ces nombres. 3. Ecrire un pro(ramme qui lit le prix \; dun article, le nombre darticles et le taux de ;K7, et qui fournit le prix total ;;! correspondant. Laire en sorte que des libells apparaissent clairement. 4. Ecrire un pro(ramme qui lit une valeur et qui nous calcule linverse de cette valeur. '. .e surveillant (nral dun tablissement scolaire sou#aite quon lui crit un pro(ramme qui calcule, pour c#aque lve, la moyenne des notes des cinq matires. !es matires sont avec leur coefficient : BATI( ( C!(>>ICI(NT 8at# I

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 1$

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

)#ysique I Lranais G 7n(lais C \istoire A Go(rap#ie Correction& 1. 9n verra appara+tre * lcran : CB/ GEC

$. .e pro(ramme est : *A IA+%() 7, 5, S988E : (NTI( ) "-ut (C I ( [Entre= le premier nombre %ire 7 (C I ( [Entre= le deuxime nombre %ire 5 S988E Y 7 N 5 (C I ( [.a somme de ces deux nombres est : (C I ( S988E >in emar2ue : 9n peut remplacer les deux derniers li(nes par : (C I ( [.a somme de ces deux nombres est : , S988E 3. .e pro(ramme est : *A IA+%() p#t, ttva, pttc : ((%) *A IA+%( nb : (NTI( "-ut (C I ( VEntre= le prix #ors taxes :W %I ( p#t (C I ( VEntre= le nombre darticles :W %I ( nb (C I ( VEntre= le taux de ;K7 :W %I ( ttva )ttc Y nb R p#t R 2/ N ttva3 (C I ( V.e prix toutes taxes est : W, ttva >in 4. .e pro(ramme est : *A IA+%() x, inverse : ((%) "-ut (C I ( VEntre= une valeur :W %I ( x inverse Y / P x (C I ( V.inverse est : W, inverse >in '. .e pro(ramme est : *A IA+%() mat, p#y, an(, fra, #(, moyenne : ((%) "-ut (C I ( VEntre= la note de mat# :W
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 13

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

%I ( mat (C I ( VEntre= la note de p#ysique :W %I ( p#y (C I ( VEntre= la note de franais :W %I ( fra (C I ( VEntre= la note dan(lais :W %I ( an( (C I ( VEntre= la note d#istoireAGo :W %I ( #( moyenne Y 22mat N p#y3 R I N fra R G N 2an( N #(3 R C3 P /F (C I ( V.a moyenne est : W, moyenne >in 4. %A )T #CT# ( A%T( NATI*( 4.1. %e& condition& &imple& &ne condition simple consiste en une comparaison entre deux expressions du m4me type. !ette comparaison sJeffectue avec des oprateurs de comparaison. Koici la liste de ces oprateurs accompa(ns de leur si(nification dans le cas des types numrique ou c#a+ne : !prateur X ]^ ] ^ ]X ^X )ignification numri2ue (al * diffrent infrieur suprieur infrieur ou (al suprieur ou (al )ignification cha5ne (al * diffrent plac avant dans lJordre alp#abtique plac aprs dans lJordre alp#abtique plac avant dans lJordre alp#abtique ou (al plac aprs dans lJordre alp#abtique ou (al

)our la comparaison du type c#a+ne cJest lJordre alp#abtique quJest utilis dans le cas oQ lJon compare deux lettres ma"uscules ou minuscules. 8ais si lJon compare ma"uscules et minuscules, il faut savoir que les ma"uscules apparaissent avant les minuscules. 7insi, par exemple : _8_ ] _m_. 4.$. %e& condition& comple6e& !ertains problmes exi(ent parfois de formuler des conditions qui ne peuvent pas 4tre exprimes sous la forme simple vu en dessus. 7 cet effet, la plupart des lan(a(es autorisent des conditions formes de plusieurs conditions simples relies entre elles par ce quJon appelle des oprateurs lo(iques. !es oprateurs sont : (T, !# et N!N. )our que la condition complexe, (T )ondi#ion2 )ondi#ion1 soit K<71, il faut imprativement que la )ondi#ion1 soit K<71 et que la )ondi#ion2 soit K<71. )our que la condition !# )ondi#ion2 )ondi#ion1 soit K<71, il suffit que )ondi#ion1 soit K<71 ou )ondi#ion2 soit K<71. 1l est * noter que cette condition complexe sera K<71 si )ondi#ion1 et )ondi#ion2 sont K<71. .e :9: inverse une condition : 3 N!N2 )ondi#ion est K<71 si condition est L7&>, et il sera L7&> si condition est K<71.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 14

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

0June manire (nrale, les oprateurs lo(iques peuvent porter, non seulement sur des conditions simples, mais aussi sur des conditions complexes. .Jusa(e de parent#ses permet dans de tels cas de r(ler dJventuels problmes de priorit. )ar exemple, la condition : 2a ] H (T b ^ /3 !# 2a ^ H (T b ^ B3 est K<71 si lJune au moins des conditions entre parent#ses est K<71. 4.3. %a &tructure alternati,e Supposons que nous avons besoin, dans un pro(ramme, dJaffic#er un messa(e prcisant que la valeur dJune variable est positive ou n(ative. 7vec les instructions de base que nous avons vu 2celles qui permettent la manipulation des variables : affectation, lecture, criture3, on ne peut pas. 1l faut introduire une des instructions de structuration du pro(ramme 2ces instructions servent * prciser comment doivent sJenc#a+ner c#ronolo(iquement ces instructions de base3 qui donne la possibilit dJeffectuer des c#oix dans le traitement ralis. !ette instruction sJappelle la structure alternative. Sa syntaxe est : )I )ondi#ion A%! ) *&o) 1 d+in #r')#ion )IN!N *&o) 2 d+in #r')#ion S1 >IN 2ce qui fi(ure aprs Si la condition mentionne aprs )I est K<71, on excute le*&o)1 d+in #r')#ion 2ce qui fi(ure aprs le le mot A%! )36 si la condition est fausse, on excute le *&o)2 d+in #r')#ion mot )IN!N3. (6emple : )I a ^ H A%! ) E!<1<E JJvaleur positiveJJ )IN!N E!<1<E JJvaleur n(ativeJJ >IN )I 0ans ce pro(ramme, on vrifie si la valeur de a est suprieure * H, on affic#era le messa(e JJvaleur positiveJJ. 0ans le cas contraire, il sera affic#e le messa(e JJvaleur n(ativeJJ. .a structure alternative peut prendre une autre forme possible oQ lJune des parties du c#oix est absente. Elle sJcrit dans ce cas : )I condition A%! ) bloc dJinstructions >IN )I (6emple : 0ans un pro(ramme de calcul du montant dJune facture, on applique une remise de /` si le montant dpasse IHHH 0#s. :ous crirons : )I montant ^ IHHH A%! ) montant Y montant R H.SS >IN )I 4.4. %e& &tructure& alternati,e& im-ri2ue& 1l peut arriver que lJune des parties dJune structure alternative contienne * son tour une structure alternative. 0ans ce cas, on dit quJon a des structures alternatives imbriques les unes dans les autres. (6emple : Ecrire un pro(ramme qui donne ltat de leau selon sa temprature. *aria-le ;emp : (ntier "-ut (crire VEntre= la temprature de leau :W %ire ;emp )i ;emp X] H Alor&
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 1'

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

>in

(crire V!est de la (laceV )inon )i ;emp ] /HH Alor& (crire V!est du liquideW )inon (crire V!est de la vapeurW >in&i >in)i

9n peut aussi crire : *aria-le ;emp : (ntier "-ut (crire VEntre= la temprature de leau :W %ire ;emp )i ;emp X] H Alor& (crire V!est de la (laceV >in&i )i ;emp ^ H (t ;emp ] /HH Alor& (crire V!est du liquideW >in&i )i ;emp ^ /HH Alor& (crire V!est de la vapeurW >in&i >in .a premire version est plus simple * crire et plus lisible. Elle est (alement plus performante * lexcution. En effet, les conditions se ressemblent plus ou moins, et surtout on obli(e la mac#ine * examiner trois tests successifs alors que tous portent sur la m4me c#ose, la valeur de la variable ;emp. 8ais aussi, et surtout, nous avons fait des conomies sur le temps dexcution de lordinateur. Si la temprature est infrieure * =ro, celuiAci crit , !est de la (lace - et passe directement * la fin, sans 4tre ralenti par lexamen des autres possibilits. 4.'. Autre forme 0ans des lan(a(es de pro(rammation, la structure alternative peut prendre une autre forme qui permet dimbrique plusieurs. Sa syntaxe est : )(%!Nexpre ion : action/ %a&e'r1 : actionC %a&e'r2 % : action: %a&e'rN )IN!N : action >IN )(%!N Si expre ion est (ale * %a&e'ri , on excute actioni et on passe * la suite de lal(orit#me. Sinon on excute action et on passe * la suite de lal(orit#me. (6ercice& 1. Ecrire un al(orit#me qui demande deux nombres * lutilisateur et linforme ensuite si leur produit est n(atif ou positif 2on laisse de c$t le cas oQ le produit est nul3. 7ttention toutefois : on ne doit pas calculer le produit des deux nombres. $. Ecrire un al(orit#me qui demande trois noms * lutilisateur et linforme ensuite sils sont ran(s ou non dans lordre alp#abtique.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 11

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

3. Ecrire un al(orit#me qui demande un nombre * lutilisateur, et linforme ensuite si ce nombre est positif ou n(atif 2on inclut cette fois le traitement du cas oQ le nombre vaut =ro3. 4. Ecrire un al(orit#me qui demande deux nombres * lutilisateur et linforme ensuite si le produit est n(atif ou positif 2on inclut cette fois le traitement du cas oQ le produit peut 4tre nul3. 7ttention toutefois, on ne doit pas calculer le produit a '. Ecrire un al(orit#me qui demande l'(e dun enfant * lutilisateur. Ensuite, il linforme de sa cat(orie : A , )oussin - de E * D ans A , )upille - de F * S ans A , 8inime - de /H * // ans A , !adet - aprs /C ans 1. a partir dun montant lu, on dtermine un montant net par application dune remise de : A /` si le montant est compris entre CHHH et IHHH 0#s 2valeurs comprises3 A C ` si le montant est suprieur * IHHH 0#s. )olution& 1. .e pro(ramme est : *aria-le& m, n : (ntier "-ut (crire VEntre= deux nombres : W %ire m, n )i m R n ^ H Alor& (crire V.eur produit est positifW )inon (crire V.eur produit est n(atifW >in&i >in $. .e pro(ramme est : *aria-le& a, b, c : Caract0re "-ut (crire VEntre= successivement trois noms : W %ire a, b, c )i a ] b et b ] c Alor& (crire V!es noms sont classs alp#abtiquementW )inon (crire V!es noms ne sont pas classsW >in&i >in 3. .e pro(ramme est : *aria-le n : (ntier "-ut (crire VEntre= un nombre : W %ire n )i n ] H Alor& (crire V!e nombre est n(atifW )inon)i n X H Alor& (crire V!e nombre est nulW )inon (crire V!e nombre est positifW
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 14

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

>in

>in&i

4. .e pro(ramme est : *aria-le& m, n : (ntier "-ut (crire VEntre= deux nombres : W %ire m, n )i m X H !# n X H Alor& (crire V.e produit est nulW )inon)i 2m ] H (T n ] H3 !# 2m ^ H (T n ^ H3 Alor& (crire V.e produit est positifW )inon (crire V.e produit est n(atifW >in&i >in '. .e pro(ramme est : *aria-le a(e : (ntier "-ut (crire VEntre= l'(e de lenfant : W %ire a(e )i a(e ^X /C Alor& (crire V!at(orie !adetW )inon)i a(e ^X /H Alor& (crire V!at(orie 8inimeW )inon)i age ^X F Alor& (crire V!at(orie )upilleW )inon)i age ^X E Alor& (crire V!at(orie )oussinW >in&i >in 1. .e pro(ramme est : *aria-le& montant , taux , remise : el& "-ut (crire VEntre= le montant : W %ire montant )i montant C CHHH Alor& taux Y H )inon )i montant D IHHH Alor& taux Y / )inon taux Y C >in )I >in )i 8ontant Y montant R 2/ O taux P /HH3 (crire V.e montant net est : W , montant >in

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 1<

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

'. %() )T #CT# () (P(TITI*() <eprenons le pro(ramme du surveillant (nral qui calcule la moyenne des notes. .excution de ce pro(ramme fournit la moyenne des notes uniquement pour un seul lve. Sil lon veut les moyennes de CHH lves, il faut r excuter ce pro(ramme CHH fois. 7fin dviter cette t'c#e fastidieux davoir r excuter le pro(ramme CHH fois, on peut faire recourt * ce quon appelle les &tructure& rptiti,e&. 9n dit aussi les &tructure& itrati,e& ou -oucle&. &ne structure rptitive sert * rpter un ensemble dinstructions. 1l existe trois formes de structures rptitives : P!# , TANT E#(, (P(T( . '.1. %a &tructure P!# !ette structure permet de rpter des instructions un nombre connu de fois. Sa syntaxe est : X valbini#ia&A %a& b,ina&PA) "( P!# )omp#e'r in)r-men# 1nstructions * rpter >IN P!# cest ce quon appelle compteur. !est une variable de type entier. )omp#e'r valbini#ia&et %a& b,ina&sont respectivement les valeur initiale et final prise par le compteur. !e sont des valeurs entires. est la valeur dau(mentation pro(ressive du compteur. .a valeur par dfaut du pas est de /. in)r-men# 0ans de telle on peut ne pas le prciser. emar2ue& : )our un pas positif, la valeur n(ative doit 4tre infrieure * la valeur finale. )our un pas n(atif, valeur n(ative doit 4tre suprieure * la valeur finale. Si la valeur initiale est (ale * la valeur finale, la boucle sera excute une seule fois. (6emple : <crivons le pro(ramme du surveillant (nral de faon quil puisse calculer les moyennes de CHH lves. *A IA+%() mat, p#y, an(, fra, #(, moyenne : ((%)

*A IA+%( i : (NTI( "-ut i X / 7 CHH P!# VEntre= la note de mat# :W (C I ( %I ( mat (C I ( VEntre= la note de p#ysique :W %I ( p#y (C I ( VEntre= la note de franais :W %I ( fra (C I ( VEntre= la note an(lais :W %I ( an( (C I ( VEntre= la note d#istoireAGo :W %I ( #( moyenne Y 22mat N p#y3 R I N fra R G N 2an( N #(3 R C3 P /F (C I ( V.a moyenne est : W, moyenne >IN P!# >in (6ercice& 1. Ecrire un al(orit#me qui demande un nombre de dpart, et qui ensuite crit la table de multiplication de ce nombre, prsente comme suit 2cas oQ lJutilisateur entre le nombre D3 : ;able de D :
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 1=

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Dx/XD D x C X /G D x B X C/ % D x /H X DH $. Ecrire un al(orit#me qui demande un nombre de dpart, et qui calcule la somme des entiers "usqu* ce nombre. )ar exemple, si lon entre I, le pro(ramme doit calculer : / N C N B N G N I X /I 3. Ecrire un al(orit#me qui demande un nombre de dpart, et qui calcule sa factorielle. N+ : la factorielle de F, note F a vaut / x C x B x G x I x E x D x F 4. Ecrire un al(orit#me qui demande successivement CH nombres * lutilisateur, et qui lui dise ensuite quel tait le plus (rand parmi ces CH nombres : Entre= le nombre numro / : /C Entre= le nombre numro C : /G % Entre= le nombre numro CH : E .e plus (rand de ces nombres est : /G

8odifie= ensuite lal(orit#me pour que le pro(ramme affic#e de surcro+t en quelle position avait t saisie ce nombre : !tait le nombre numro C '. Ecrire un al(orit#me qui : A lit dabord une valeur A ensuite il va lire successivement CH nombres. A enfin il va dterminer combien de fois la premire valeur a t saisie 2sans compter la premire saisie3. )olution& 1. .e pro(ramme est : *aria-le& i , valeur : (ntier& "(+#T %ire valeur P!# i X / 7 valeur (crire valeur M V > W M i M V X W M valeur R i >IN P!# >IN $. .e pro(ramme est : *aria-le& i , valeur , somme : (ntier& "(+#T %ire valeur somme Y H P!# i X / 7 valeur somme Y somme N i >IN P!# (crire V.a somme des W M valeur M V premiers entiers est : W M somme
!>PPT : " I> : C"C Tertiaire ? TIC
Page : $0

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

>IN 3. .e pro(ramme est : *aria-le& i , valeur , factoriel : (ntier& "(+#T %ire valeur factoriel Y / P!# i X / 7 valeur factoriel Y factoriel R i >IN P!# (crire V.e factoriel de W M valeur M V est : W M factoriel >in 4. .e pro(ramme est : *aria-le& i , a , max , pmax : (ntier& "(+#T (crire , Entre= le nombre numro / %ire a max Y a pmax Y / P!# i X C A CH (crire , Entre= le nombre numro - , i %ire a )I a ^ max A%! ) max Y a pmax Y i >IN )I >IN P!# (crire , .e plus (rand nombre est : - , max (crire , Sa position est : - , pmax >IN '. .e pro(ramme est : *aria-le& i , a , b , S : (ntier& "(+#T (crire , Entre= un c#iffre : %ire a SYH P!# i X / A CH (crire , Entre= un nombre : %ire b )I a X b A%! ) SYSN/ >IN )I >IN P!# , .e nombre de fois de saisie de - , a , , est : - , S (crire >IN '.$. %a &tructure TANT E#( !ette structure permet de rpter les instructions tant 2uune condition est satisfaite. Sa syntaxe est : TANT E#( )ondi#ion 1nstructions * rpter >IN TANT E#(

!>PPT : " I> : C"C Tertiaire ? TIC

Page : $1

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

cest une condition quon appelle parfois condition darr4t. !ette condition est teste avant )ondi#ion la premire excution. !ette structure diffre de la premire par le fait quon va rpter des instructions pour un nombre de fois inconnu au pralable. (6emple : <eprenant tou"ours le pro(ramme de notre surveillant. Sil ne sait pas combien de moyennes * calculer on ne pourra pas utiliser la structure P!# . 0ans ce cas on est obli( dutiliser la structure TANT E#(. .e pro(ramme sera alors : *aria-le& mat, p#y, an(, fra, #(, moyenne : el& *aria-le reponse : Cha5ne "(+#T reponse Y VoW TANT E#( reponse X VoW (crire VEntre= la note de mat# :W %ire mat (crire VEntre= la note de p#ysique :W %ire p#y (crire VEntre= la note de franais :W %ire fra (crire VEntre= la note dan(lais :W %ire an( (crire VEntre= la note d#istoireAGo :W %ire #( moyenne Y 22mat N p#y3 R I N fra R G N 2an( N #(3 R C3 P /F (crire V.a moyenne est : W, moyenne (crire VKoule=Avous continuer oui 2o3 Pnon 2n3 UW %ire reponse >IN TANT E#( >IN (6ercice& 1. Ecrire un al(orit#me qui demande * lutilisateur un nombre compris entre / et B "usqu* ce que la rponse convienne. $. Ecrire un al(orit#me qui demande un nombre compris entre /H et CH, "usqu* ce que la rponse convienne. En cas de rponse suprieure * CH, on fera appara+tre un messa(e : , )lus petit a -, et inversement, , )lus (rand a - si le nombre est infrieur * /H. 3. Ecrire un al(orit#me qui demande un nombre de dpart, et qui ensuite affic#e les dix nombres suivants. )ar exemple, si lJutilisateur entre le nombre /D, le pro(ramme affic#era les nombres de /F * CD. 4. Ecrire un al(orit#me qui demande successivement des nombres * lutilisateur, et qui lui dise ensuite quel tait le plus (rand parmi ces nombres et quel tait sa position. .a saisie des nombres sarr4te lorsque lutilisateur entre un =ro. '. .ire la suite des prix 2en d#s entiers et termine par =ro3 des ac#ats dun client. !alculer la somme quil doit, lire la somme quil paye, et dterminer le reste * rendre. )olution& 1..e pro(ramme est : *aria-le a : "-ut

el

!>PPT : " I> : C"C Tertiaire ? TIC

Page : $$

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Tant Eue a ] / !# a ^ B (crire , Keuille= Saisir une valeur comprise entre / et B %ire a >in Tant Eue >in $. .e pro(ramme est : *aria-le a : el "-ut %ire a Tant Eue a ] /H !# a ^ CH )i a ] /H Alor& (crire , )lus (rand a )inon (crire , )lus petit a >in )i %ire a >in Tant Eue >in 3. .e pro(ramme est : *aria-le a , i : el "-ut (crire , Entre= un nombre %ire a i YaN/ Tant Eue i ] a N /H (crire i i YiN/ >in Tant Eue >in 4. .e pro(ramme est : *aria-le& i , a , max , pmax : (ntier& "(+#T (crire , Entre= le nombre numro / %ire a max Y a pmax Y / iY/ TANT E#( a ]^ H iYiN/ (crire , Entre= le nombre numro - , i %ire a )I a ^ max A%! ) max Y a pmax Y i >IN )I >IN TANT E#( (crire , .e plus (rand nombre est : - , max (crire , Sa position est : - , pmax >IN '. .e pro(ramme est : *aria-le& prixlu , mdu , mpaye , reste : (ntier&
!>PPT : " I> : C"C Tertiaire ? TIC
Page : $3

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

>IN '.3. %a &tructure (P(T( !ette structure sert * rpter des instructions Gu&2uH ce quune condition soit ralise. Sa syntaxe est : (P(T( 1nstructions * rpter I#)E#JA )ondi#ion !onsidrons le pro(ramme suivant : *aria-le& a , c : (ntier& "(+#T (P(T( %ire a cYcRc (crire c I#)E#JA a X H (crire F Lin >IN .es mots (P(T( et I#)E#JA encadrent les instructions * rpter. !ela si(nifie que ces instructions doivent 4tre rpter autant de fois "usqu* ce que la variable a prennent la valeur H. :ote= bien que le nombre de rptition dans cette structure nest indiqu explicitement comme cest la cas de la structure ;7:; T&E. 1l dpend des donnes que lon fournit au pro(ramme. )our bien expliciter cela, voyons ce que produira ce pro(ramme si lon lui fournit successivement les valeurs C, G, H. .e rsultat se prsentera ainsi : G /E H Lin (6ercice& 1. Ecrire un al(orit#me qui demande successivement des nombres * lutilisateur, et qui calcule le nombre de valeurs saisies. .a saisie des nombres sarr4te lorsque lutilisateur entre le caractre , n ou , : -. $. Ecrire un al(orit#me qui demande successivement des nombres * lutilisateur, et qui calcule leur moyenne. .a saisie des nombres sarr4te lorsque lutilisateur entre un =ro. 3. 8odifie= lal(orit#me de lexercice /, de faon quil nous rensei(ne sur le nombre des valeurs positives et sur le nombre des valeurs n(atives. :e compte= pas les valeurs nuls.

"(+#T (crire F Entre= le prix %ire prixlu mdu Y H mdu Y mdu N prixlu TANT E#( prixlu ]^ H (crire F Entre= le prix %ire prixlu mdu Y mdu N prixlu >IN TANT E#( (crire F Entre= le prix pay%ire mpaye reste Y mpaye A mdu (crire , .e reste est : - , reste

!>PPT : " I> : C"C Tertiaire ? TIC

Page : $4

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

4. Ecrire un al(orit#me qui lit les caractres saisies par lutilisateur. 7 la fin ce pro(ramme nous affic#era la p#rase saisie. .a saisie des caractres sarr4te lorsquon tape point , . -. )our lutilisateur veut insrer un espace il lui suffit de tape= sur H. )ar exemple si lutilisateur tape successivement les caractres , b - , , o -, , n -, , " -, , o -, , u -, , r - , , t -, , o -, , u -, , s -, , . - , il nous affic#era la c#a+ne , bon"our tous -. 8ais si il tape , b - , , o -, , n -, , " -, , o -, , u -, , r - , , H -, , t -, , o -, , u -, , s -, , . - , le pro(ramme affic#era , bon"our tous -. )olution& 1. le pro(ramme est : *aria-le& a , compteur : (ntier& *aria-le reponse : Cha5ne "(+#T compteur Y H (P(T( , Entre= un nombre : (crire %ire a compteur Y compteur N / (crire , Koule=Avous continue= 9uiP:on U %ire reponse I#)E#JA reponse X , : - ou reponse X , n (crire , .e nombre de valeurs saisies est : - , compteur >IN $. .e pro(ramme est : *aria-le& a , somme , moyenne , compteur : (ntier& "(+#T compteur Y H somme YH (P(T( , Entre= un nombre : (crire %ire a compteur Y compteur N / somme Y somme N a I#)E#JA a X H 8oyenne Y somme P compteur (crire , .a moyenne de valeurs saisies est : - , moyenne >IN 3. le pro(ramme est : *aria-le& a , npos , nne( : (ntier& *aria-le reponse : Cha5ne "(+#T npos Y H nne( Y H (P(T( , Entre= un nombre : (crire %ire a )I a ^ H A%! ) npos Y npos N / )IN!N )I a ] H A%! ) nne( Y nne( N / >IN )I
!>PPT : " I> : C"C Tertiaire ? TIC
Page : $'

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

>IN )I

>IN 4. .e pro(ramme est : *aria-le& caractere , p#rase : Cha5ne& "(+#T p#rase Y , (P(T( , Entre= une caractre : (crire %ire caractre )I caractere X , H - A%! ) caractere Y , >IN )I p#rase Y p#rase Ncaractere I#)E#JA caractere X , . (crire , .a p#rase rsultante est : - , p#rase >IN 1. %() TA+%(A#K

(crire , Koule=Avous continue= 9uiP:on U %ire reponse I#)E#JA reponse X , 9 - ou reponse X , o (crire , .e nombre de valeurs positives saisies est : - , npos (crire , .e nombre de valeurs n(atives saisies est : - , nne(

1.1. %e& ta-leau6 H une &eul dimen&ion 1ma(ine= que lon veuille calculer la moyenne des notes dune classe dlves. )our linstant on pourrait lal(orit#me suivant : *aria-le& somme, nbEleves, :ote, i : el& "(+#T somme Y H (crire _ :ombre deleves :_ %ire nbEleves P!# i X / A nbEleves (crire _ :ote de leleve numero _, i , _ : _ %ire :ote somme Y somme N :ote >IN P!# (crire _ .a moyenne est de :_, somme P nbEleves >IN Si lon veut tou"ours calculer la moyenne des notes dune classe mais en (ardant en mmoire toutes les notes des lves pour dventuels calculs 2par exemple calculer le nombre dlves qui ont des notes suprieurs * la moyenne3. 0ans ce cas il faudrait alors dclarer autant de variables quil y a dtudiants. 0onc, si lon a /H lves il faut dclarer /H variables et si lon a : il faut dclarer : variables et cest pas pratique. !e quil faudrait cest pouvoir par lintermdiaire dune seule variable stoc er plusieurs valeurs de m4me type et cest le r$le des tableaux. &n ta-leau est un ensemble de valeurs de m4me type portant le m4me nom de variable. !#aque valeur du tableau est repre par un nombre appel indice. .es tableaux cest ce que lon nomme un t3pe comple6e en opposition aux types de donnes simples vus prcdemment. .a dclaration dun tableau sera via la syntaxe suivante dans la partie des dclarations : b#a*&ea' 2nom*re Ta-leau 3 : T3pe nom b#a*&ea' : dsi(ne le nom du tableau nom

!>PPT : " I> : C"C Tertiaire ? TIC

Page : $1

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

nom*re ;ype

: dsi(ne le nombre dlments du tableau. 9n dit aussi sa taille : cest le type du tableau autrement dit le type de tous ces lments

(6emple& : Ta-leau :ote 2CH3 : el :ote 2CH3 est un tableau qui contient vin(t valeurs relles. Ta-leau nom 2/H3 , prenom 2/H3 : Cha5ne :om 2/H3 et prenom 2/H3 sont deux tableaux de /H lments de type c#a+ne. &n tableau peut 4tre reprsent (rap#iquement par 2exemple :ote 2/I33 :

Note 1!

Note "!

Si lon veut accder 2en lecture ou en criture3 * la i me valeur dun tableau en utilisant la syntaxe suivante : 2indi)e 3 nom.#a*&ea' )ar exemple si > est un tableau de /H entiers : > 2C3 Y A I met la valeur AI dans la C me case du tableau En considrant le cas oQ a est une variable de type Entier, a Y > 2C3 met la valeur de la C me case du tableau tab dans a, cestA *A dire I %ire > 2/3 met lentier saisi par lutilisateur dans la premire case du tableau (crire > 2/3 affic#e la valeur de la premire case du tableau emar2ue& : A &n tableau possde un nombre maximal dlments dfini lors de lcriture de lal(orit#me 2les bornes sont des constantes explicites, par exemple /H, ou implicites, par exemple 87>3. !e nombre dlments ne peut 4tre fonction dune variable. A .a valeur dun indice doit tou"ours : 9 4tre un nombre entier 9 4tre infrieure ou (ale au nombre dlments du tableau Exercices 1. !onsidrons les pro(rammes suivants: Ta-leau > 2G3 : (ntier "(+#T > 2/3 Y /C > 2C3 Y I > 2B3 Y F > 2G3 Y CH >IN Ta-leau voyelle 2E3 : Cha5ne "(+#T voyelle 2/3 Y , a voyelle 2C3 Y , e voyelle 2B3 Y , i voyelle 2G3 Y , o -

!>PPT : " I> : C"C Tertiaire ? TIC

Page : $4

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

voyelle 2I3 Y , u voyelle 2E3 Y , y >IN 0onner les reprsentations (rap#iques des tableaux > 2G3 et voyelle 2E3 aprs excution de ces pro(rammes. $. Tuel rsultat fournira lexcution de ce pro(ramme : *aria-le i : (ntier Ta-leau ! 2E3 : (ntier "(+#T P!# i X / A E %ire ! 2i3 >IN P!# P!# i X / A E ! 2i3 Y ! 2i3 R ! 2i3 >IN P!# P!# i X / A E (crire ! 2i3 >IN P!# >IN Si on saisit successivement les valeurs : C , I , B , /H , G , C. 3. Tue fournira lexcution de ce pro(ramme : Ta-leau suite 2F3 : (ntier *aria-le i : (ntier "(+#T Suite 2/3 Y / Suite 2C3 Y / P!# i X B A F suite 2i3 Y suite 2i A /3 N suite 2i A C3 >IN P!# P!# i X /A F (crire suite 2i3 >IN P!# >IN 4. Soit ; un tableau de vin(t lments de types entiers. Ecrire le pro(ramme qui permet de calculer la somme des lments de ce tableau. '. Soit ; un tableau de : entiers. Ecrire lal(orit#me qui dtermine le plus (rand lment de ce tableau. 1. Ecrire un pro(ramme qui permet de lire /HH notes et de dterminer le nombre de celles qui sont suprieures * la moyenne. 4. Soit ; un tableau de : entiers. Ecrire lal(orit#me qui dtermine simultanment la position du plus (rand lment et la position du plus petit lment du tableau. <. Soit ; un tableau de : rels. Ecrire le pro(ramme qui permet de calculer le nombre des occurrences dun nombre > 2cJestA*Adire combien de fois ce nombre > fi(ure dans le tableau ;3.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : $<

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

=. 9n dispose des notes de CI lves 6 c#aque lve peut avoir une ou plusieurs notes mais tou"ours au moins une. Ecrire un pro(ramme permettant dobtenir la moyenne de c#aque lve lorsquon lui fournit les notes. 9n veut que les donnes et les rsultats se prsentent ainsi : :otes de llve numro / 12 12 /1 :otes de llve numro C %% :otes de llve numro CI 10 /1 8oyennes Elve numro / : // %% Elve numro CI : /I 8oyenne de la classe : /C.B .es parties italiques correspondent aux donnes tapes par lutilisateur. .a valeur A/ sert de critre de fin de notes pour c#aque lve. )olution& 1. .a reprsentation (rap#ique du tableau > 2G3 aprs excution du premier pro(ramme est : 1$ ' < $0 .a reprsentation (rap#ique du tableau voyelle 2G3 aprs excution du deuxime pro(ramme est : aeiou3 $. .excution du pro(ramme nous affic#era successivement * lcran : 4 $' = 100 11 4 3. .excution du pro(ramme nous affic#era successivement * lcran : 1 1 $ 3 ' < 13 $1 4. .e pro(ramme est : *aria-le& i , somme : (NTI( )
!>PPT : " I> : C"C Tertiaire ? TIC
Page : $=

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Ta-leau ; 2:3 : (NTI( "(+#T somme Y H P!# i X / A : somme Y somme N ; 2i3 >IN P!# (crire , .a somme de tous les lments du tableau est : - , somme >IN '. .e pro(ramme est : *aria-le& i , max : (NTI( ) Ta-leau ; 2:3 : (NTI( "(+#T max Y ; 2/3 i Y/ (P(T( iYiN/ )I ; 2i3 ^ max A%! ) max Y ; 2i3 >IN )I I#)#EA i X : (crire , .a somme de tous les lments du tableau est : - , somme >IN 1. .e pro(ramme est : *aria-le& i , somme , moyenne , nsup : el& Ta-leau :ote 2/HH3 : el "(+#T somme Y H P!# i X / A /HH %ire :ote 2i3 somme Y somme N :ote 2i3 >IN P!# 8oyenne Y somme P /HH nsup YH P!# i X / A /HH )I :ote 2i3 ^ moyenne A%! ) nsup Y nsup N / >IN )I >IN P!# (crire , .e nombre de notes suprieures * la moyenne est : - , nsup >IN 4. .e pro(ramme est : *aria-le& i , pmax , pmin : (ntier& Ta-leau ; 2:3 : el "(+#T max Y ; 2/3 min Y ; 2/3 pmax Y/ pmin Y / i Y/ (P(T( iYiN/ )I ; 2i3 ^ max A%! )
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 30

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

max pmax

Y ; 2i3 Yi

>IN )I )I ; 2i3 ] min A%! ) min Y ; 2i3 pmin Yi >IN )I I#)#EA i X : (crire , .a position du plus (rand lment du tableau est : - , pmax (crire , .a position du plus petit lment du tableau est : - , pmin >IN <. .e pro(ramme est : *aria-le& > ,i,!ompt : el& *aria-le !ompt :(NTI( Ta-leau ; 2:3 : el "(+#T > %ire P!# iX/ I#)E#JA iX:

)I ; 2i3 X> A%! ) !ompt Y comptN/ >IN )I >IN P!# (crire , .e nombre doccurrences de cet lments du tableau est : - , compt >IN =. .e pro(ramme est : *aria-le& i , note , nnote , snote , smoyenne , cmoyenne : (ntier& Ta-leau moy 2CI3 : el "(+#T P!# i X / A CI (crire , :otes de llve numro - , i snote YH nnote YH (P(T( %ire note )I note ]^ A/ A%! ) snote Y snote N note nnote Ynnote N / >IN )I I#)E#JA note @ 81 moy 2i3 X snote P nnote smoyenne X smoyenne N moy 2i3 >IN P!# (crire , 8oyennes P!# i X / A CI (crire , Elve numro - , i , , : - , moy 2i3 >IN P!# cmoyenne X smoyenne P CI (crire , 8oyenne de la classe : - , cmoyenne >IN
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 31

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

1.$. %e& ta-leau6 d3nami2ue& 1l arrive frquemment que lon ne connaisse pas * lavance le nombre dlments que devra comporter un tableau. 5ien s?r, une solution consisterait * dclarer un tableau avec une taille trs (rande. !ela pourra avoir comme consquence soit que cette taille ne nous nous suffira pas ou quune place mmoire immense sera rserve sans 4tre utilise. 7fin de surmonter ce problme on a la possibilit de dclarer le tableau sans prciser au dpart son nombre dlments. !e nest que dans un second temps, au cours du pro(ramme, que lon va fixer ce nombre via une instruction de reAdimensionnement : edim. (6emple : 9n veut saisir des notes pour un calcul de moyenne, mais on ne sait pas combien il y aura de notes * saisir. .e dbut de lal(orit#me sera quelque c#ose du (enre : Ta-leau *aria-le "(+#T (crire %ire edim >IN (6ercice& 1. In&ertion dun lment dan& un ta-leau Soit ; un tableau de : lments. Ecrire un pro(ramme qui permet dinsrer un lment x * la position i du tableau ;. $. )uppre&&ion dun lment du ta-leau Soit ; un tableau de : lments. Ecrire un pro(ramme qui permet de supprimer un lment x du tableau. )olution& 1. .e pro(ramme est : Ta-leau ; 23 : (ntier *aria-le& i, x, " : (ntier "(+#T (crire , 0onne= la dimension du tableau : %ire edim ; 2:3 P!# " X / A : %ire ; 2"3 >IN P!# , Entre= le nombre * insrer (crire %ire x (crire , Entre= la position oQ insrer ce nombre %ire i edim ; 2: N/3 "X: TANT E#( " c i ; 2"N/3 X ; 2"3 " X"A/ >IN TANT E#( ; 2i3 X x
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 3$

:otes 23 : el nb en (ntier V!ombien y aAtAil de notes * saisir UV nb :otes2nbA/3 %

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

0ans ce pro(ramme on a travaill avec un seul tableau dynamique. 9n peut aussi travailler avec le tableau ; * dimension fixe et en dfinir un autre qui recevra tous les lments de ; plus llment * insrer. .e pro(ramme dans ce cas est : Ta-leau ; 2:3 : (ntier Ta-leau ;r 2:N/3 : (ntier *aria-le& i , x , " , : (ntier "(+#T P!# " X / A : %ire ; 2"3 >IN P!# , Entre= le nombre * insrer (crire %ire x (crire , Entre= la position oQ insrer ce nombre %ire i "X/ X/ TANT E#( d : N / S1 e i 7.9<S ;r 2 3 Y ; 2"3 " Y"N/ S1:9: ;r 2 3 X x L1: S1 X N/ >IN TANT E#( $. .e pro(ramme est : Ta-leau ; 2:3 : (ntier Ta-leau ;r 23 : (ntier *aria-le& i , x , " : (ntier "(+#T P!# " X / A : %ire ; 2"3 >IN P!# , Entre= le nombre * supprimer (crire %ire x " YH : P!# i X / A )I ; 2i3 e x A%! ) "Y"N/ e"im ;r 2"3 ;r 2"3 X ; 2i3 >IN )I >IN P!# 0ans ce pro(ramme on a considr deux tableaux, le tableau ; * dimension fixe et le tableau ;r dynamique. 1l est aussi possible de travailler avec un seul tableau dynamique. Ta-leau ; 23 : (ntier *aria-le& x, " , , : : (ntier& "(+#T (crire , 0onne= la dimension du tableau : %ire edim ; 2:3
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 33

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

P!# " X / A : %ire ; 2"3 >IN P!# , Entre= le nombre * supprimer (crire %ire x "X/ : TANT E#( " )I ; 2"3 X x A%! ) P!# X"A :A/ ; 2 3 X ; 2 N /3 >IN P!# : Y:O/ e"im ; 2:3 )IN!N " Y"N/ >IN )I >IN TANT E#( 1.3. %e& ta-leau6 multidimen&ionnel& :ous avons vu quun tableau * une dimension correspond * une liste ordonne de valeurs, repre c#acune par un indice. 0ans tous les lan(a(es de pro(rammation, il est possible de dfinir des tableaux * deux dimensions 2permettant par exemple de reprsenter des matrices3. 7insi, on pourra placer des valeurs dans un tableau * deux dimensions et cela consiste comme dans le cas des tableaux * une dimension * donner un nom * lensemble de ces valeurs. !#aque valeur est alors repre par deux indices qui prcise la position. 9n dclare un tableau * deux dimensions de la faon suivante : 2i , j 3 : T3pe Ta-leau nom.#a*&ea' nom.#a*&ea': dsi(ne le nom du tableau : dsi(ne le nombre de li(nes du tableau i : dsi(ne le nombre de colonnes du tableau j ;ype : reprsente le type des lments du tableau (6emple : Soit ; 2B , I3 un tableau dentiers. 9n peut reprsenter (rap#iquement par :
# 1 , "!

# $ , "!

; 2/ , G3 et ;2B , G3 sont deux lments du tableau. Entre parent#se on trouve les valeurs des indices spares par une vir(ule. .e premier sert * reprer le numro de la li(ne, le second le numro de la colonne. 9n accde en lecture ou en criture * la valeur dun lment dun tableau * deux dimensions en utilisant la syntaxe suivante : 2i , j 3 Nom.#a*&ea' )ar exemple si ; est dfini par : Ta-leau ; 2 B , C3 : <el
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 34

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

; 2C , /3 Y A/.C met la valeur A/.C dans la case C,/ du tableau En considrant le cas oQ a est une variable de type <el, a Y ; 2C , /3 met A/.C dans a )ar extension, on peut aussi dfinir des tableaux * n dimensions. .eur dclaration sera * lima(e de celle des tableaux * deux dimensions, cestA *A dire : 2i , j , k , %.3 : T3pe Ta-leau nom.#a*&ea' )ar exemple : Ta-leau > 2/H , S , I3 : (ntier 7insi que leur utilisation : > 2C , / , B3 Y /H a Y > 2C , / , B3

(6ercice& 1. !onsidrons le pro(ramme suivant : Ta-leau > 2C , B3 : (ntier *aria-le& i , " , val : (ntier& "(+#T val Y/ P!# i X / A C P!# " X / A B > 2i , "3 Y val val Y val N / >IN P!# >IN P!# P!# i X / A C P!# " X / A B (crire > 2i , "3 >IN P!# >IN P!# a. Tue produit lexcution de ce pro(ramme. -. que produira ce pro(ramme si lon remplace les derniers li(nes par : P!# "X/A B P!# i X / A C (crire > 2i , "3 >IN P!# >IN P!# $.Tuel rsultat fournira ce pro(ramme : Ta-leau > 2G , C3 : (ntier *aria-le& , m : (ntier& "(+#T P!# X/A G P!# m X / A C > 2 , m3 Y >IN P!# >IN P!# P!# X/A G P!# m X / A C (crire > 2 , m3 >IN P!# >IN P!#

Nm

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 3'

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

3. Soit ; un tableau * deux dimensions de vin(t li(nes et cinquante colonnes. a. Ecrire un al(orit#me qui permet de calculer la somme de tous les lments du tableau. -. Ecrire lal(orit#me qui permet de compter le nombre des lments strictement positifs. c. Ecrire lal(orit#me permettant dobtenir la somme des lments positifs 2spos3 et la somme des lments n(atifs 2sne(3 de ce tableau. d. Ecrire lal(orit#me qui dtermine la plus (rande valeur des lments du tableau. e. Ecrire lal(orit#me qui dtermine simultanment llment le plus (rand du tableau ainsi que sa position. )olution& 1. .excution du pro(ramme donnera : .es deux premires boucles du pro(ramme permettent de remplir le tableau. 7insi la reprsentation (rap#ique sera : /CB GIE .es deux dernires boucles permettent daffic#er ces six lments. .e rsultat sera donc : Eue&tion a / C B G I E Eue&tion / G C I B E $. .es deux premires boucles de ce pro(ramme permettent de remplir le tableau. .a reprsentation (rap#ique sera ainsi : CB BG GI IE .es dernires boucles permettent daffic#er les #uit lments du tableau. .e rsultat est : C B B G G I I E 3. Soit ; 2CH , IH3 un tableau de rels. a. .al(orit#me qui calcule la somme de tous les lments du tableau est :
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 31

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Ta-leau ; 2CH , IH3 : el *aria-le& i , " : (ntier& *aria-le som : el "(+#T som L H P!# i X / A CH P!# " X / A IH som Y som N ; 2i , "3 >IN P!# >IN P!# (crire , .a somme de tous les lments du tableau est : - , som -. .al(orit#me qui compte le nombre des lments strictement positifs est : Ta-leau ; 2CH , IH3 : el *aria-le& i , " : (ntier& *aria-le npos : el "(+#T npos L H P!# i X / A CH P!# " X / A IH )I ; 2i , "3 ^ H A%! ) npos Y npos N / >IN )I >IN P!# >IN P!# (crire , .e nombre des lments strictement positifs du tableau est : - , npos c. .al(orit#me permettant dobtenir la somme des lments positifs 2spos3 et la somme des lments n(atifs 2sne(3 de ce tableau est : Ta-leau ; 2CH , IH3 : el *aria-le& i , " : (ntier& *aria-le spos , sne( : el "(+#T spos L H sne( LH P!# i X / A CH P!# " X / A IH )I ; 2i , "3 ^ H A%! ) spos Y spos N ; 2i , "3 )IN!N sne( Y sne( N ; 2i , "3 >IN )I >IN P!# >IN P!# (crire , .a somme des lments positifs du tableau est : - , spos (crire , .a somme des lments n(atifs du tableau est : - , sne( d. .al(orit#me qui dtermine la plus (rande valeur des lments du tableau est : Ta-leau ; 2CH , IH3 : el *aria-le& i , " : (ntier& *aria-le max : el "(+#T max L ; 2/ , /3 P!# i X / A CH
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 34

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

P!# " X / A IH )I ; 2i , "3 ^ max A%! ) max Y ; 2i , "3 >IN )I >IN P!# >IN P!# (crire , .e plus (rand lment du tableau est : - , max (crire , la position de llment i ,X -,imax, ,et "X- "max e. .al(orit#me qui dtermine simultanment llment le plus (rand du tableau ainsi que sa position est : Ta-leau ; 2CH , IH3 : el *aria-le& i , " , imax , "max : (ntier& *aria-le max : el "(+#T max L ; 2/ , /3 P!# i X / A CH P!# " X / A IH )I ; 2i , "3 ^ max A%! ) max Y ; 2i , "3 imax Yi "max Y" >IN )I >IN P!# >IN P!# (crire , .e plus (rand lment du tableau est : - , max 4. %() )T #CT# () 1ma(inons que lon veuille affic#er les notes dune classe dlves par ordre croissant avec les noms et prnoms de c#aque lve. 9n va donc utiliser trois tableaux 2pour stoc er les noms, les prnoms et les notes3. .orsque lon va trier le tableau des notes il faut aussi modifier lordre les tableaux qui contiennent les noms et prnoms. 8ais cela multiplie le risque derreur. 1l serait donc intressant dutiliser ce quon appelle le& &tructure&. .es structures contrairement aux tableaux servent * rassembler au sein dune seule entit un ensemble fini dlments de type ventuellement diffrents. !est le deuxime type complexe disponible en al(orit#mique. 7 la diffrence des tableaux, il nexiste pas par dfaut de type structure cJestA*Adire quon ne peut pas dclarer une variable de type structure. !e quon peut faire cest de construire tou"ours un nouveau type bas sur une structure et aprs on dclare des variables sur ce nouveau type. .a syntaxe de construction dun type bas sur une structure est : T.P( :om0u;ype @ )T #CT# ( a##ri*'#1 : T3pe a##ri*'#2 : T3pe . .. a##ri*'#n : T3pe >IN )T #CT# ( .e type dun attribut peut 4tre : 9 &n type simple 9 &n type complexe - &n tableau - &n type bas sur une structure (6emple :

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 3<

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

T.P( prenom : note : >IN

(tudiant @ )T #CT# ( nom : cha5ne cha5ne el )T #CT# (

0ans cet exemple on a construit un type bas sur une structure. !ette structure a trois E#'dian# attributs 2on dit aussi c#amp3 : nom, prenom et note. T.P( "ate "our : mois : annee >IN @ )T #CT# ( (ntier (ntier : (ntier )T #CT# (

0ans ce deuxime exemple, on a construit un type 1a#e bas sur une structure. !ette structure a aussi trois attributs : "our, mois et annee. 7prs on peut dclarer des variables bas sur ce type. )ar exemple : *aria-le Etud : (tudiant 0onc Etud est une variable de type Etudiant. 1l est possible de dclarer un tableau dlments de ce type Etudiant par exemple. 9n pourra crire donc : Ta-leau Etud 2CH3 : (tudiant Etud 2/3 reprsente le premier tudiant. 8aintenant, pour accder aux attributs dune variable dont le type est bas sur une structure on suffixe le nom de la variable dun point , . - suivi du nom de lattribut. )ar exemple, dans notre cas pour affecter le nom _0inar_ * notre premier tudiant, on utilisera le code suivant : Etud 2/3.nom X , 0ianr (6ercice& 1. 0finisse= la structure , Sta(iaire - constitue des c#amps suivants : Champ T3pe :om !#a+ne )rnom !#a+ne 0atenais Structure .e c#amp , 0atenais - est aussi une structure dont les c#amps sont : Champ T3pe four Entier 8ois Entier 7nne Entier Ecrive= ensuite lal(orit#me qui permet de lire et aprs affic#er le nom, prnom et date de naissance dun sta(iaire. $. 9n sou#aite (rer les notes dun tudiant. )our cela on va dfinir la structure , Etudiant - dont les c#amps sont :

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 3=

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Champ T3pe :om !#a+ne )rnom !#a+ne :ote ;ableau de B lments 8oyenne <el Ecrire lal(orit#me qui permet de lire les informations dun tudiant 2nom, prnom et notes3, de calculer sa moyenne et daffic#er * la fin un messa(e sous la forme suivante : , .a moyenne de ltudiant 0inar @oussef est : /C.GI oQ , 0inar - et , @oussef - sont les noms et prnoms lus et /C.GI est la moyenne calcule. 3. 8odifier lal(orit#me de lexercice prcdent de faon que lon puisse (rer les notes de IH tudiants. )olution& 1. .al(orit#me est : T.P( "ate @ )T #CT# ( four : (ntier 8ois : (ntier 7nnee : (ntier >IN )T #CT# ( T.P( )tagiaire @ )T #CT# ( :om : cha5ne )renom : cha5ne 0atenais : "ate >IN )T #CT# ( *aria-le sta( : )tagiaire "(+#T (crire , Entre= les information du sta(iaire (crire , Entre= le nom %ire sta(.:om (crire , Entre= le prnom %ire sta(.)renom (crire , Entre= le "our de naissance %ire sta(.0ate.four (crire , Entre= le mois de naissance %ire sta(.0ate.8ois (crire , Entre= lanne de naissance %ire sta(.0ate.7nnee (crire , .e nom du sta(iaire est : - , sta(.:om (crire , Son prnom est : - , sta(.)renom (crire ,Sa date de naissance est :-, sta(.0ate.four , ,P-, sta(.0ate.8ois, ,P-, sta(.0ate.7nnee $. .al(orit#me est : T.P( (tudiant @ )T #CT# ( :om : Cha5ne )renom : Cha5ne :ote 2B3 : el 8oyenne : el >IN )T #CT# ( *aria-le i : (ntier *aria-le som : el *aria-le etud (tudiant : "(+#T
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 40

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

(crire , Entre= les information de ltudiant (crire , Entre= le nom %ire etud.:om (crire , Entre= le prnom %ire etud.)renom (crire , Entre= la premire note %ire Etud.:ote 2/3 (crire , Entre= la deuxime note %ire etud.:ote 2C3 (crire , Entre= la troisime note %ire etud.:ote 2B3 som Y H P!# i X / A B som Y etud.:ote 2i3 >IN P!# etud.8oyenne X som P B (crire ,.a moyenne de ltudiant - , etud.:om , , - , etud.)renom , , est : - , etud.8oyenne 3. .al(orit#me est : T.P( (tudiant @ )T #CT# ( :om : Cha5ne )renom : Cha5ne :ote2B3 : el 8oyenne : el >IN )T #CT# ( *aria-le i , " : (ntier *aria-le som : el *aria-le etud2IH3 : (tudiant "(+#T (crire , Entre= les information des tudiants P!# " X / A IH (crire , Entre= le nom %ire etud2"3.:om (crire , Entre= le prnom %ire etud2"3.)renom (crire , Entre= la premire note %ire etud2"3.:ote 2/3 (crire , Entre= la deuxime note %ire etud2"3.:ote 2C3 (crire , Entre= la troisime note %ire etud2"3.:ote 2B3 som Y H P!# i X / A B som Y etud2"3.:ote 2i3 >IN P!# etud 2"3.8oyenne X som P B >IN P!# P!# " X / A IH (crire ,.a moyenne de ltudiant - , etud2"3.:om , , - , etud2"3.)renom , , est : - , etud2"3.8oyenne >IN P!#

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 41

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

<. %() >!NCTI!N) (T P !C("# () En pro(rammation, donc en al(orit#mique, il est possible de dcomposer le pro(ramme qui rsout un problme en des sousApro(rammes qui rsolvent des sous parties du problme initial. !eci permettra damliorer la conception du pro(ramme et ainsi sa lisibilit. .utilisation des sousApro(rammes savre utile aussi dans le cas oQ on constate quune suite dactions se rpte plusieurs fois. 1l existe deux types de sousApro(rammes les fonctions et les procdures. &n sousA pro(ramme est obli(atoirement caractris par un nom 2un identifiant3 unique. .e nom dun sousApro(ramme comme le nom dune variable doit : 9 !ontenir que des lettres et des c#iffres 9 !ommencer obli(atoirement par une lettre .e pro(ramme qui utilise un sousA pro(ramme est appel programme appelant. &n sousApro(ramme peut 4tre invoqu nJimporte oQ dans le pro(ramme appelant en faisant rfrence * son nom. &n pro(ramme ainsi doit suivre la structure suivante : 0finition des constantes 0finition des types 0claration des variables 0finition des sousA pro(rammes "(+#T In #r')#ion d' pro2ramme prin)ipa& >IN <.1. %e& fonction& &ne fonction est un sousApro(ramme qui retourne un &eul rsultat. )our dfinir une fonction on utilise la syntaxe suivante : >!NCTI!N nombfonction 27r(ument/ : T3pe , 7r(umentC : T3pe ,%.3 : T3pe 0clarations "(+#T 1nstructions de la fonction nombfonction Y Kaleur renvoye >IN 9n constate que la dclaration dune fonction revient * lui prciser un nom, un type ainsi quune liste dar(uments. &n ar(ument 2appel param0tre formel3 dun sousA pro(ramme est une variable locale particulire qui est associe * une variable ou constante du pro(ramme appelant. )uisque quun ar(ument est une variable locale, il admet un type. .orsque le pro(ramme appelant appelle le sousApro(ramme il doit indiqu la variable ou la constante de m4me type, qui est associe au paramtre. )ar exemple, le sousApro(ramme 3r permet de calculer la racine carre dun rel. !e sousA pro(ramme admet un seul paramtre de type rel positif. .e pro(ramme qui utilise 3rdoit donner le rel positif dont il veut calculer la racine carre, cela peut 4tre : - une variable, par exemple a - une constante, par exemple I.CI .es ar(uments dune fonction sont en nombre fixe 2c H3. &ne fonction possde un seul type, qui est le type de la valeur retourne qui est affect au nom de la fonction. &ne fois la fonction dfinie, il est possible 2en fonction des besoins3 * tout endroit du pro(ramme appelant de faire appel * elle en utilisant simplement son nom suivi des ar(uments entre parent#ses. .es parent#ses sont tou"ours prsentes m4me lorsquil ny a pas de paramtre. .es ar(uments spcifis lors de lappel de la fonction doivent 4tre en m4me nombre que dans la dclaration de la fonction et des types prvus. 0ans le pro(ramme appelant ces ar(uments sont appels param0tre& effectif&.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 4$

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

.a valeur ainsi renvoye par la fonction peut 4tre utilise dans nimportante quelle expression compatible avec son type. (6emple : >!NCTI!N !alcul 2x : el , y : el , = : el3 : el *aria-le a : (ntier "(+#T a YB !alcul Y 2x N y N =3 R a >IN ga cest un exemple de dclaration de fonction. !ette fonction appele , !alcul - est de type rel et elle admet trois ar(uments de type rel. 8aintenant voici un exemple de pro(ramme complet : >!NCTI!N !alcul 2x : el , y : el , = : el3 : el *aria-le a : (ntier "(+#T a YB !alcul Y 2x N y N =3 R a >IN *aria-le& i , " , , b : el& "(+#T .ire i .ire " .ire b Y !alcul 2i , " , 3 N C (crire b >IN 0ans ce pro(ramme on fait appel a une fonction. Sa valeur est utilise dans une expression. (6ercice 1. 0finir la fonction , Somme - quon lui passe deux valeurs de type entier et qui renvoie comme valeur la somme des valeurs reues. $. 0finir la fonction , 7bsolue - qui renvoie la valeur absolue dune valeur quon lui passe comme paramtre. 3. 0finir la fonction , 1nverse - qui renvoie linverse dune valeur quon lui passe comme paramtre. 4. 0finir la fonction , 8ax - qui renvoie le maximum de deux valeurs. '. Ecrive= un pro(ramme qui lit trois scores et qui utilise la fonction dfinie dans lexercice prcdent pour dterminer le meilleur score et laffic#er aprs. )olution& 1. .a dfinition de la fonction , Somme - est : >!NCTI!N Somme 2x : el , y : el 3 : "(+#T Somme YxNy >IN $. .a dfinition de la fonction , 7bsolue - est : >!NCTI!N 7bsolue 2x : el3 : el "(+#T )I x ^ H A%! ) 7bsolue Yx
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 43

el

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

)IN!N 7bsolue >IN )I >IN

Y A/ R x

3. .a dfinition de la fonction , 1nverse - est : >!NCTI!N 1nverse 2x : el3 : el "(+#T )I x e H A%! ) 1nevrse Y / Px >IN )I >IN G. .a dfinition de la fonction , 8ax - est : >!NCTI!N 8ax 2x : el , y el3 : "(+#T )I x ^ y A%! ) 8ax Yx )IN!N 8ax Yy >IN )I >IN el

'. .e pr(ramme est : >!NCTI!N 8ax 2x : el , y el3 : el "(+#T )I x ^ y A%! ) 8ax Yx )IN!N 8ax Yy >IN )I >IN *aria-le& score/ , scoreC , scoreB , meilbscore : el& "(+#T (crire , Entre= les troix scores : %ire score/ %ire scoreC %ire scoreB meilbscore Y 8ax 28ax 2score/ , scoreC3 , scoreB3 (crire , .e meilleur score est : - , meilbscore >IN <.$. %e& ,aria-le& locale& et glo-ale& .a porte dune variable est lensemble des sousA pro(rammes oQ cette variable est connue cJestA*Adire que les instructions de ces sousApro(rammes peuvent utiliser cette variable. &ne variable dfinie au niveau du pro(ramme principal 2problme appelant3 est appele ,aria-le glo-ale. Sa porte est totale : tout sousApro(ramme du pro(ramme principal peut utiliser cette variable. !ependant, une variable dfinie au sein dun sousApro(ramme est appele ,aria-le locale. .a porte dune variable locale est uniquement le sousApro(ramme qui la dclare. emar2ue : .orsque le nom dune variable locale est identique * une variable (lobale, la variable (lobale est localement masque. 0ans ce sousApro(ramme la variable (lobale devient inaccessible.
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 44

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

(6emple Soit le pro(ramme suivant : >onction Surface 2a : el3 : el *aria-le& valeur , resultat : el& "(+#T valeur Y B./G resulat Y valeur R a Surface Y resultat >IN *aria-le rayon : el "(+#T , Entre= le rayon du cercle : (crire %ire rayon (crire , .a surface de cette cercle est : - , Surface 2rayon3 >IN .es variables %a&e'r et re '&#a# dclares dans la fonction S'r,a)e sont locales. !onsidrons presque le m4me pro(ramme sauf que la variable %a&e'r est dclare maintenant dans le pro(ramme appelant. >onction Surface 2a : el3 : el *aria-le& resultat : el& "(+#T resulat Y valeur R a Surface Y resultat >IN *aria-le valeur , rayon : el "(+#T valeur Y B./G , Entre= le rayon du cercle : (crire %ire rayon (crire , .a surface de cette cercle est : - , Surface 2rayon3 >IN 0ans ce deuxime pro(ramme seule la variable re '&#a# est locale. ;andis que la variable %a&e'r est devenue (lobale. 9n peut par consquent accder * sa valeur dans la fonction S'r,a)e . <.3. %e& pa&&age de param0tre& 1l existe deux types dassociation 2que lon nomme pa&&age de param0treM entre le2s3 paramtre2s3 du sousApro(ramme 2fonction ou procdure3 et variable2s3 du pro(ramme appelant : A Pa&&age par ,aleur A Pa&&age par adre&&e 0ans le cas oQ lon c#oisit pour un paramtre effectif un passa(e par valeur, la valeur de ce paramtre effectif ne c#an(e pas m4me si lors de lappel du sousApro(ramme la valeur du paramtre formel correspondant c#an(e. 9n peut dire que dans ce cas le paramtre effectif et le paramtre formel ont font deux variables diffrents qui ont seulement la m4me valeur. !est la type de passa(e par dfaut. 0ans le cas oQ lon c#oisit pour un paramtre effectif un passa(e par adresse, la valeur de ce paramtre effectif c#an(e si lors de lappel du sousApro(ramme la valeur du paramtre formel correspondant c#an(e. 9n peut dire que dans ce cas le paramtre effectif et le paramtre formel ont font deux variables qui ont le m4me adresse 2par consquent valeur3. )our prciser quil sa(it dun passa(e par adresse, il faut souli(ns les paramtres concerns lors de la dfinition du sousApro(ramme. (6emple !onsidrons les deux pro(rammes suivants : Programme 1 >onction !alcul 2a : el3 : el
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 4'

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

!alcul a

"(+#T

YaRC YaO/ el

>IN *aria-le x : "(+#T x YB (crire !alcul 2x3 (crire x >IN

Programme $ >onction !alcul:2a el3 : "(+#T !alcul YaRC a YaO/ >IN *aria-le x : el "(+#T x YB (crire !alcul 2x3 (crire x >IN

el

0ans le premier pro(ramme on a un passa(e de paramtre par valeur et dans le deuxime on a un passa(e de parametrespar adresse. .e premier pro(ramme affic#era le rsultat suivant : E B car m4me si la valeur de a c#an(e celle de x non. ;andis que le deuxime pro(ramme il affic#era : E C la valeur de x c#an(era car celle de a a c#an(e. <.4. %e& procdure& .es procdures sont des sousA pro(rammes qui ne retournent aucun rsultat. Elles admettent comme les fonctions des paramtres. 9n dclare une procdure de la faon suivante : P !C("# ( nombprocedure 27r(ument/ : T3pe , 7r(umentC : T3pe ,%.3 0clarations "(+#T 1nstructions de la procdure >IN Et on appelle une procdure comme une fonction, en indiquant son nom suivi des paramtres entre parent#ses. (6ercice 1. Ecrire une procdure qui reoit la lon(ueur et la lar(eur dune surface et qui affic#e la valeur de la surface. 0onne= * cette procdure le nom , Surface -. $. Ecrire une procdure qui permet dc#an(er les valeurs de deux variables. 7ppele= cette procdure , Ec#an(er -. 3. 9n dispose dune p#rase dont les mots sont sparer par des point vir(ules. Ecrive= une procdure qui permet de remplacer les points vir(ules par des espaces. 9n suppose quon dispose des fonctions suivantes :
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 41

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

- .on(ueur : permet de calculer la lon(ueur dune c#a+ne de caractres. #tili&ation : .on(ueur 2c#a+ne3 - Extraire : permet dextraire une partie 2ou la totalit3 dune c#a+ne. #tili&ation : Extraire 2c#a+ne , positionbdebut, lon(ueur3 Param0tre : c#a+ne de laquelle on fait lextraction positionbdebut la position * partir de laquelle va commencer lextraction lon(ueur dsi(ne la lon(ueur de la c#a+ne qui va 4tre extraite. )olution& 1. .e pro(ramme qui dfinit la procdure , Surface - est : P !C("# ( Surface 2lon(ueur : el , lar(eur : el3 *aria-le s : el "(+#T s Y lon(ueur R lar(eur (crire , .a surface obtenu est : - , s >IN $. .e pro(ramme qui dfinit la procdure , Ec#an(er - est : P !C("# ( Ec#an(er 2x : el , y : el3 *aria-le = : el "(+#T = Yx x Yy y Y= >IN 3. .e pro(ramme de cette procdure est : P !C("# ( !#an(er 2c#aine : Cha5ne3 *aria-le& i , l : (ntier *aria-le& caract , sc#aine : Cha5ne "(+#T l Y .on(ueur 2c#aine3 sc#aine X , , P!# i X / A l caract Y Extraire 2c#aine , i , /3 )I caract X , 6 - A%! ) caract X , >IN )I sc#aine Y sc#aine M caract >IN P!# c#aine Y sc#aine >IN *aria-le c#aine : Cha5ne *aria-le i : (ntier "(+#T c#aine Y , bon"our6tout6le6monde c#an(er 2c#aine3 (crire c#aine >IN

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 44

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

=. %A (CN( CN( +INAI ( O (CN( CN( "ICN!T!BIE#(M Soit ; un tableau de : lments ordonns et x un lment de m4me type que les lments de ;. 1l sJa(it dJexaminer la prsence de x dans ;. !omme le tableau est ordonn, il satisfait la spcification suivante : i h/ , :A/i ; 2i3 ; 2iN/3 7u lieu de faire une rec#erc#e linaire C, on dcompose le tableau en deux sousAtableaux ;/ et ;C et trois cas peuvent se produire : - x est trouv la rec#erc#e est termin. - la rec#erc#e continue dans ;/. - la rec#erc#e continue dans ;C. (6emple Soit le tableau suivant ; : / C B B D F F // /I G I E D F CH CG

Kous constate= que le tableau ; est d"* ordonn. 9n va voir comment sJapplique la mt#ode de rec#erc#e binaire pour rec#erc#er si x X CH existe dans le tableau ;. 9n divise lJintervalle des indices h/,Fi en deux intervalles h/,Gi et hI,Fi. 9n obtient deux tableaux ;/ et ;C. / C B B D F F // /I x G ;/ I E x j;C D F CH CG

.a rec#erc#e va continuer dans le tableau ;C puisque x 2CH3 est plus suprieur que le plus (rand lment de ;/. 0onc lJintervalle de rec#erc#e devient hI,Fi et on va le diviser * son tour en deux intervalles hI,Ei et hD,Fi. I E D F // /I CH CG x j;C ;/

0e m4me, la rec#erc#e va continuer dans ;C. .Jintervalle de rec#erc#e devient hD,Fi. 9n le divise en deux intervalles hD,Di et hF,Fi. Linalement, x est trouv. D F CH CG x ;/ x j;C .e pro(ramme de la rec#erc#e dic#otomique est le suivant : Ta-leau ;2:3 : (ntier *aria-le& inf , sup , milieu , x : (ntier *aria-le ;rouve : +oolen "(+#T ;rouve Y Laux inf X / sup Y: sup (T ;rouve X Laux TANT E#( inf
C

%arcourir tout le ta&leau # du premier lment au dernier.


Page : 4<

!>PPT : " I> : C"C Tertiaire ? TIC

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

milieu Y 2inf N sup3 "i, C [ "i, est la division entire )I ;2milieu3 X x A%! ) ;rouve Y Krai )IN!N )I ;2milieu3 ] x alor& inf Y inf N / )IN!N sup Y milieu O/ >IN )I >IN )I >IN TANT E#( )I ;rouve X Krai A%! ) (crire , .lment - , x , , existe dans ; )IN!N (crire , .lment - , x , , nexiste pas dans ; >IN )I >IN 10. %() A%/! ITNB() "( T I ;rier les lments dun tableau revient * ordonner tous ces lments selon un ordre croissant ou dcroissant. Soit ; un tableau de : lments muni dune relation dordre d. ;rier ce tableau cest construire un al(orit#me qui devra satisfaire * la spcification suivante : i h/ , :A/i ; 2i3 ; 2iN/3 0ans ce para(rap#e on va traiter plusieurs al(orit#mes de tri : tri par slection, tri par bulle, tri par compta(e, tri par insertion, tri par s#ell. 10.1. Tri par -ulle Principe !e tri permet de faire remonter petit * petit un lment trop (rand vers la fin du tableau en comparant les lments deux * deux. Si un lment dindice i est suprieur * un lment dindice iN/ on les c#an(e et on continue avec le suivant. .orsquon atteint le fin du tableau on repart du dbut. 9n sarr4te lorsque tous les lments du tableau sont bien placs cJestA*Adire quon aura aucun c#an(ement dlments * effectuer. Algorithme Ta-leau ;2:3 : (ntier& *aria-le& " , nc : (ntier& "(+#T (P(T( nc YH P!# " X / A 2:A/3 )I ;2"3 ^ ;2"N/3 A%! ) nc = ;2"3 ;2"N/3 >IN )I >IN P!# I#)#E#A nc X H >IN (6emple

Y nc N/ Y ;2"3 Y ;2"N/3 Y=

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 4=

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Soit le tableau suivant : IC /H / CI +oucle (P(T( (tat du ta-leau /H IC / CI /H / IC CI /H / CI IC / /H CI IC / /H CI IC / /H CI IC / /H CI IC H *aleur de nc B /

Itration 1 Itration $ Itration 3

10.$. Tri par &lection Principe : Soit ; un tableau de : lments. 9n c#erc#e le plus petit lment du tableau et on le place * la premire position. 7prs, on c#erc#e le plus petit dans les 2:A/3 qui reste et on le place en deuxime position et ainsi de suite. IC /H / CI EC B F II B CB / IC /H CI EC B F II B CB / B IC /H CI EC F II B CB / B B IC /H CI EC F II CB / B B F IC /H CI EC II CB / B B F /H IC CI EC II CB / B B F /H CB IC CI EC II / B B F /H CB CI IC EC II / B B F /H CB CI IC EC II / B B F /H CB CI IC II EC Algorithme : )9&< i 7..7:; 0E / 7 S L71<E )etit ' ;75 2i3 )9&< " 7..7:; 0E i 7 /H L71<E Si 2;75 2"3 ] petit3 7.9<S petit ' ;75 2"3 6 position ' " LS1 Lin)our )9&< " 7..7:; 0E position 7 iN/ )7S O/ L71<E ;752"3 ' ;75 2"A/3 6 Lin)our ;75 2i3 ' petit 6 Lin)our '.4.$8 %e tri -ulle : L71<E 1nversion ' L7&> )9&< i 7..7:; 0E / 7 S L71<E Si 2;75 2i3 ^ ;75 2iN/33 7.9<S ;ampon ' ;75 2i3 6 ;75 2i3 ' ;75 2iN/3 6

!>PPT : " I> : C"C Tertiaire ? TIC

Page : '0

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

;75 2iN/3 ' ;ampon 1nversion ' K<71 LS1 Lin)our f&ST&7 2inversion X L7&>3 6 '.4.38 %e tri par permutation : )9&< i 7..7:; 0E / 7 S L71<E S1 2;75 2iN/3 ] ;75 2i33 7.9<S 7bou(er ' ;75 2iN/3 " ' /6 ;anTue 22" ] i3 E; 2;75 2"3 ] ;75 2iN/333 Laire " ' "N/ L;T )9&< 7..7:; 0E iN/ 7 "N/ )7S O/ Laire ;75 2 3 ' ;75 2 A/3 Lin)our ;75 2"3 ' abou(er LS1 Lin )our '.4.48 %e tri par comptage : )9&< i 7..7: 0E / 7 /H L71<E <ES 2i3 ' H :5 2i3 ' H )9&< " 7..7:; 0E / 7 /H L71<E Si ;75 2"3 ] ;75 2i3 7.9<S :5 2i3 ' :5 2i3 N / LS1 Lin)our Lin)our )9&< i 7..7:; de / 7 /H L71<E " ' :5 2i3 ;antTue <ES 2"3 ]^ H Laire " ' "N/ L;T <ES 2"3 ' ;75 2i3 Lin)our '.4.'8 %e tri alpha-ti2ue : )9&< nbmots 7..7:; 0E / 7 /H Laire .1<E 7LL1!\E< , Entrer le mot suivant 89;

!>PPT : " I> : C"C Tertiaire ? TIC

Page : '1

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

)luspetit " Laire

' K<71 ' / ;7:;T&E 2pluspetit E; 2" ] nbmots33 ' / ;antTue 2289;S 2", 3 X 89; 2 33 E; ]X CH3

Laire L;T 7.9<S " S1:9: )luspetit LS1 L;T Si 2" ] nbmots3 7.9<S )9&< i 7..7:; 0E nbmots 7 "N/ )7S O/ Laire )9&< Laire 89;S 2i, 3 Lin)our Lin)our LS1 )9&< 7..7:; 0E / 7 CH Laire 89;S 2", 3 ' 89; 2 3 Lin)our Lin)our )9&< i 7..7:; 0E / 7 nbmots Laire 7LL1!\E< 89;S 2i3 Lin)our 7..7:; 0E / 7 CH ' 89;S 2iA/, 3 ' N/ Si 289;S 2", 3 ] 89; 2 33 ' "N/ ' L7&>

!>PPT : " I> : C"C Tertiaire ? TIC

Page : '$

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Partie 0$ : IA*A

!>PPT : " I> : C"C Tertiaire ? TIC

Page : '3

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

1. Pr&entation fava est un lan(a(e de pro(rammation * usa(e (nral, volu et orient ob"et dont la syntaxe est proc#e du !. 1l existe C types de pro(rammes en fava : les applets et les applications. &ne application autonome 2stand alone pro(ram3 est une application qui sJexcute sous le contr$le direct du systme dJexploitation. &ne applet est une application qui est c#ar(e par un navi(ateur et qui est excute sous le contr$le dJun plu( in de ce dernier. !e c#apitre contient plusieurs sections :

.es caractristiques 5ref #istorique de fava .es diffrentes ditions et versions de fava &n rapide tour dJ#ori=on des 7)1 et de quelques outils .es diffrences entre fava et favaScript .Jinstallation du f0k

1.1. %e& caractri&ti2ue& fava possde un certain nombre de caractristiques qui ont lar(ement contribu * son norme succs : le source est compil en pseudo code ou byte code puis excut par un interprteur fava : la fava Kirtual 8ac#ine 2fK83. !e concept est * la base du slo(an de Sun pour fava : l9<7 2lrite 9nce, <un 7nym#ere : fava est crire une fois, excuter partout3. En effet, le byte code, sJil ne contient pas interprt de code spcifique * une plateAforme particulire peut 4tre excut et obtenir quasiment les m4me rsultats sur toutes les mac#ines disposant dJune fK8. il nJy a pas de compilation spcifique pour c#aque plate forme. .e code fava est reste indpendant de la mac#ine sur laquelle il sJexcute. 1l est possible indpendant de dJexcuter des pro(rammes fava sur tous les environnements qui toute plateA possdent une fava Kirtual 8ac#ine. !ette indpendance est assure au forme niveau du code source (r'ce * &nicode et au niveau du byte code. comme la plupart des lan(a(es rcents, fava est orient ob"et. !#aque fic#ier source contient la dfinition dJune ou plusieurs classes qui sont fava est orient utilises les unes avec les autres pour former une application. fava nJest ob"et pas compltement ob"et car il dfinit des types primitifs 2entier, caractre, flottant, boolen,...3. le c#oix de ses auteurs a t dJabandonner des lments mal compris ou mal exploits des autres lan(a(es tels que la notion de pointeurs 2pour fava est simple viter les incidents en manipulant directement la mmoire3, lJ#rita(e multiple et la surc#ar(e des oprateurs, ... toutes les variables sont types et il nJexiste pas de conversion fava est automatique qui risquerait une perte de donnes. Si une telle conversion fortement typ doit 4tre ralise, le dveloppeur doit obli(atoirement utiliser un cast ou une mt#ode statique fournie en standard pour la raliser. lJallocation de la mmoire pour un ob"et est automatique * sa cration et fava assure la fava rcupre automatiquement la mmoire inutilise (r'ce au (arba(e (estion de la collector qui restitue les =ones de mmoire laisses libres suite * la mmoire destruction des ob"ets.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : '4

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

la scurit fait partie int(rante du systme dJexcution et du compilateur. &n pro(ramme fava plant ne menace pas le systme dJexploitation. 1l ne peut pas y avoir dJaccs direct * la mmoire. .Jaccs au disque dur est r(lement dans une applet. .es applets fonctionnant sur le leb sous soumises aux restrictions suivantes dans la version /.H de fava : R aucun pro(ramme ne peut ouvrir, lire, crire ou effacer un fic#ier sur le fava est s?r systme de lJutilisateur R aucun pro(ramme ne peut lancer un autre pro(ramme sur le systme de lJutilisateur R toute fen4tre cre par le pro(ramme est clairement identifie comme tant une fen4tre fava, ce qui interdit par exemple la cration dJune fausse fen4tre demandant un mot de passe R les pro(rammes ne peuvent pas se connecter * dJautres sites leb que celui dont ils proviennent. fava est le pseudo code a une taille relativement petite car les bibliot#ques de conome classes requises ne sont lies quJ* lJexcution. fava est il permet lJutilisation de t#reads qui sont des units dJexcution isoles. .a multit'c#e fK8, elle m4me, utilise plusieurs t#reads. .es pro(rammes fava excuts localement sont des applications, ceux qui tournent sur des pa(es leb sont des applets. .es principales diffrences entre une applet et une application sont :

les applets nJont pas de mt#ode main23 : la mt#ode main23 est appele par la mac#ine virtuelle pour excuter une application. les applets ne peuvent pas 4tre testes avec lJinterprteur mais doivent 4tre int(res * une pa(e \;8., elle m4me visualise avec un navi(ateur disposant dJun polu( in sac#ant (rer les applets fava, ou testes avec lJapplet viemer.

1.$. +ref hi&tori2ue de Ia,a .es principaux vnment de la vie de fava sont les suivants : Anne /SSI /SSE /SSE /SSD /SSF /SSS CHHH CHHC fCSE CHHG fCSE (,nement& mai : premier lancement commercial "anvier : f0k /.H septembre : lancement du f0! fvrier : f0k /./ dcembre : lancement de fCSE et du f!) dcembre : lancement fCEE mai : fCSE /.B /.G I.H

!>PPT : " I> : C"C Tertiaire ? TIC

Page : ''

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

1.3. %e& diffrente& dition& et ,er&ion& de Ia,a Sun fourni (ratuitement un ensemble dJoutils et dJ7)1 pour permettre le dveloppement de pro(rammes avec fava. !e it, nomm f0k, est librement tlc#ar(eable sur le site meb de Sun #ttp:PP"ava.sun.com ou par L;) .e f<E 2fava <untime Environment3 contient uniquement lJenvironnement dJexcution de pro(rammes fava. .e f0k contient lui m4me le f<E. .e f<E seul doit 4tre install sur les mac#ines oQ des applications fava doivent 4tre excutes. 0epuis sa version /.C, fava a t renomm fava C. .es numros de version /.C et C dsi(nent donc la m4me version. .e f0k a t renomm fCS0k 2fava C Softmare 0evelopment kit3 mais la dnomination f0k reste encore lar(ement utilise, * tel point que la dnomination f0k est reprise dans la version I.H. .e f<E a t renomm fC<E 2fava C <untime Environment3. ;rois ditions de fava existent :

fC8E : fava C 8icro Edition fCSE : fava C Standard Edition fCEE : fava C Entreprise Edition

Sun fourni le f0k, * partir de la version /.C, sous les plateAformes lindoms, Solaris et .inux. .a version /.B de fava est dsi(ne sous le nom fava C version /.B. .a version /.I de fava est dsi(ne officiellement sous le nom fCSE version I.H. .a documentation au format \;8. des 7)1 de fava est fournie sparment. 8al(r sa taille imposante, cette documentation est indispensable pour obtenir des informations compltes sur toutes les classes fournies. .e tableau ci dessous rsume la taille des diffrents composants selon leur version pour la plateAforme lindoms. *er&ion *er&ion *er&ion *er&ion *er&ion *er&ion 1.0 1.1 1.$ 1.3 1.4 '.0 F,E 8o CH 8o BH 8o GD 8o GG 8o IB 8o IS 8o /C 8o D 8o /G 8o BI 8o GH 8o /E 8o FB 8o C/ 8o /HE 8o BH 8o /GG 8o GB,I 8o CCB 8o

f0k compress f0k install f<E compress f<E install 0ocumentation compresse 0ocumentation dcompresse

1.3.1. Ia,a 1.0 !ette premire version est lance officiellement en mai /SSI. 1.3.$. Ia,a 1.1 !ette version du f0k est annonce officiellement en mars /SSD. Elle apporte de nombreuses amliorations et dJimportantes fonctionnalits nouvelles dont :

!>PPT : " I> : C"C Tertiaire ? TIC

Page : '1

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

les fava beans les fic#iers f7< <81 pour les ob"ets distribus la srialisation lJintrospection f05! pour lJaccs aux donnes les classes internes lJinternationalisation un nouveau modle de scurit permettant notamment de si(ner les applets f:1 pour lJappele de mt#odes natives ...

1.3.3. Ia,a 1.$ !ette version du f0k est lance fin /SSF. Elle apporte de nombreuses amliorations et dJimportantes fonctionnalits nouvelles dont :

un nouveau modle de scurit bas sur les policy les fL! sont incluses dans le f0k 2Smin(, favaC0, accessibility, dra( M drop ...3 f05! C.H les collections support de !9<57 un compilateur f1; est inclus dans le f0k de nouveaux format audio sont supports ...

fava C se dcline en B ditions diffrentes qui re(roupent des 7)1s par domaine dJapplication :

Ia,a $ Bicro (dition OI$B(M : contient le ncessaire pour dvelopper des applications capable de fonctionner dans des environnements limits tels que les assistants personnels 2)073, les tlp#ones portables ou les systmes de navi(ation embarqus Ia,a $ )tandard (dition OI$)(M : contient le ncessaire pour dvelopper des applications et des applets. !ette dition reprend le f0k /.H et /./. Ia,a $ (nterpri&e (dition OI$((M : contient un ensemble de plusieurs 7)1 permettant le dveloppement dJapplications destines aux entreprises tel que f05! pour lJaccs aux bases de donnes, Ef5 pour dvelopper des composants orients mtiers, Servlet P fS) pour (nrer des pa(es \;8. dynamiques, ... !ette dition necessite le fCSE pour fonctionner.

.e but de ces trois ditions est de proposer une solution reposant sur fava quelque soit le type de dveloppement * raliser. 1.3.4. I$)( 1.3 !ette version du f0k apporte de nombreuses amliorations notamment sur les performances et des fonctionnalits nouvelles dont :

!>PPT : " I> : C"C Tertiaire ? TIC

Page : '4

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

f:01 est inclus dans le f0k #otspot est inclus dans la fK8 ...

.a rapidit dJexcution a t (randement amliore dans cette version. 1.3.'. I$)( 1.4 Onom de code BerlinM !ette version du f0k, lance dbut CHHC, apporte de nombreuses amliorations notamment sur les performances et des fonctionnalits nouvelles dont :

f7>) est inclus dans le f0k pour le support de >8. f05! version B.H nem 1P9 7)1 pour complter la (estion des entrePsortie lo((in( 7)1 pour la (estion des lo(s applicatives une 7)1 pour utiliser les expressions r(ulires une api pour (rer les prfrences utilisateurs f77S est inclus dans le f0k pour lJaut#entification un ensemble dJ7)1 pour utiliser la crypto(rap#ie lJoutil fava lebStart ...

!ette version a"oute un nouveau mot cl au lan(a(e pour utiliser les assertions : assert. 1.3.1. I$)( '.0 Onom de code TigerM .a version /.I du fCSE est spcifie par le f!) sous la fS< /DE. Elle devrait int(rer un certain nombre de fS< dans le but de simplifier les dveloppements en fava. !es volutions sont rparties dans une quin=aine de fS< qui seront int(res dans la version /.I de fava. fS<AHHB f8> 8ana(ement 7)1 fS<AH/B 0ecimal 7rit#metic fS<AH/G Generic ;ypes fS<AHCF S7S. fS<A//G f05! 7)1 <omsets fS<A/BB :em 8emory 8odel and t#read fS<A/EB )rofilin( 7)1 fS<A/EE !oncurrency &tilities fS<A/DG 8onitorin( and 8ana(ement for t#e fK8 fS<A/DI 8etadata facility fS<A/SS !ompiler 7)1s fS<ACHH :etmor ;ransfer Lormat for fava 7rc#ives fS<ACH/ Lour .an(ua(e &pdates fS<ACHG &nicode Surro(ates fS<ACHE f7>) /.B .a version /.I de fava est dsi(ne officiellement sous le nom fCSE version I.H.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : '<

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

1.3.4. %e& future& ,er&ion& de Ia,a *er&ion /.G 8erlin /.G./ \opper CHHC /.G.C 8antis CHHB /.I ;i(er CHHG /.I./ 0ra(onfly UUU /.E 8ustan( UUU 1.3.<. %e r&um de& diffrente& ,er&ion& Ia,a 1.0Ia,a 1.1Ia,a 1.$I$)( 1.3I$)( 1.4 I$)( '.0 :ombre de de pac a(es F CB IS DE /BI /EE :ombre de classes CH/ IHB /ICH /FGH CSSH BCFH Nom de code CHH/ "ate de &ortie

1.3.=. %e& e6ten&ion& du I"P Sun fourni un certains nombres dJ7)1 supplmentaires qui ne sont pas initialement fournies en standard dans le f0k. !es 7)1 sont int(res au fur et * mesure de lJvolution de fava. (6ten&ion "e&cription fava :amin( and directory interface !et 7)1 permet dJunifier lJaccs f:01 * des ressources. Elle est int(re a fava /.B !ette 7)1 permet de (rer des emails. Elle est int(re a la fava mail plateforme fCEE. !ette 7)1 permet de mettre en oeuvre des (rap#ismes en B fava B0 dimensions fava 8edia !ette 7)1 permet dJutiliser des composants multimdia fava !ette 7)1 permet de crer des servlets 2composants serveurs3. Elle Servlets est int(re a la plateforme fCEE. fava \elp !ette 7)1 permet de crer des aides en li(ne pour les applications !ette 7)1 permet dJutiliser fava avec des appareils qui ne sont pas fini des ordinateurs !ette 7)1 permet le parsin( et le traitement de document >8.. Elle f7>) est int(r a fava /.G !ette liste nJest pas ex#austive. 1.4. #n rapide tour dJhoriQon de& API et de 2uel2ue& outil& .a communaut fava est trs productive car elle re(roupe :

Sun, le fondateur de fava le f!) 2fava !ommunity )rocess3 : cJest le processus de traitement des volutions de fava diri( par Sun. !#aque volution est traite dans une fS< 2fava Specification <equest3 par un (roupe de travail constitu de diffrents acteurs du monde fava des acteurs commerciaux dont tous les plus (rands acteurs du monde informatique except 8icrosoft

!>PPT : " I> : C"C Tertiaire ? TIC

Page : '=

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

la communaut libre qui produit un trs (rand nombre dJ7)1 et dJoutils pour fava

7insi lJensemble des 7)1 et des outils utilisables est norme et volue trs rapidement. .es tableaux ci dessous tentent de recenser les principaux par t#me. I$)( 1.4 fava 5ean <eflexion !ollection :et 2rseau3 1nternationalisation %e& outil& de )un far favadoc fava fa arta ;omcat f&nit leb Start fa arta 7nt Eclipse f5oss flS0k 7pac#e 7xis %e& outil& li-re& Ole& plu& connu&M <81 )references Exp r(ulire 19 .o((in( Security 7pplet 7l; fL! Smin(

%e& autre& API "onne& Re- (ntrepri&e fava 8ail f:01 Ef5 f8S f8> f;7 <81A119) fava 10. f1:1 f>;7

KB% f7>) S7> 098 f7>8 f7>< f7>A<)! S77f f7>5

"i,er& f71 f77S f!7 f!E fava \elp f8L fSSE fava speec# fava B0

f05! f09

Servlets fS) fS;. fave Server Laces

%e& API de la communaut open &ource "onne& Re- (ntrepri&e KB% "i,er& 9f5 !ator #ibernate fa arta Struts lebmacro Expresso 5arracuda ;urbine 7pac#e >erces 7pac#e >alan 7pac#e 7xis f098 098Gf

fa arta .o(G" fa arta re(exp

1.'. %e& diffrence& entre Ia,a et Ia,a)cript 1l ne faut pas confondre fava et favaScript. favaScript est un lan(a(e dvelopp par :etscape !ommunications. .a syntaxe des deux lan(a(es est trs proc#e car elles drivent toutes les deux du !NN. 1l existe de nombreuses differences entre les deux lan(a(es :

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 10

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Ia,a 7uteur Lormat Stoc a(e &tilisation Execution )99 9rient 0velopp par Sun 8icrosystems !ompil sous forme de byteAcode 7pplet tlc#ar( comme un lment de la pa(e meb &tilisable pour dvelopper tous les types dJapplications Execut dans la fK8 du navi(ateur ob"ets

Ia,a&cript 0velopp par :etscape !ommunications 1nterprt Source insr dans la pa(e meb &tilisable uniquement pour _dynamiser_ les pa(es meb Execut par le navi(ateur 8anipule des ob"ets mais ne permet pas dJen dfinir )as de contr$le de type !ode simple

;ypa(e Lortement typ !omplxit du !ode relativement complexe code

1.1. %Jin&tallation du I"P .e f0k et la documentation sont librement tlc#ar(eable sur le site meb de Sun : #ttp:PP"ava.sun.com 1.1.1. %Jin&tallation de la ,er&ion 1.3 "# I"P de )un &ou& RindoS& =6 )our installer le f0k /.B sous lindoms Sx, il suffit de tlc#ar(er et dJexcuter le pro(ramme : "Csd /bBbHAmin.exe .e pro(ramme commence par dsarc#iver les composants.

.e pro(ramme utilise 1nstallS#ield pour (uider et raliser lJinstallation.

.Jinstallation vous sou#aite la bienvenue et vous donne quelques informations dJusa(e.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 11

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

.Jinstallation vous demande ensuite de lire et dJapprouver les termes de la licence dJutilisation.

.Jinstallation vous demande le rpertoire dans lequel le f0k va 4tre install. .e rpertoire propos par dfaut est pertinent car il est simple.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 1$

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

.Jinstallation vous demande les composants * installer :


)ro(ram Liles est obli(atoire pour une premire installation .es interfaces natives ne sont utiles que pour raliser des appels de code natif dans les pro(rammes fava .es dmos sont utiles car ils fournissent quelques exemples les sources contiennent les sources de la plupart des classes fava crites en fava. 7ttention * lJespace disque ncessaire * cet lment

.Jinstallation se poursuit par la copie des fic#iers et la confi(uration du f<E. 1.1.$. %Jin&tallation de la documentation de Ia,a 1.3 &ou& RindoS& .Jarc#ive contient la documentation sous forme dJarborescence dont la racine est "d /.Bndocs.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 13

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Si le rpertoire par dfaut a t utilis lors de lJinstallation, il suffit de dcompresser lJarc#ive * la racine du disque !:n.

1l peut 4tre pratique de dsarc#iver le fic#ier dans un sous rpertoire, ce qui permet de reunir plusieurs versions de la documentation. 1.1.3. %a configuration de& ,aria-le& &3&t0me &ou& RindoS& =6 )our un bon fonctionnement du f0k, il est recommand de paramtrer correctement deux variables systmes : la variable )7;\ qui dfinit les c#emins de rec#erc#e des excutables et la variable !.7SS)7;\ qui dfinit les c#emins de rec#erc#er des classes et bibliot#ques fava. )our confi(urer la variable )7;\, il suffit dJa"outer * la fin du fic#ier autoexec.bat : (6emple : SE; )7;\X`)7;\`6!:nf0k/.Bn51: 7ttention : si une version antrieure du f0k tait d"* prsente, la variable )7;\ doit d"* contenir un c#emin vers les utilitaires du f0k. 1l faut alors modifier ce c#emin sinon cJest lJancienne version qui sera utilise. )our vrifier la version du f0k utilise, il suffit de saisir la commande "ava Aversion dans une fen4tre 09S.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 14

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

.a variable !.7SS)7;\ est aussi dfinie dans le fic#ier autoexec.bat. 1l suffit dJa"outer une li(ne ou de modifier la li(ne existante dfinissant cette variable. (6emple : SE; !.7SS)7;\X!:nf7K7n0EK6 0ans un environnement de dveloppement, il est pratique dJa"outer le . qui dsi(ne le rpertoire courant dans le !.7SS)7;\ surtout lorsque lJon nJutilise pas dJoutils de type 10E. 7ttention toutefois, cette pratique est fortement dconseille dans un environnement de production pour ne pas poser des problmes de scurit. 1l faudra a"outer par la suite les c#emins dJaccs aux diffrents pac a(es requis par les dveloppements afin de les faciliter. )our que ces modifications prennent effet dans le systme, il faut redemarrer lindoms ou excuter ces deux instructions sur une li(ne de commande 09S. 1.1.4. %e& lment& du I"P 1.3 &ou& RindoS& .e rpertoire dans lequel a t install le f0k contient plusieurs rpertoires. .es rpertoires donns ciA aprs sont ceux utiliss en ayant (ard le rpertoire par dfaut lors de lJinstallation. pertoire Contenu .e rpertoire dJinstallation contient deux fic#iers intressants : le fic#ier readme.#tml qui fourni quelques informations et des liens meb et le !:n"d /.B fic#ier src."ar qui contient le source foava de nombreuses classes. !e dernier fic#ier nJest prsent que si lJoption correspondante a t coc#e lors de lJinstallation. !e rpertoire contient les excutables : le compilateur "avac, !:n"d /.Bnbin lJinterprteur "ava, le dbu((eur "db et dJune faon (nrale tous les outils du f0k. !e rpertoire nJest prsent que si lJoption ncessaire a t coc#e lors de !:n"d /.Bndemo lJinstallation. 1l contient des applications et des applets avec leur code source. !:n"d /.Bndocs !e rpertoire nJest prsent que si la documentation a t dcompresse. !:n"d /.Bninclude !es rpertoires ne sont prsents que si les options ncessaires ont t et coc#es lors de lJinstallation. 1l contient des fic#iers dJenAt4te ! 2fic#ier !:n"d /.BnincludeA avec lJextension .\3 qui permettent de faire intera(ir du code fava avec old du code natif !e rpertoire contient le f<E : il re(roupe le ncessaire * lJexcution des applications notamment le fic#ier rt."ar qui re(roupe les 7)1. 0epuis la version /.B, le f<E contient deux mac#ines virtuelles : la fK8 classique et la fK8 utilisant la tec#nolo(ie \ot spot. !ette dernire est bien plus !:n"d /.Bn"re rapide et cJest elle qui est utilise par dfaut. .es lments qui composent le f<E sont spars dans les rpertoires bin et lib selon leur nature. !e rpertoire ne contient plus que quelques bibliot#ques notamment le fic#ier tools."ar. 7vec le f0k /./ ce rpertoire contenait le fic#ier de la bibliot#que standard. !e fic#ier est maintenant dans le rpertoire f<E.

!:n"d /.Bnlib

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 1'

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

1.1.'. %Jin&tallation de la ,er&ion 1.4.$ du I"P de )un &ou& RindoS& ;lc#ar(er sur le site "ava.sun.com et excuter le fic#ier "Csd A/bGbCbHBAmindomsAiIFEAp.exe.

&n assistant permet de confi(urer lJinstallation au travers de plusieurs tapes :


.a pa(e dJacceptation de la licence 2, .icence a(reement - 3 sJaffic#e .ire la licence et si vous lJaccepte=, cliquer sur le bouton radio , 1 accept t#e terms in t#e licence a(reement -, puis clique= sur le bouton , :ext .a pa(e de slection des composants * installer 2, !ustom setup -3 sJaffic#e, modifie= les composants * installer si ncessaire puis clique= sur le bouton , :ext .a pa(e de slection des plu( in pour navi(ateur 2 , 5romser re(istration -3 permet de slectionner les navi(ateurs pour lesquels le plu( in fava sera install, slectionner ou non le ou les navi(ateurs dtect, puis clique= sur le bouton , 1nstall .Jinstallation sJopre en fonction des informations fournies prcdemment .a pa(e de fin sJaffic#e, clique= sur le bouton , Linis# -

84me si ce nJest pas obli(atoire pour fonctionner, il est particulirement utile de confi(urer deux variables systmes : )7;\ et !.7SS)7;\. 0ans la variable )7;\, il est pratique de ra"outer le c#emin du rpertoire bin du f0k install pour viter * c#aque appel des commandes du f0k dJavoir * saisir leur c#emin absolu. 0ans la variable !.7SS)7;\, il est pratique de ra"outer les rpertoires et les fic#iers ."ar qui peuvent 4tre ncessaire lors des p#ases de compilation ou dJexcution, pour viter dJavoir * les prciser * c#aque fois.

1.1.1. %Jin&tallation de la ,er&ion 1.' -eta 1 du I"P de )un &ou& RindoS& 1l faut tlc#ar(er sur le site de Sun et excuter le fic#ier "Csd A/bIbHAbetaAmindomsAiIFE.exe

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 11

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

&n assistant (uide lJutilisateur pour lJinstallation de lJoutil.


Sur la pa(e , .icence 7(reement -, il faut lire la licence et si vous lJaccepte=, coc#e= le bouton radio , 1 accept t#e terms in t#e licence a(reement - et clique= sur le bouton , :ext Sur la pa(e , !ustom Setup -, il est possible de slectionnerPdslectionner les lments * installer. !lique= simplement sur le bouton , :ext -. .a pa(e , 5romser re(istration - permet de slectionner les plu(Ains des navi(ateurs qui seront installs. !lique= sur le bouton , 1nstall .es fic#iers sont copis. .a pa(e , 1nstallS#ield li=ard !ompleted - sJaffic#a(e * la fin de lJinstallation. !lique= sur , Linis# -.

)our faciliter lJutilisation des outils du fCSE S0k, il faut a"outer le c#emin du rpertoire bin contenant ces outils dans la variable )at# du systme.

1l est aussi utile de dfinir la variable dJenvironnement f7K7b\98E avec comme valeur le c#emin dJinstallation du S0k. $. %e& techni2ue& de -a&e de programmation en Ia,a :Jimporte quel diteur de texte peut 4tre utilis pour diter un fic#ier source fava. 1l est ncessaire de compiler le source pour le transformer en fAcode ou byteAcode fava qui sera lui excut par la mac#ine virtuelle.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 14

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

1l est prfrable de dfinir une classe par fic#ier. .e nom de la classe publique et le fic#ier qui la contient doivent 4tre identiques. )our 4tre compil, le pro(ramme doit 4tre enre(istr au format de caractres &nicode : une conversion automatique est faite par le f0k si ncessaire. !e c#apitre contient plusieurs sections :

.a compilation dJun code source : cette section prsente la compilation dJun fic#ier source. .Jexcution dJun pro(ramme et dJune applet : cette section prsente lJexcution dJun pro(ramme et dJune applet.

$.1. %a compilation dJun code &ource

)our compiler un fic#ier source il suffit dJinvoquer la commande "avac avec le nom du fic#ier source avec son extension ."ava Ga,ac Nom>ichier.Ga,a .e nom du fic#ier doit correspondre au nom de la classe principale en respectant la casse m4me si le systme dJexploitation nJy est pas sensible Suite * la compilation, le pseudo code fava est enre(istr sous le nom Nom4i)5ier6)&a $.$. %Je6cution dJun programme et dJune applet

$.$.1. %Je6cution dJun programme &ne classe ne peut 4tre excute que si elle contient une mt#ode main23 correctement dfinie. )our excuter un fic#ier contenant du byteAcode il suffit dJinvoquer la commande "ava avec le nom du fic#ier source sans son extension .class Ga,a Nom>ichier 3. %a &3nta6e et le& lment& de -a&e& de Ia,a !e c#apitre contient plusieurs sections :

.es r(les de base : cette section prsente les r(les syntaxiques de base de fava. .es identificateurs : cette section prsente les r(les de composition des identificateurs. .es commentaires : cette section prsente les diffrentes formes de commentaires de fava.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 1<

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

.a dclaration et lJutilisation de variables : cette section prsente la dclaration des variables, les types lmentaires, les formats des type lmentaires, lJinitialisation des variables, lJaffectation et les comparaisons. .es oprations arit#mtiques : cette section prsente les oprateurs arit#mtique sur les entiers et les flottants et les oprateurs dJincrmentation et de dcrmentation. .a priorit des oprateurs : cette section prsente la priorit des oprateurs. .es structures de contr$les : cette section prsente les instructions permettant la ralisation de boucles, de branc#ements conditionnels et de dbranc#ements. .es tableaux : cette section prsente la dclaration, lJinitialisation explicite et le parcours dJun tableau .es conversions de types : cette section prsente la conversion de types lmentaires. .a manipulation des c#aines de caractres : cette section prsente la dfinition et la manipulation de c#a+ne de caractres 2addition, comparaison, c#an(ement de la casse ... 3.

3.1. %e& r0gle& de -a&e Ia,a e&t &en&i-le H la ca&&e. .es blocs de code sont encadrs par des accolades. !#aque instruction se termine par un caractre J6J 2point vir(ule3. &ne instruction peut tenir sur plusieurs li(nes exemple c#ar code X J0J6 .Jindentation est i(nore du compilateur mais elle permet une meilleure compr#ension du code par le pro(rammeur. 3.$. %e& identificateur& !#aque ob"et, classe, pro(ramme ou variable est associer * un nom : lJidentificateur qui peut se composer de tous les caractres alp#anumriques et des caractres b et p. .e premier caractre doit 4tre une lettre, le caractre de souli(nement ou le si(ne dollar. <appel : fava est sensible * la casse. &n identificateur ne peut pas appartenir * la liste des mots rserv du lan(a(e fava : abstract assert 2f0k /.G3 case catc# c#ar continue default do double else extends false final finally float for (oto if instanceof int nem null pac a(e
!>PPT : " I> : C"C Tertiaire ? TIC

boolean

brea class const

byte

interface

implements import lon( native private protected


!cto-re $00'

Page : 1=

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

public return s#ort smitc# sync#roni=ed t#is t#rom t#roms transient true m#ile

static super try void volatile

3.3. %e& commentaire& 1ls ne sont pas pris en compte par le compilateur donc ils ne sont pas inclus dans le pseudo code. 1ls ne se terminent pas par un 6. 1l existe trois types de commentaire en fava : T3pe de commentaire& (6emple PP commentaire sur une seule li(ne commentaire abr( int :X/6 PP dclaration du compteur PR commentaires li(ne / commentaire multili(ne commentaires li(ne C RP PRR R commentaire de la met#ode R qparam val la valeur a traiter commentaire de documentation R qsince /.H automatique R qreturn <ien R qdeprecated &tiliser la nouvelle met#ode >>> RP

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 40

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

3.4. %a dclaration et lJutili&ation de ,aria-le& 3.4.1. %a dclaration de ,aria-le& &ne variable possde un nom, un type et une valeur. .a dclaration dJune variable doit donc contenir deux c#oses : un nom et le type de donnes quJelle peut contenir. &ne variable est utilisable dans le bloc ou elle est dfinie. .a dclaration dJune variable permet de rserver la mmoire pour en stoc er la valeur. .e type dJune variable peut 4tre :

soit un type lmentaire dit aussi type primitif dclar sous la forme t3peTlmentaire ,aria-le6 soit une classe dclare sous la forme cla&&e ,aria-le 6

exemple lon( nombre6 int compteur6 Strin( c#aine6 <appel : les noms de variables en fava peuvent commencer par un lettre, par le caractre de souli(nement ou par le si(ne dollar. .e reste du nom peut comporter des lettres ou des nombres mais "amais dJespaces. 1l est possible de dfinir plusieurs variables de m4me type en sparant c#acune dJelles par une vir(ule. Exemple int "our, mois, annee 6 fava est un lan(a(e * typa(e ri(oureux qui ne possde pas de transtypa(e automatique lorsque ce transtypa(e risque de conduire * une perte dJinformation. )our les ob"ets, il est ncessaire en plus de la dclaration de la variable de crer un ob"et avant de pouvoir lJutiliser. 1l faut rserver de la mmoire pour la cration dJun ob"et 2 remarque : un tableau est un ob"et en fava 3 avec lJinstruction neS. .a libration de la mmoire se fait automatiquement (r'ce au (arba(e collector. Exemple 8a!lasse instance6 PP dclaration de lJob"et instance X nem ma!lasse236 PP cration de lJob"et 9& 8a!lasse instance X nem 8a!lasse236 PP dclaration et cration de lJob"et Exemple inthi nombre X nem inth/Hi6 1l est possible en une seule instruction de faire la dclaration et lJaffectation dJune valeur * une variable ou plusieurs variables. Exemple int iXB , "XG 6

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 41

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

3.4.$. %e& t3pe& lmentaire& .es types lmentaires ont une taille identique quelque soit la plateAforme dJexcution : cJest un des lments qui permet * fava dJ4tre indpendant de la plateAforme sur lequel le code sJexcute. T3pe "&ignation boolean byte s#ort c#ar int valeur lo(ique : true ou false octet si(n entier court si(n %ongueur / bit F bits /E bits *aleur& Commentaire& pas de conversion possible vers un autre type

true ou false A/CF * /CD ABCDEF * BCDED nuHHHH * nuLLLL AC/GDGFBEGF * C/GDGFBEGD /.GH/eAHGI * B.GHCFCeNHBF C.CCIHDeABHF * /.DSDESeNBHF

caractre &nicode /E bits BC bits BC bits

entour de cotes simples dans du code fava

entier si(n vir(ule flottante float simple prcision 21EEEDIG3 vir(ule flottante double double prcision 21EEEDIG3 lon( entier lon(

EG bits EG bits

ASCCBBDCHBEFIGDDIFHF * SCCBBDCHBEFIGDDIFHD .es types lmentaires commencent tous par une minuscule. 3.4.3. %e format de& t3pe& lmentaire& %e format de& nom-re& entier& : .es types byte, s#ort, int et lon( peuvent 4tre cods en dcimal, #exadcimal ou octal. )our un nombre #exadcimal, il suffit de prfixer sa valeur par Hx. )our un nombre octal, le nombre doit commencer par un =ro. .e suffixe l ou . permet de spcifier que cJest un entier lon(. %e format de& nom-re& dcimau6 : .es types float et double stoc ent des nombres flottants : pour 4tre reconnus comme tel ils doivent possder soit un point, un exposant ou lJun des suffixes f, L, d, 0. 1l est possible de prciser des nombres qui nJont pas le partie entire ou dcimale. Exemple float pi X B./G/f6 double v X Bd float f X N./f , d X /e/Hf6 )ar dfaut un littral est de type double : pour dfinir un float il faut le suffixer par la lettre f ou L. Exemple double m X /./6 7ttention : float pi X B./G/6 PP erreur * la compilation %e format de& caract0re& : &n caractre est cod sur /E bis car il est conforme * la norme &nicode. 1l doit 4tre entour par des apostrop#es. &ne valeur de type c#ar peut 4tre considre comme un entier non n(atif de H * EIIBI. !ependant la conversion implicite par affectation nJest pas possible.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 4$

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

fava PR test sur les caractres RP class test/ r public static void main 2Strin( ar(shi3 r c#ar code X J0J6 int index X code A J7J6 System.out.println2_index X _ N index36 s s 3.4.4. %Jinitiali&ation de& ,aria-le& Exemple int nombre6 PP dclaration nombre X /HH6 PPinitialisation 9& int nombre X /HH6 PPdclaration et initialisation En fava, toute variable appartenant * un ob"et 2dfinie comme tant un attribut de lJob"et3 est initialise avec une valeur par dfaut en accord avec son type au moment de la creation. !ette initialisation ne sJapplique pas aux variables locales des mt#odes de la classe. .es valeurs par dfaut lors de lJinitialisation automatique des variables dJinstances sont : T3pe *aleur par dfaut boolean false byte, s#ort, int, lon( H float, double H.H c#ar nuHHH classe null <emarque : 0ans une applet, il est prfrable de faire les dclarations et initialisation dans la mt#ode init23. 3.4.'. %Jaffectation le si(ne X est lJoprateur dJaffectation et sJutilise avec une expression de la forme variable X expression. .Jopration dJaffectation est associatif de droite * (auc#e : il renvoie la valeur affecte ce qui permet dJcrire : x X y X = X H6 1l existe des oprateurs qui permettent de simplifier lJcriture dJune opration dJaffectation associe * un oprateur mat#matique : !prateur (6emple )ignification X aX/H quivalent * : a X /H NX aNX/H quivalent * : a X a N /H AX aAX/H quivalent * : a X a A /H RX aRX/H quivalent * : a X a R /H PX aPX/H quivalent * : a X a P /H `X 7`X/H reste de la division ZX aZX/H quivalent * : a X a Z /H ]]X 7]]X/H quivalent * : a X a ]] /H a est complt par des =ros *
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 43

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

droite quivalent * : a X a ^^ /H a est complt par des =ros * ^^^X a^^X/H (auc#e ^^^X a^^^X/H quivalent * : a X a ^^^ /H dcala(e * (auc#e non si(n 7ttention : .ors dJune opration sur des oprandes de types diffrents, le compilateur dtermine le type du rsultat en prenant le type le plus prcis des oprandes. )ar exemple, une multiplication dJune variable de type float avec une variable de type double donne un rsultat de type double. .ors dJune opration entre un oprande entier et un flottant, le rsultat est du type de lJoprande flottant. 3.4.1. %e& comparai&on& fava propose des oprateurs pour toutes les comparaisons : !prateur (6emple )ignification ^ a ^ /H strictement suprieur ] a ] /H strictement infrieur ^X a ^X /H suprieur ou (al ] a ] /H infrieur ou (al XX a XX /H E(alit aX a aX /H diffrent de M aMb E; binaire Z aZb 9& exclusif binaire t atb 9& binaire E; lo(ique 2pour expressions boolennes3 : lJvaluation de M a MM b lJexpression cesse ds quJelle devient fausse 9& lo(ique 2pour expressions boolennes3 : lJvaluation de tt a tt b lJexpression cesse ds quJelle devient vraie oprateur conditionnel : renvoie la valeur b ou c selon lJvaluation de U: a U b : c lJexpression a 2si a alors b sinon c3 : b et c doivent retourner le m4me type .es oprateurs sont excuts dans lJordre suivant * lJintrieure dJune expression qui est analyse de (auc#e * droite:

incrments et dcrments multiplication, division et reste de division 2modulo3 addition et soustraction comparaison le si(ne X dJaffectation dJune valeur * une variable

.Jusa(e des parent#ses permet de modifier cet ordre de priorit. 3.'. %e& opration& arithmti2ue& .es oprateurs arit#mtiques se notent N 2addition3, A 2soustraction3, R 2multiplication3, P 2division3 et ` 2reste de la division3. 1ls peuvent se combiner * lJoprateur dJaffectation Exemple

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 44

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

nombre NX /H6 3.'.1. %Jarithmti2ue enti0re )our les types numriques entiers, fava met en oeuvre une sorte de mcanisme de conversion implicite vers le type int appele promotion entire. !e mcanisme fait partie des r(les mise en place pour renforcer la scurit du code. Exemple s#ort xX I , y X /I6 x X x N y 6 PPerreur * la compilation 1ncompatible type for X. Explicit cast needed to convert int to s#ort. x X x N y 6 PPerreur * la compilation Z / error .es oprandes et le rsultat de lJopration sont convertis en type int. .e rsultat est affect dans un type s#ort : il y a donc risque de perte dJinformations et donc erreur * la compilation est mise. !ette promotion vite un dbordement de capacit sans que le pro(rammeur soit pleinement conscient du risque : il est ncessaire, pour r(ler le problme, dJutiliser une conversion explicite ou cast Exemple x X 2s#ort3 2 x N y 36 1l est ncessaire de mettre lJopration entre parent#se pour que ce soit son rsultat qui soit converti car le cast a une priorit plus forte que les oprateurs arit#mtiques. .a division par =ro pour les types entiers lve lJexception 7rit#meticException Exemple PR test sur la division par =ero de nombres entiers RP class testB r public static void main 2Strin( ar(shi3 r int valeurX/H6 double rsultat X valeur P H6 System.out.println2_index X _ N rsultat36 s s 3.'.$. %Jarithmti2ue en ,irgule flottante 7vec des valeurs float ou double, la division par =ro ne produit pas dJexception mais le rsultat est indiqu par une valeur spciale qui peut prendre trois tats :

indfini : Lloat.:a: ou 0ouble.:a: 2not a number3 indfini positif : Lloat.)9S1;1KEb1:L1:1;@ ou 0ouble.)9S1;1KEb1:L1:1;@, N u indfini n(atif : Lloat.:EG7;1KEb1:L1:1;@ ou 0ouble.:EG7;1KEb1:L1:1;@, Nu

!onformment * la norme 1EEEDIG, ces valeurs spciales reprsentent le rsultat dJune expression invalide :a:, une valeur suprieure au plafond du type pour infini positif ou n(atif.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 4'

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

K. valeur finie valeur finie H H :a: NPA u valeur NPA u NPA

H NPA u H finie u :a:

K:. N u :a:

KU.

x :a: NPA u :a: :a:

Exemple PR test sur la division par =ero de nombres flottants RP class testC r public static void main 2Strin( ar(shi3 r float valeurX/Hf6 double rsultat X valeur P H6 System.out.println2_index X _ N rsultat36 s s 3.'.3. %Jincrmentation et la dcrmentation .es oprateurs dJincrmentation et de dcrmentation sont : nNN NNn nAA AAn Si lJoprateur est plac avant la variable 2prfix3, la modification de la valeur est immdiate sinon la modification nJa lieu quJ* lJissu de lJexcution de la li(ne dJinstruction 2postfix3 .Joprateur NN renvoie la valeur avant incrmentation sJil est postfix, aprs incrmentation sJil est prfix. Exemple System.out.println2xNN36 PP est quivalent * System.out.println2x36 x X x N /6 System.out.println2NNx36 PP est quivalent * x X x N /6 System.out.println2x36 Exemple PR test sur les incrementations prefixees et postfixees RP class testG r public static void main 2Strin( ar(shi3 r int n/XH6 int nCXH6 System.out.println2_n/ X _ N n/ N _ nC X _ N nC36 n/XnCNN6 System.out.println2_n/ X _ N n/ N _ nC X _ N nC36 n/XNNnC6 System.out.println2_n/ X _ N n/ N _ nC X _ N nC36 n/Xn/NN6 PPattention System.out.println2_n/ X _ N n/ N _ nC X _ N nC36 s s <sultat int n/XH6 int nCXH6 PP n/XH nCXH

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 41

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

n/XnCNN6 PP n/XH nCX/ n/XNNnC6 PP n/XC nCXC n/Xn/NN6 PP attention : n/ ne c#an(e pas de valeur 3.1. %a priorit de& oprateur& fava dfinit les priorits dans les oprateurs comme suit 2 du plus prioriotaire au moins prioritaire 3 23 NN les oprateurs dJincrmentation AA R les oprateurs de multiplication, division, et modulo P ` N les oprateurs dJaddition et soustraction A ]] les oprateurs de dcala(e ^^ ] ^ les oprateurs de comparaison ]X ^X XX les oprateurs dJ(alit aX lJoprateur 9& exclusif Z lJoprateur E; M lJoprateur 9& t lJoprateur E; lo(ique MM lJoprateur 9& lo(ique tt X les oprateurs dJassi(nement NX AX .es parent#ses ayant une forte priorit, lJordre dJinterprtation des oprateurs peut 4tre modifi par des parent#ses. 3.4. %e& &tructure& de contrVle& !omme quasi totalit des lan(a(es de dveloppement orient ob"ets, fava propose un ensemble dJinstructions qui permettent de dJor(aniser et de structurer les traitements. .Jusa(e de ces instructions est similaire * celui rencontr dans leur quivalent dans dJautres lan(a(es. 3.4.1. %e& -oucle& m#ile 2 boolean 3 r ... PP code a excuter dans la boucle s .e code est excut tant que le boolen est vrai. Si avant lJinstruction m#ile, le boolen est faux, alors le code de la boucle ne sera "amais excut les parent#ses

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 44

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

:e pas mettre de 6 aprs la condition sinon le corps de la boucle ne sera "amais excut do r ... s m#ile 2 boolean 3 !ette boucle est au moins excut une fois quelque soit la valeur du boolen6 for 2 initialisation6 condition6 modification3 r ... s Exemple for 2i X H 6 i ] /H6 iNN 3 r .... s for 2int i X H 6 i ] /H6 iNN 3 r .... s for 2 6 6 3 r ... s PP boucle infinie .Jinitialisation, la condition et la modification de lJindex sont optionels. 0ans lJinitialisation, on peut dclarer une variable qui servira dJindex et qui sera dans ce cas locale * la boucle. 1l est possible dJinclure plusieurs traitements dans lJinitialisation et la modification de la boucle : c#acun des traitements doit 4tre spar par une vir(ule. Exemple for 2i X H , " X H 6 i R " ] /HHH6iNN , "NX C3 r ....s .a condition peut ne pas porter sur lJindex de la boucle : Exemple boolean trouve X false6 for 2int i X H 6 atrouve 6 iNN 3 r if 2 tableauhii XX / 3 trouve X true6 ... PP(estion de la fin du parcours du tableau s 1l est possible de nommer une boucle pour permettre de lJinterrompre m4me si cela est peu recommend : Exemple int compteur X H6 boucle: m#ile 2compteur ] /HH3 r for2int compte X H 6 compte ] /H 6 compte NN3 r compteur NX compte6 System.out.println2_compteur X _Ncompteur36 if 2compteur ^ GH3 brea boucle6 s s 3.4.$. %e& -ranchement& conditionnel& if 2boolean3 r ... s else if 2boolean3 r
!>PPT : " I> : C"C Tertiaire ? TIC
Page : 4<

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

... s else r ... s smit# 2expression3 r case constante/ : instr//6 instr/C6 brea 6 case constanteC : ... default : ... s 9n ne peut utiliser smitc# quJavec des types primitifs dJune taille maximum de BC bits 2byte, s#ort, int, c#ar3. Si une instruction case ne contient pas de brea alors les traitements associs au case suivant sont excuts. 1l est possible dJimbriquer des smitc# .Joprateur ternaire : 2 condition 3 U valeurAvrai : valeurAfaux Exemple if 2niveau XX I3 PP equivalent * total X 2niveau XXI3 U /H : I6 total X /H6 else total X I 6 System.out.println22sexe XX _\_3 U _8r_ : _8me_36 3.4.3. %e& d-ranchement& -reaW : permet de quitter immdiatement une boucle ou un branc#ement. &tilisable dans tous les contr$les de flot continue : sJutilise dans une boucle pour passer directement * lJitration suivante brea et continue peuvent sJexcuter avec des blocs nomms. 1l est possible de prciser une tiquette pour indiquer le point de retour lors de la fin du traitement dclenc# par le brea . &ne tiquette est un nom suivi dJun deux points qui dfinit le dbut dJune instruction. 3.<. %e& ta-leau6 1ls sont drivs de la classe 9b"ect : il faut utiliser des mt#odes pour y accder dont font partie des messa(es de la classe 9b"ect tel que equals23 ou (et!lass23. .e premier lment dJun tableau possde lJindice H. 3.<.1. %a dclaration de& ta-leau6 fava permet de placer les croc#ets aprs ou avant le nom du tableau dans la dclaration.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 4=

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Exemple int tableauhi X nem inthIHi6 PP dclaration et allocation 9& inthi tableau X nem inthIHi6 9& int tabhi6 PP dclaration tab X nem inthIHi6 PPallocation fava ne supporte pas directement les tableaux * plusieurs dimensions : il faut dclarer un tableau de tableau. Exemple float tableauhihi X nem floath/Hih/Hi6 .a taille des tableaux de la seconde dimension peut ne pas 4tre identique pour c#aque occurrence. Exemple int dim/hihi X nem inthBihi6 dim/hHi X nem inthGi6 dim/h/i X nem inthSi6 dim/hCi X nem inthCi6 !#aque lment du tableau est initialis selon son type par lJinstruction nem : H pour les numriques, JnHJ pour les caractres, false pour les boolens et nil pour les c#aines de caractres et les autres ob"ets. 3.<.$. %Jinitiali&ation e6plicite dJun ta-leau Exemple: int tableauhIi X r/H,CH,BH,GH,IHs6 int tableauhBihCi X rrI,/s,rE,Cs,rD,Bss6 .a taille du tableau nJest pas obli(atoire si le tableau est initialis * sa cration. Exemple: int tableauhi X r/H,CH,BH,GH,IHs6 .e nombre dJlment de c#aque li(nes peut ne pas 4tre identique : Exemple: inthihi tabEntiers X rr/,C,B,G,I,Es, r/,C,B,Gs, r/,C,B,G,I,E,D,F,Sss6 3.<.3. %e parcour& dJun ta-leau Exemple: for 2int i X H6 i ] tableau.len(t# 6 i NN3 r ... s .a variable length retourne le nombre dJlments du tableau. )our passer un tableau * une mt#ode, il suffit de dclarer les paramtres dans lJen t4te de la mt#ode Exemple: public void print7rray2Strin( textehi3r ... s .es tableaux sont tou"ours transmis par rfrence puisque se sont des ob"ets. &n accs * un lment dJun tableau qui dpasse sa capacit, lve une exception du type "ava.lan(.array1ndex9ut9f5oundsException.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : <0

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

3.=. %e& con,er&ion& de t3pe& .ors de la dclaration, il est possible dJutiliser un cast : Exemple: int entier X I6 float flottant X 2float3 entier6 .a conversion peut entrainer une perte dJinformations. 1l nJexiste pas en fava de fonction pour convertir : les conversions de type se font par des mt#odes. .a bibliot#que de classes 7)1 fournit une srie de classes qui contiennent des mt#odes de manipulation et de conversion de types lmentaires. Cla&&e ole Strin( pour les c#aines de caractres &nicode 1nte(er pour les valeurs entires 2inte(er3 .on( pour les entiers lon( si(ns 2lon(3 Lloat pour les nombres * vir(ules flottante 2float3 0ouble pour les nombres * vir(ule flottante en double prcision 2double3 .es classes portent le m4me nom que le type lmentaire sur lequel elles reposent avec la premire lettre en ma"uscule. !es classes contiennent (nralement plusieurs constructeurs. )our y accder, il faut les instancier puisque ce sont des ob"ets. Exemple: Strin( montexte6 montexte X nem Strin(2_test_36 .Job"et montexte permet dJaccder aux mt#odes de la classe "ava.lan(.Strin( 3.=.1. %a con,er&ion dJun entier int en cha5ne de caract0re )tring Exemple: int i X /H6 Strin( montexte X nem Strin(236 montexte Xmontexte.value9f2i36 value9f est (alement dfinie pour des ar(uments de type boolean, lon(, float, double et c#ar 3.=.$. %a con,er&ion dJune cha5ne de caract0re& )tring en entier int Exemple: Strin( montexte X nem Strin(2, /H -36 1nte(er nomnombreXnem 1nte(er2montexte36 int i X monnombre.intKalue236 PPconvertion dJ1nte(er en int 3.=.3. %a con,er&ion dJun entier int en entier long Exemple: int iX/H6 1nte(er monnombreXnem 1nte(er2i36 lon( "Xmonnombre.lon(Kalue236

!>PPT : " I> : C"C Tertiaire ? TIC

Page : <1

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

3.10. %a manipulation de& chaine& de caract0re& .a dfinition dJun caractre : Exemple: c#ar touc#e X J`J6 .a dfinition dJune c#a+ne : Exemple: Strin( texte X _bon"our_6 .es variables de type Strin( sont des ob"ets. )artout ou des constantes c#aines fi(urent entre (uillemets, le compilateur fava (nre un ob"et de type Strin( avec le contenu spcifi. 1l est donc possible dJecrire : Exemple: Strin( texte X , fava fava fava -.replace2JaJ,JoJ36 .es c#aines ne sont pas des tableaux : il faut utiliser les mt#odes de la classes Strin( dJun ob"et instanci pour effectuer des manipulations. 1l est impossible de modifier le contenu dJun ob"et Strin( contruit * partir dJune constante. !ependant, il est possible dJutiliser les mt#odes qui renvoient une c#a+ne pour modifier le contenu de la c#aine Exemple: Strin( texte X , fava fava fava -6 texte X texte.replace2JaJ,JoJ36 fava ne fonctionne pas avec le "eu de caractres 7S!11 ou 7:S1, mais avec &nicode 2&niversal !ode3. !eci concerne les types c#ar et les c#aines de caractres. .e "eu de caractres &nicode code un caractre sur C octets. .es caractres H * CII correspondent exactement au "eu de caractres 7S!11 3.10.1. %e& caract0re& &pciau6 dan& le& chaine& Caract0re& &pciau6 Affichage nJ 7postrop#e n_ Guillemet nn anti slas# nt ;abulation nb retour arrire 2bac space3 nr retour c#ariot nf saut de pa(e 2form feed3 nn saut de li(ne 2nemline3 nHddd caractre 7S!11 ddd 2octal3 nxdd caractre 7S!11 dd 2#exadcimal3 nudddd caractre &nicode dddd 2#exadcimal3 3.10.$. %Jaddition de chaine& fava admet lJoprateur N comme oprateur de concatnation de c#aines de caractres. .Joprateur N permet de concatener plusieurs c#aines. 1l est possible dJutiliser lJoprateur NX Exemple:

!>PPT : " I> : C"C Tertiaire ? TIC

Page : <$

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Strin( texte X _ _6 texte NX _ \ello _6 texte NX _ lorldB _6 !et oprateur sert aussi * concatener des c#a+nes avec tous les types de bases. .a variable ou constante est alors convertie en c#a+ne et a"oute * la prcdente. .a condition pralable est dJavoir au moins une c#a+ne dans lJexpression sinon le sinon JNJ est valu comme oprateur mat#matique. Exemple: System.out.println2_ .a valeur de )i est : _N8at#.)136 int duree X /C/6 System.out.println2_ dure X _ Nduree36 3.10.3. %a comparai&on de deu6 chaine& 1l faut utiliser la mt#ode equals23 Exemple: Strin( texte/ X _texte / _6 Strin( texteC X _texte C _6 if 2 texte/.equals2texteC3 3... 3.10.4. %a dtermination de la longueur dJune chaine .a mt#ode len(t#23 permet de dterminer la lon(ueur dJune c#aine. Exemple: Strin( texte X _texte_6 int lon(ueur X texte.len(t#236 3.10.'. %a modification de la ca&&e dJune chaine .es mt#odes fava to&pper!ase23 et to.omer!ase23 permettent respectivement dJobtenir une c#a+ne tout en ma"uscule ou tout en minuscule. Exemple: Strin( texte X _texte _6 Strin( textema" X texte.to&pper!ase236

!>PPT : " I> : C"C Tertiaire ? TIC

Page : <3

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

4. %e& fichier& : %e& entre&:&ortie& en Ia,a

.a lan(a(e fava, comme tout lan(a(e de pro(rammation di(ne de ce nom, fournit une 7)1 de manipulation de flux de donnes. Tuasiment toutes les classes de cette 7)1 sont localises dans le pac a(e j ava. i o. * , * lJexception des classes de manipulation de flux sur soc ets. )our ces dernires, vous les trouvere= dans le pac a(e j ava. n et. * . 7fin dJappr#ender au mieux les c#oses, nous allons diviser notre tude en plusieurs sousA parties.

0ans un premier temps, nous allons nous focaliser sur comment manipuler un fic#ier 2indpendamment des donnes quJil contient3. )our ce faire, nous utiliserons la classe j ava. i o. Fi l e . Elle expose un (rand nombre de mt#odes : nous en verrons les plus utiles. En second lieu, nous allons voir comment manipuler les flux de donnes. )lus prcisment, nous allons voir comment exploiter les donnes contenues dans un fic#ier. &n (rand nombre de classes peuvent alors 4tre utilises en fonction des besoins. Enfin, nous finirons cette prsentation en parlant de srialisation. !e concept consiste en la possibilit de prendre un ob"et en mmoire et dJenvoyer son tat 2la valeur de ses attributs3 sur un flux de donnes 2pourquoi pas vers un fic#ier, ou mieux encore, vers une soc et3.

!#aque c#apitre est a(rment de nombreux exemples de code, afin de faciliter au mieux votre apprentissa(e. !e cours est maintenu en permanence. Si vous dtecte= des erreurs, ou si vous ave= des su((estions * apporter, dans le but dJamliorer sa qualit, nJ#site= pas * me contacter par email.
4.1 Banipulation& de fichier&

:ous allons, dans cette section, voir comment on manipule les fic#iers en fava. !omme il est dit dans lJintroduction, nous nJallons pas maintenant voir comment manipuler les donnes que contient le fic#ier : il nous faudra pour ce faire utiliser les classes de flux 2streams en an(lais3, ce que nous verrons dans la section suivante. En revanc#e, nous allons voir quelles sont les possibilits de manipulation de fic#iers tels que le renomma(e, la suppression, conna+tre les droits dJun fic#ier en terme de scurit, ... ;outes ces possibilits vous sont offertes par lJintermdiaire de la classe >ile du pac a(e Ga,a.io. :ous terminerons cette section en analysant un exemple de code permettant de lister le contenu dJun rpertoire.
%a cla&&e Ga,a.io.>ile.

.a classe Lile permet donc de manipuler un fic#ier sur le disque dur. Elle propose * cet effet, un (rand nombre de mt#odes. .Jexemple suivant montre un exemple simple dJutilisation de cette classe : on y cr un ob"et Lile bas sur un fic#ier, puis on lJutilise pour conna+tre

!>PPT : " I> : C"C Tertiaire ? TIC

Page : <4

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

certaines de ces caractristiques 20roits dJaccs, lon(ueur du fic#ier3. 7u final, le fic#ier est supprim.

File f = new File("fichier.mp3"); System.out.println(f.getAbsolutePath() if (f.e"ists()) # System.out.println(f.get!ame() (f.can%ea&() ' "r" $ "(") (f.can)rite() ' "w" $ "(") f.length() ); f.&elete(); * f.get!ame());

" $ " " $ "

.e tableau suivant prsente certaines mt#odes couramment utilises. )our c#acune dJentre elles, un court descriptif vous est propos. )our de plus amples informations sur cette classe, vous pouve= tou"ours vous rfrer * la documentation en li(ne de lJ7)1 fournie pas Sun : #ttp:PP"ava.sun.comP"CseP/.GPdocsPapiPindex.#tml. Strin( (et:ame236 Strin( (et)at#236 Strin( (et7bsolute)at#236 Strin( (et)arent236 boolean rename;o2Lile nemLile36 boolean exists23 6 boolean can<ead236 boolean canlrite236 boolean is0irectory236 boolean isLile236 lon( len(t#236 boolean delete236 boolean m dir236 Strin(hi list236 <etourne le nom du fic#ier. <etourne la localisation du fic#ier en relatif. 1dem mais en absolu. <etourne le nom du rpertoire parent. )ermet de renommer un fic#ier. EstAce que le fic#ier existe U .e fic#ier est tAil lisible U .e fic#ier est tAil modifiable U )ermet de savoir si cJest un rpertoire. )ermet de savoir si cJest un fic#ier. Tuelle est sa lon(ueur 2en octets3 U )ermet dJeffacer le fic#ier. )ermet de crer un rpertoire. 9n demande la liste des fic#iers localiss dans le rpertoire.

Parcour& du contenu dJun rpertoire

)our finaliser la prsentation de cette classe, vous pouve= consulter ce dernier exemple. .a classe Scan ne contient quJune mt#ode statique : le main. !elleAci accepte en paramtre le nom dJun dossier * consulter. 9n en demande la liste de tout ce quJil contient et on affic#e c#acune des entres en spcifiant sJil sJa(it dJun dossier ou dJun fic#ier.
import +a,a.io.-;

!>PPT : " I> : C"C Tertiaire ? TIC

Page : <'

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

public class Scan # # 1"); public static ,oi& main(String./ args) throws 0"ception if (args.length 1= 2) # System.out.println("3euille4 saisir un &ossier System.e"it(5); * File f = new File(args.5/); String ./ files = f.list(); for(int i =5; i 6 files.length; i ) # if (new File(args.5/ "77" files.i/).is8irectory()) # System.out.print("%ep $ "); * else # System.out.print("Fil $ "); * System.out.println(args.5/ "77" * * *

files.i/);

Conclu&ion

.a classe Ga,a.io.>ile vous permet donc de manipuler le systme de fic#iers. Kous pouve= ainsi crer, supprimer, dplacer ou obtenir des informations aussi bien sur des fic#iers que sur des dossiers.
4.2 Banipulation& de flu6 de donne&

:ous allons, dans cette section, nous intresser aux flux 2streams en an(lais3 de donnes, * proprement parl. 1l est vrai quJil existe plusieurs types de flux de donnes : des flux bass sur des fic#iers, sur des soc ets rseaux, sur la console de lJapplication, ... 8ais dans tous les cas, leurs utilisations seront similaires. !e sont les concepts dJ#rita(e et dJinterfaces qui permettent dJobtenir cette abstraction. )our initier cette prsentation, nous allons donc commencer * parler des flux de donnes prdfinis. )uis nous prsenterons les principales classes du pac a(e Ga,a.io 2comme vous alle= le voir, il y a de quoi faire3. Enfin nous tudierons un exemple concret permettant de raliser une copie de fic#iers.
%e& flu6 de donne& prdfini&.

1l existe, comme dans presque tous les autres lan(a(es, trois flux prdfinis. !es trois flux sont associs * lJentre standard dJune application, sa sortie standard ainsi que sa sortie standard dJerreurs. 1ls sont respectivement nomms )3&tem.in, )3&tem.out et )3&tem.err. :ous pouvons dJores et d"* si(naler que System.in est une instance de la classe Input)tream, alors que les deux autres flux sont des instances de la classe Print)tream.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : <1

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

try # int c; while((c = System.in.rea&()) 1= (2) # System.out.print(c); nbc ; * * catch(9:0"ception e"c) # e"c.printStac;<race(); == 0n fait e"c.printStac;<race(System.err); *

)our ce qui est de la manipulation du flux de sortie, il est prfrable de ne pas directement utiliser la classe Input)tream. En effet, elle ne propose que des mt#odes lmentaires de rcupration de donnes. )rfre= au contraire la classe +uffered eader. :ous reviendrons ultrieurement, dans ce document, sur la notion de eader et de Rriter. )our lJ#eure, sac#e= simplement (nrer un ob"et +uffered eader * partir de )3&tem.in, comme le montre lJexemple suivant. !ela vous permettra de facilement rcuprer des c#a+nes de caractres saisies sur la console par lJutilisateur.
%ea&er rea&er = new 9nputStream%ea&er(System.in); >uffere&%ea&er ;eyboar& = new >uffere&%ea&er(rea&er); System.out.print("0ntre4 une ligne &e te"te $ "); String line = ;eyboar&.rea&?ine(); System.out.println("3ous a,e4 saisi $ " line);

Topographie de& cla&&e& de flu6 de donne&

.e tableau suivant vous montre brivement quelques classes proposes dans le pac a(e Ga,a.io. !omme vous pouve= le remarquer le tableau est constitu de quatre =ones distinctes. .a colonne de (auc#e contient quelques noms de classes de flux de lecture, contrairement * la colonne de droite qui, elle, contient des classes de flux dJcriture. En plus, le tableau est aussi divis en deux li(nes. .a premire contient des classes qui manipulent des octets. !es classes existent plus ou moins depuis la version ori(inale du f0k 2fava 0evelopment kit3. 8ais certaines de leurs possibilits 2de leurs mt#odes3 ont rapidement t dprcies. En effet, les mt#odes permettant lJacquisition de c#a+nes de caractres prsentent lJinconvnient de ne pas 4tre portables dJun systme * un autre, ce qui pour fava est inacceptable. :Joublie= pas que la norme 7S!11 27merican Standard !ode for 1nformation 1nterc#an(e3 ne spcifie que /CF caractres. 9r, nos codes accentus 2par exemple3 nJen font pas partie. 1l existe, au final, plusieurs drivs dJ7S!11 2utiliss dJun systme * un autre3 ne parta(eant pas tous les m4mes codes. En fava, le problme se r(le via lJutilisation de systme &nicode 2/E bits3. 1l peut spcifier, t#oriquement, "usquJ* EIIBE caractres. 9n est donc tranquille pour lJc#an(e dJinformations textuelles entre des systmes #tro(nes. 8ais, attention : dans la ma"orit des cas, les flux sont des flux F bits. TuJest ce que si(nifie donc, dans ce cas, lJutilisation de eader ou de Rriter. En fait cJest simple, ces classes permettent de raliser des transformations de code dJun systme 7S!11 driv vers &nicode et rciproquement. 7insi, par exemple, )3&tem.in est et restera un flux F bits, mais lJutilisation dJun eader permettra de transformer les caractres 7S!11 2ou driv3 en code &nicode en tenant compte du systme de coda(e utilis sur le poste. !es classes sont apparues * partir du f0k /./.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : <4

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

:ote= bien que le tableau suivant nJest pas ex#austif, bien au contraire. )our sJen convaincre, "ete= un oeil sur la documentation du f0k pour le pac a(e Ga,a.io. >lu6 dJentre&
9nputStream ( File9nputStream I"P 1.0 ( >lu6 dJoctet& 8ata9nputStream O< -it&M ( >uffere&9nputStream ( . . . %ea&er I"P 1.1 ( File%ea&er >lu6 de caract0re& ( >uffere&%ea&er ( String%ea&er O11 -it&M ( . . .

>lu6 de &ortie&
:utputStream ( File:utputStream ( 8ata:utputStream ( >uffere&:utputStream ( . . . )riter ( File)riter ( >uffere&)riter ( String)riter ( . . .

Encore une petite c#ose : initialement, quasiment tous vos flots seront de types Input)tream ou !utput)tream 2ou de classes drives3. !omment faire pour en obtenir un eader ou un Rriter. En fait cJest simple : deux classes de transition vous sont proposes. Elles se nomment Input)tream eader et !utput)treamRriter. Elles permettent, respectivement, de transformer un Input)tream en un eader et un !utput)tream en un Rriter. 7 titre dJexemple, "e vous rappelle "uste le code permettant de (nrer un flot dJacquisition de c#a+nes de caractres * partir de la console.
%ea&er rea&er = new 9nputStream%ea&er(System.in); >uffere&%ea&er ;eyboar& = new >uffere&%ea&er(rea&er); System.out.print("0ntre4 une ligne &e te"te $ "); String line = ;eyboar&.rea&?ine(); System.out.println("3ous a,e4 saisi $ " line);

(6emple dJutili&ation de& cla&&e& de flu6

8aintenant que lJon voit un peu mieux * quoi correspondent telle ou telle classe, il nous faut comprendre comment elles sJutilisent. En effet, pour obtenir le flux adapt * vos besoins, il faut souvent passer par plusieurs constructions intermdiaires. .es exemples de code suivants montrent comment cumuler les constructions de classes de flux pour arriver au rsultat escompt. .e but final est dJobtenir un flot sur fic#ier, buffris, permettant de manipuler des donnes types.

File f = new File("fichier.mp3"); File9nputStream fis = new File9nputStream(f); >uffere&9nputStream bis = new >uffer9nputStream(fis); 8ata9nputStream &is = new 8ata9nputStream(bis); int a = &is.rea&9nt(); short s = &is.rea&Short(); boolean b = &is.rea&>oolean();

!>PPT : " I> : C"C Tertiaire ? TIC

Page : <<

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

1l est important de comprendre que lJordre de construction ne peut en aucun cas 4tre c#an(. En effet, lJob"et final * utiliser se doit dJ4tre de type 0ata1nputStream. En effet, cJest sur ce type que les mt#odes attendues sont dfinies. .e second exemple montre le m4me exemple, mais pour crire dans un flux.

File f = new File("fichier.mp3"); File:utputStream fos = new File:utputStream(f); >uffere&:utputStream bos = new >uffere&:utputStream(fos); 8ata:utputStream &os = new 8ata:utputStream(bos); int a = 25; &os.write9nt(a); short s = 3; &os.writeShort(s); boolean b = true; &os.write>oolean(b);

#n ca& concret : rali&er une copie de fichier en Ia,a

.Jexemple que "e vous propose permet de raliser une copie de fic#ier. )our ce faire, votre pro(ramme attend que le nom du fic#ier source et le nom du fic#ier de destination soient rensei(ns sur la li(ne de commande servant * lancer le pro(ramme. 7 titre indicatif, voici un exemple de commande servant * dmarrer le pro(ramme en sac#ant que si le nombre de paramtres nJest pas correct, le pro(ramme vous informera de quJelle est sa bonne utilisation 2son usa(e3.
@ +a,a Aopy sourceFile.t"t &estFile.t"t

Ensuite, le pro(ramme ralise la copie * proprement parler. 0eux points me semblent 4tre * prciser. )remirement, nous allons travailler sur des flux binaires et non des flux textuels : il est donc "udicieux de c#oisir les classes drives de Input)tream et de !utput)tream. Secondo, la manipulation de flux peut aboutir * lever des exceptions. 1l faut donc spcifier ce que lJon fera dJune ventuelle exception. 1ci, "Jai c#oisi de mettre un bloc tr3 ... catch et dJaffic#er la pile des appels de mt#odes 2mais un throS& (6ception sur le prototype du main en aurait fait autant3. 0ans le but de vous montrer un maximum de c#oses, "e rcupre la taille du fic#ier (r'ce * lJob"et de type Lile. 8ais "Jaurais pu coder la boucle de lecture des octets "usquJ* obtenir la valeur A/ 2cJest elle qui vous est renvoye en cas de fin de fic#ier3. 0ans le but dJacclrer le traitement, "e place des buffers 2des tampons3 sur les flux bass sur les fic#iers. 0ans ce cas, il faut absolument que vous fermie= les flux buffriss et non les flux simples 2en fait les derniers ob"ets de flux crs3. )our le reste, il me semble que les c#oses sont suffisamment simples.
import +a,a.io.-; public class Aopy # public static ,oi& main (String./ arg,) # == <est sur le nombre &e paramBtres passCs if (arg,.length 1= D) # System.out.println("Esage@ +a,a Aopy sourceFile &estinationFile"); System.e"it(5); *

!>PPT : " I> : C"C Tertiaire ? TIC

Page : <=

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

try # == PrCparation &u flu" &FentrCe File sourceFile = new File(arg,.5/); File9nputStream fis = new File9nputStream(sourceFile); >uffere&9nputStream bis = new >uffere&9nputStream(fis); long l = sourceFile.length(); == PrCparation &u flu" &e sortie File:utputStream fos = new File:utputStream(arg,.2/); >uffere&:utputStream bos = new >uffere&:utputStream(fos); == Aopie &es octets &u flu" &FentrCe ,ers le flu" &e sortie for(long i=5;i6l;i ) # bos.write(bis.rea&()); * == Fermeture &es flu" &e &onnCes bos.flush(); bos.close(); bis.close(); * * catch (0"ception e) # System.err.println("File access error 1"); e.printStac;<race(); terminCe");

Conclu&ion

System.out.println("Aopie *

:ous avons donc, dans cette section, tudi comment manipuler les classes de flux proposes en fava. En fait, il y a toute une arborescence de classes qui vous est propose. !#acune de ces classes prsente certaines caractristiques que vous pouve= cumuler par constructions successives. :ous avons aussi vu que trois ob"ets de flux sont initialement dfinis pour toutes applications : )3&tem.in, )3&tem.out et )3&tem.err. Kous pouve=, eux aussi, les spcialiser. Linalement nous avons mis en oeuvre un exemple permettant de raliser une copie de fic#ier : il nous a donc fallu crer des ob"ets de flux bass sur des fic#iers mais en plus buffriss.
4.3 %a &riali&ation en Ia,a

.a srialisation consiste * pouvoir prendre un ob"et en mmoire et * en sauve(arder lJtat sur un flux de donnes 2vers un fic#ier, par exemple3. !e concept permettra aussi de reconstruire, ultrieurement, lJob"et en mmoire * lJidentique de ce quJil pouvait 4tre initialement. .a srialisation peut donc 4tre considre comme une forme de persistance de vos donnes.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : =0

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Pr&entation du concept

%e& pro-lmati2ue& 8ais cela nJest pas aussi simple quJil nJy parait. En effet, quelques problmes font que la srialisation nJest pas si simple * mettre en oeuvre. )our sJen convaincre, dite vous que le lan(a(e !NN 2par exemple3 ne fournit pas, de base, la srialisation. !ertes, certaines librairies 2les 8L!, pour ne citer quJelles3 proposent le concept, mais pas avec le m4me aboutissement quJen fava. .e premier problme rside dans le fait que les attributs 2en effet, ce sont eux quJil faut sauve(arder pour sauve(arder lJtat de lJob"et3 ne sont pas tous de types scalaires 2int, float, double, ...3. !ertains sont de types a(r(ats 2sousAob"ets ou tableaux3. 9r, en fava, les a(r(ats sont obli(atoirement stoc s dans le tas 2la mmoire autre que la pile dJexcution3 : ils sont donc invitablement points. 9r, quJest ce que cela veut dire que de srialiser un pointeur U :e seraitAce pas plut$t lJob"et point quJil faudrait sauve(arder U 7 partir de cette question, une autre en dcoule tout naturellement. !omment savoir si le type dJun attribut est un type scalaire ou un a(r(at U &ne dernire question vous est peut 4tre venue * lJesprit : comment le mcanisme de srialisation va fonctionner sur deux ob"ets qui se pointent mutuellement U 1l ne faudrait, en effet, pas sauve(arder les m4mes ob"ets indfiniment. %e& &olution& En fait, il nJy a pas des solutions, mais une solution * tous ces problmes : la rfle6ion. .a rflexion permet, par pro(rammation, dJobtenir des informations sur un type de donnes c#ar( en mmoire. !es informations permettent de dcrire les attributs, les mt#odes et les constructeurs de la classe considre. !es informations descriptives sont stoc es dans les mta8cla&&e&. &ne mtaAclasse est donc un type qui en identifie un autre. En fait, si lJon y rflc#it bien, les concepts de mtaAclasses et de rflexion sont les cls de vo?te de tout le systme fava 2fava 5ean, f:1, <81, ...3. 7 titre dJinformation, le concept dJintrospection peut 4tre vu comme un aboutissement de la rflexion. !e que traite en plus lJintrospection, ce sont les conventions de coda(e dfinies en fava. 7insi, * partir des mt#odes exposes par une classe on peut aussi en dduire ses proprits 2les (ets et les sets3 et ses vnements 2les couteurs3. 8ais cela nJapporte rien de plus pour ce qui est de la srialisation. )our que lJon puisse manipuler les mtaAclasses, il faut que le compilateur "oi(ne la table des symboles au fic#ier de byte code (nrer. !Jest ce que ne sait pas faire !NN : les mtaAclasses en sont donc plus difficiles * fournir 2certain compilateurs y arrivent mal(r tout en mode debu(3. )our pouvoir utiliser la rflexion, lJenvironnement fava vous fournit la classe Ga,a.lang.Cla&&, ainsi quJun bon nombre dJautres classes utilitaires localises dans le pac a(e Ga,a.lang.reflect. 7 titre dJexemple, "e vous su((re de tester le pro(ramme suivant. 1l affic#e

!>PPT : " I> : C"C Tertiaire ? TIC

Page : =1

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

lJensemble des attributs dJune classe en prcisant si, pour c#aque attribut, son type est scalaire ou sJil sJa(it dJun a(r(at.
import +a,a.lang.reflect.-; public class Geta8onnees # public static ,oi& main(String./ args) # Alass metaAlass = +a,a".swing.H>utton.class; =- ou Alass metaAlass = new H>utton().getAlass(); -= Fiel& attributes./ = metaAlass.getFiel&s(); for(int i=5; i6attributes.length; i ) # boolean scalar = attributes.i/.get<ype().isPrimiti,e(); System.out.print(scalar ' "Scalar" $ ":b+ect"); System.out.print(" $ " attributes.i/.get!ame() " &e type "); System.out.println(attributes.i/.get<ype()); * * *

%e &upport de &riali&ation en Ia,a

#tili&ation de la &riali&ation 8aintenant que vous ave= bien compris les prArequis, nous pouvons nous focaliser sur la mise en oeuvre de la srialisation via lJ7)1 de fava. ;out ce que vous deve= savoir est localis dans le pac a(e Ga,a.io. 9n y trouve notamment deux classes : !-GectInput)tream et !-Gect!utput)tream. !es deux classes proposent, respectivement, les mt#odes read!-Get et Srite!-Gect. !e sont ces mt#odes qui vont vous permettre la srialisation. )our toutes les problmatiques prcdentes, vous ne vous occupe= de rien : tout est pris en c#ar(e par ces deux classes. .Jexemple de code suivant tente de vous montrer la puissance du mcanisme. )our ce faire, la mt#ode savelindom construit une fen4tre contenant diffrents composants (rap#iques 2=one de saisie de texte, boutons, arborescence, ...3 puis sauve(arde lJob"et de fen4tre sur le disque. 7 partir de l*, tous les autres composants doivent 4tre aussi srialiss. .a mt#ode loadlindom, permet, quant * elle, lJopration inverse : elle reconstruit la fen4tre et tous les lments initialement contenus. .a mt#ode _main_ se c#ar(e, elle, dJacqurir les commandes de la part de lJutilisateur et de les traiter. En (uise de test, demande= dJabord de sauve(arder une fen4tre. <e(arde= alors la taille du fic#ier _mindom.ser_ sur le disque 2pour ma part /S,D ko3. )uis demande= conscutivement, de rec#ar(er la fen4tre quelques fois : on peut considrer le fic#ier comme un modle servant * r(nrer autant dJinstance que sou#ait. ;ape= exi# , pour sortir de la fen4tre.
import +a,a.io.-; import +a,a.awt.-; import +a,a".swing.-; public class Serialisation # pri,ate final static %ea&er rea&er = new 9nputStream%ea&er(System.in); pri,ate final static >uffere&%ea&er ;eyboar& = new
!>PPT : " I> : C"C Tertiaire ? TIC
Page : =$

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

>uffere&%ea&er(rea&er); == Permet &e crCer une fenItre et &e la sCrialiser &ans un fichier. public ,oi& sa,e)in&ow() throws 9:0"ception # HFrame win&ow = new HFrame("Ga fenItre"); HPanel pane = (HPanel)win&ow.getAontentPane(); pane.a&&(new H?abel(">arre &e status")J >or&er?ayout.S:E<K); pane.a&&(new H<ree()J >or&er?ayout.)0S<); H<e"tArea te"tArea = new H<e"tArea("Aeci est le contenu 111"); te"tArea.set>ac;groun&(Aolor.L%AM); pane.a&&(te"tAreaJ >or&er?ayout.A0!<0%); HPanel toolbar = new HPanel(new Flow?ayout()); toolbar.a&&(new H>utton(":pen")); toolbar.a&&(new H>utton("Sa,e")); toolbar.a&&(new H>utton("Aut")); toolbar.a&&(new H>utton("Aopy")); toolbar.a&&(new H>utton("Paste")); pane.a&&(toolbarJ >or&er?ayout.!:%<K); win&ow.setSi4e(N55J355); File:utputStream fos = new File:utputStream("win&ow.ser"); :b+ect:utputStream oos = new :b+ect:utputStream(fos); oos.write:b+ect(win&ow); oos.flush(); oos.close(); * == Permet &e reconstruire la fenItre O partir &es &onnCes &u fichier. public ,oi& loa&)in&ow() throws 0"ception # File9nputStream fis = new File9nputStream("win&ow.ser"); :b+ect9nputStream ois = new :b+ect9nputStream(fis); HFrame win&ow = (HFrame)ois.rea&:b+ect(); ois.close(); win&ow.set3isible(true); * == Permet &e saisir &iffCrentes comman&es. <este4 plusieurs loa& == consCcutifs $ plusieurs fenItres &oi,ent apparaPtrent public static ,oi& main(String./ args) throws 0"ception # Serialisation ob+ect = new Serialisation(); while(true) # System.out.print("Saisir le mo&e &Fe"ecution (loa& ou sa,e) $ "); String mo&e = ;eyboar&.rea&?ine(); if (mo&e.eQuals9gnoreAase("e"it")) brea;; if (mo&e.eQuals9gnoreAase("sa,e"))

!>PPT : " I> : C"C Tertiaire ? TIC

Page : =3

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

ob+ect.sa,e)in&ow(); if (mo&e.eQuals9gnoreAase("loa&")) ob+ect.loa&)in&ow(); * * System.e"it(5);

Coder une cla&&e &riali&a-le :ous venons de voir comment sauver ou rec#ar(er un ob"et sur un flux de donnes. :ous allons, maintenant voir comment coder une classe srialisable. En effet, par dfaut, vos classes ne permettent pas de sauve(arder lJtat dJun ob"et sur un flux de donnes. 1l faut explicitement le demander. )ar contre, pour une (rande ma"orit des classe du fCSd 2fava C Softmare 0evelopment kit3, elles ont t dfinies comme tant srialisables. !Jest pour cela que lJexemple prcdent a fonctionn sans aucun problme. En fait, les c#oses sont trs simples. 1l faut simplement marquer votre classe comme tant srialisable. 9n peut caricaturer en disant que le compilateur prfre avoir votre confirmation avant dJentreprendre quoi que se soit : en effet, un ob"et peut t#oriquement avoir une taille p#nomnale. )our ce faire, il vous suffit dJimplmenter lJinterface Ga,a.io.)erialiQa-le. 0u coup, vous panique= : il nJy a aucune raison a !ette interface ne contient aucune mt#ode : vous nJave= rien dJautre * faire. .e but de la manipulation est simplement de marquer lJob"et comme tant srialisable : comme vous ave= cod lJimplmentation de lJinterface, le compilateur travaille maintenant en confiance 2il a vos confirmations3 et va se dbrouiller pour le reste. .Jextrait de code suivant montre une classe dont les attributs pourront 4tre envoys vers un flux de donnes.
import +a,a.io.-; import +a,a.util.-; public GaAlasse i m pl em en ts S eri al i zab l e # pri,ate String monPremierAttribut; pri,ate 8ate monSecon&Attribut; pri,ate long mon<roisiBmeAttributs; * == . . . &FC,entuelles mCtho&es . . .

0ans certains cas subtils, vous pourrie= avoir besoin quJun attribut ne soit pas srialis pour une classe donne. !ela est ralisable sans de relle difficult. 1l suffit de ra"outer le qualificateur tran&ient * lJattribut en question. .e code suivant dfinit une classe dont le second attribut ne sera "amais srialis.
import +a,a.io.-; import +a,a.util.-; public GaAlasse i m pl em en ts S eri al i zab l e # pri,ate String monPremierAttribut; pri,ate tran si en t 8ate monSecon&Attribut; sCrialisC pri,ate long mon<roisiBmeAttributs;

== non

!>PPT : " I> : C"C Tertiaire ? TIC

Page : =4

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

== . . . &FC,entuelles mCtho&es . . .

#n pige H ,iter )our terminer cette section, il faut que "e vous mette en (arde. 1l y a une source potentielle de fuites mmoire avec le mcanisme de srialisation : "Jen ai dJailleurs d"* fait les frais. En fait ce nJest pas rellement un bu( : il faut "uste bien comprendre comment marc#ent les classes !-GectInput)tream et !-Gect!utput)tream. )our dtecter les cycles de pointeurs et donc viter de srialiser plusieurs fois un ob"et dans un flux, les deux classes prcdentes (rent des vecteurs 2"ava.util.Kector3. &n tel conteneur, peut contenir autant dJob"ets 2de pointeurs3 que ce quJil y a de mmoire disponible. 7 c#aque fois quJun ob"et est manipul par lJintermdiaire de lJune des deux classes de flux dJob"et, sa rfrence est stoc e dans le vecteur associ. 0ans un de mes dveloppements, "Jai eu besoin de coder un client et un serveur ;!)P1). )our communiquer, "Jai dfini des nombreuses classes drivant toutes dJune m4me classe mre nomme 8essa(e. !ette classe dfinit une mt#ode abstraite pro)e . !#acune des autres classes la redfinit. .e client (nre ainsi des ob"ets de messa(es divers et les envoie au serveur. .e client est au"ourdJ#ui cod de manire similaire * lJextrait de code qui suit.
try # :utputStream os = soc;Ser,ice.get:utputStream(); :b+ect:utputStream oos = new :b+ect:utputStream(os); while(true) # Gessage msg = this.createGessage(); oos.write:b+ect(msg) oos. reset(); * * catch(0"ception e) # e.printStac;<race(); *

.e problme, auquel "e me suis #eurt, rside dans le fait que "Javais omis la li(ne marque en (ras. Elle permet de rinitialiser le vecteur contenu dans lJob"et de flot. 7insi, il ne cro+t pas indfiniment et le pro(ramme nJarrive donc plus * une erreur de type Ga,a.lang.!ut!fBemor3(rror. )ense= * tenir compte de cette problmatique, en comprenant bien quJelle nJappara+t que si votre connexion rseau est utilise pour un (rand nombre de transfert dJob"ets.
Conclu&ion

:ous avons donc, au terme de cette section, vu ce que propose le concept de srialisation. :ous avons prsent les diffrents problmes in#rents * ce concept. !e quJil faut simplement en retenir, cJest que lJenvironnement fava prend tout * sa c#ar(e par lJintermdiaire de la rflexion. 0eux classes principales vous permettent de mettre en oeuvre cette srialisation : Ga,a.io.!-GectInput)tream et Ga,a.io.!-Gect!utput)tream. 8ais attention : pour quJun ob"et puisse 4tre manipul sur un flux dJob"et, il faut quJil soit marqu comme tant
!>PPT : " I> : C"C Tertiaire ? TIC
Page : ='

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

srialisable. )our ce faire il se doit dJimplmenter lJinterface Ga,a.io.)erialiQa-le : les classes du fCSd implmentent quasiment toutes cette interface. Enfin, une problmatique existe : si vous ne (re= pas correctement vos flux, des dbordements de mmoires sont envisa(eables.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : =1

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

(6ercice&

!>PPT : " I> : C"C Tertiaire ? TIC

Page : =4

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

(nonc 1 : Ecrire un al(orit#me qui permet la saisie dun montant \; dune facture, puis de calculer et affic#er un total ;;! qui est (al au montant \; N ;K7 selon les conditions suivantes : Si le montant \; est infrieure a IHHH, alors la ;K7 est (al * D`. Sinon si le montant \; est entre IHHH et /HHHH, alors la ;K7 est (al * /G`. Sinon si le montant \; est suprieur a /HHHH, alors la ;K7 est (al * CH`. (nonc $ : Ecrire un al(orit#me qui permet de saisir un nombre au clavier puis de dterminer sil est premier ou non. <(le : on dit quun nombre est premier sil nest divisible que par / et luiAm4me. (nonc 3 : Ecrire un al(orit#me qui permet de ran(er dix nombres dans un tableau ; dune dimension, puis les affic#er avec leur somme et leur moyenne. (nonc 4 Ecrire un al(orit#me qui demande un nombre compris entre /H et CH, "usqu* ce que la rponse convienne. En cas de rponse suprieure * CH, on fera appara+tre un messa(e : , )lus (rand a -, et inversement, , )lus petit a - si le nombre est infrieur * /H. (nonc ' : Ecrire les pro(ramme qui permettent de calculer les sommes suivantes, en utilisant les sc#mas : pour, tant que et rpter : S/X BNENSN%Nn SCX CNGNEN%Nn SBX/ aNC aNB aN%.Nn a SGX/P/ aN/PC aN/PB aN%N/Pn a SIXn aP22p aR2nAp3 a3 (nonc 1 : Tuelles sont les valeurs de a et i affic#es par lJal(orit#me suivant: entier a,i6 dbut a' H6 i' H6 <pter i ' iN/6 a ' aNi6 i ' CRiN/6 "usquJ* i ^X/H6 crire2a,i36 fin (nonc 4 : <aliser la fonction , :voy 23- qui reoit une c#aine de caractres en paramtre et renvoie le nombre de voyelles contenues dans cette c#aine. &ne voyelle fait partie des caractres suivant : [a, [e, [i, [o, [u, y (nonc < : Etablir un al(orit#me qui permet de saisir les lments dJun tableau de CH rels6 et affic#e le nombre des valeurs positives, le nombre des valeurs n(ative, le nombre des valeurs nulles. .Jal(orit#me fait appel * deux procdures.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : =<

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

(nonc = : Etablir un al(orit#me qui permet de trier les lments dJun tableau de CH rels6 et calcule et affic#e la moyenne de ses lments. .Jal(orit#me fait appel * une procdure trie et une fonction moyenne.

ali&er &ur PC le& algorithme& demand& dan& le& e6ercice& &ui,ant& en utili&ant le Ga,a : /3 Compter de ' en ' Ecrire un pro(ramme qui compte de I en I de H "usquJ* /HH puis affic#e la somme des nombres trouvs. C3 BinimumA ma6imum et &omme Ecrire un pro(ramme qui place B nombres passs en paramtres dans un tableau, puis calcule et affic#e le minimum, le maximum et la somme de ces nombres. B3 Boi& Ecrire un pro(ramme qui lit le nombre entier entre / et /C passs en paramtre et qui affic#e le nom du mois correspondant. 9n pourra utiliser un tableau ou lJinstruction smitc#. (61: !oncevoir un pro(ramme permettant de calculer le salaire net dun employ sac#ant que ce dernier et constitu des valeurs suivantes : .e salaire de base 2S53, une prime 2)3, une retenue 2<3 tel que : S5X nombre d#eures R taux #oraire )X taux de prime RS5 <X taux de retenueRS5 (K$: Ecrire un al(orit#me qui permet de remplir un tableau 8 de deux dimensions 2trois li(nes et cinq colonnes3 avec les nombres de / * /I. /CBGI E D F S /H // /C /B /G /I (63 Tuel rsultat produira cet al(orit#me U "-ut Ta-leau ;2B, /3 en (ntier *aria-le& , m, en (ntier Pour H*B Nm Pour m H * / ;2 , m3 m )ui,ant )ui,ant Pour H*B

!>PPT : " I> : C"C Tertiaire ? TIC

Page : ==

!cto-re $00'

Codification dun algorithme et Programmation procdurale

>ili0re : T)"I

Pour m H * / (crire ;2 , m3 m )ui,ant )ui,ant >in (64 Ecrive= un al(orit#me qui trie un tableau dans lordre dcroissant. Kous crire= bien entendu deux versions de cet al(orit#me, lJune employant le tri par slection, lJautre le tri * bulles. : (6 ' .e prsident dJun !lub sportif a soumis c#aque "oueur du club * un questionnaire, lui demandant de citer trois de ses coquipiers quJil "u(e les plus utiles pour le club. au point de vue motivation. 9n propose de stoc e les rponses dans des tableaux. .es tableaux doivent contenir comme informations v .e nom du "oueur ayant rpondu au questionnaire 2le nombre des "oueurs est B/ 3 6 v .es noms des trois "oueurs c#oisis par le prcdent. Tra,ail H faire : 0clarer les tableaux ncessaires pour lJapplication 1. Ecrire les al(orit#mes permettant de : $. 3. 4. '. 1. 4. Saisir le nom et: les rponses de c#aque "oueur. !#erc#er et affic#er les "oueurs ayant c#oisi un foueur donn, dont on saisit le nom au clavier. ;rier la liste des "oueurs par ordre alp#abtique !alculer dans un nouveau tableau pour c#aque "oueur le nombre de votes quJil a reus. ;rier la liste des "oueurs par ordre dcroissant du nombre de votes reus. 7ffic#er la liste des "oueurs qui ont reu plus que /H votes 2:om "oueur. :ombre de votes3.

!>PPT : " I> : C"C Tertiaire ? TIC

Page : 100

!cto-re $00'

You might also like