1Commenconsparunpetitexemple... PROGRAM circonference; VAR rayon, circonference : REAL; BEGIN readln(rayon); circonference:=rayon*2*3.1416 ; writeln(rayon,circonference); END. Ceprogrammedemandeaunutilisateurdetaperunnombre,etilrendcenombreetlacirconference d’un cercle dont ce nombre est le rayon. Ce n’est pas trop complique. On peut tout de suite identier les parties les plus importantes. Il y a d’abord le squelette du programme : PROGRAM ... ; (* Calcul de la circonference d’un cercle *) VAR .... ; BEGIN ... END.
1. La partiePROGRAM...;progomaue;rammdatresnnurenno 2. la partie(*...*)stiantessentielspourocpmerdnerecuqfeteronadrdnecoesnemmriatI.seossl un programme. Ils ne sont pas facultatifs ; 3. la partieVAR...;adsertra;diopnultsavsebairalcelrerurnaesabsdletoon 4. la partieBEGIN ... END. C’est la partie qui contient l’algorithme.contient ce que le programme fait. Elle se termine par un point “. la partie”. C’estalgorithmedu programme. Onvamaintenantvoirplusendetailcesdierentesparties.Jenerevienspassurlenomdupro-gramme.
3
2 La partie des declarations 2.1Lesdierentstypesdebase VAR rayon, circonference : REAL; Ondeclarequedansl’algorithme,onutilisedeuxvariables,qu’onappellerayonetdiametre. En plus,ondeclarequecesdeuxvariablessontdetypesREAL qu’on pourra les utiliser un peu. Cela signie commedesnombresreels.Maisilyad’autrestypesquisontdenis: 1. le typeinteger s’agit du type des nombres qui sont des entiers relatifs ;. Il 2. le typeboolean. Il s’agit du type des booleens. Ces variables ne peuvent prendre que 2 valeurs, TRUE(vrai) ouFALSE(faux) ; 3. le typecharsla’igdtI.irbaenavecyteledutavpepeaoirliuqepytutneitnocacarscle.Uesertvaleur’A’,’b’,’7’,... Le7d’une variable de typechar Il n’est pas question deest un caractere. faire des operations dessus ! 2.2Lesoperationsquipreserventletype On utilise letyped’une expression pour savoir qu’elles operations on peut appliquer. Sur les types de nombres,on a toujours+,-, et*. Question : quesignie3/5?(divisioneuclidienneoureelle?) Onvoitqueladivisionnevoudrapasdirelameˆmechosepourlesintegeret pour lesreal. Pour lesintegerrapneitstreteeepaeenreemenAutr,onstdituelcisnonn.edieilitinu,ovidilase entiere. Par exemple, 17 = 3estneisr2+S.ruel5snoitareops2leitnend,odivetmod, qui auront pour valeur : 1.17 mod 3a pour valeur2; 2.17 div 3a pour valeur5. Pour lesreal, on utilise le symbole standard de division,/ n’y a pas de surprises.. Il Il est possible defairedesoperationsmelantdesrealet desintegerideressontcons,lasecscan.Dsednarepoxuedse de typereal. Sur les caracteres, Mais ils sont codes dans le codeil n’y a pas d’operations possibles.ASCII faut. Il faireattention,cartouslescaracteresn’ysontpas,iln’yenaque256.L’interˆetestqu’ilestpossiblede passer d’un entier entre0et255nonafioctisiltlanneture,ecatcnraauCHR. Par exemple, on a : CHR(67)prend la valeur’C’; CHR(51)prend la valeur’3’. Sur les booleens,on a les operations classiques de logique,AND,OR,NOT, ainsi que l’operationXOR.
Exercice : Donner une expression utilisant x, y,not,andetorqueniremdlmeˆeseratlueuqtpo’ltionerax xory.
2.3Lesoperationsquirendentuntypeboolean Il y a ici toutes les operations de comparaison<,>,<=,>= et<>id(re)tne compare entre elles. On deuxexpressionsd’unmeˆmetype,sicetypepeutˆetreordonne.Ilestaussipossibledecomparerdes expressions de typerealavec des expressions de typeinteger. Pour les caracteres, on utilise l’ordre du code ASCII. Par exemple : CH R(60)< CH R(49) rendfalse; 3.5>= 3 rendtrue; 3.0<>3 rendfalse.
5
3 La partie algorithme Ils’agitdelapartieouestdenil’algorithme.Onval’etudierunpeuplusendetail.Cettepartieest composee d’instructionspsrareeeapnostquis.sleguir-vntoispde readln(rayon); circonference:=rayon*2*3.1416 ; writeln(rayon,circonference); Il est obligatoire de mettre le point-virgule entre chaque instruction. Le dernier point-virgule, lui, n’est pas obligatoire. Le mettre revient a ajouter une instruction vide. Il faut noter qu’on peut mettre autantd’intructionsvidesalasuitequ’onledesire. 3.1 Interface avec l’utilisateur Les deux commandes : readln(rayon); ... writeln(rayon,circonference); serventainteragiravecl’utilisateurduprogramme. readlnliurpoeeslitituseaneeduppatnaylrusurtetq,eilu’livareeaplru’itilasgneunedonneeent touchereturn. L’utilisateurdoit ce n’est pas le Sidonner une valeur qui correspond au type attendu. cas,leprogrammes’arrˆete.Quelquesexemplesdevaleurspossibles: pour uninteger: 3,5,17, . . .mais pas 3.5 ou ’A’ ; pour unreal: 4,3.5,45.74e1, .07, . . .mais toujours pas ’A’ ; pour unboolean: il Par contre, iln’est pas possible de les demander directement a l’utilisateur. est toujours possible de les ecrire ; pour leschar:3,A,’,e,. . . , mais pas ’AA’. 3.2 Les aectations Ilresteunederniereinstructionavoir,l’ae ctation: circonference:=rayon*2*3.1416 ; Cette instruction est denie par:= droite de ce signe, il y a une expression :. A ...:=rayon*2*3.1416 qui rend une valeur de typereal gauche de ce signe. A circonference:=... ilyalenomd’unevariabledemˆemetype,realreualaveditroadalsnaC.teetninstockelstructio variableagauche.Lorsque,adroite,onutiliselavariablerayon,avnoafnetutisilierladernierevaluer quiaetestockeedanscettevariable. Il faut noter deux choses : ilyaunrisqued’erreursionutiliseunevariabledanslaquellerienn’aetestocke.Ilfauttoujours verierqu’ilyaunevaleurdestockeedanslavariableavantdel’utiliser; lestypesagaucheetadroitedel’aectationdoiventtoujoursˆetrelesmˆemes,saufsiadroitec’est une expression de typeintegerpyedeteheungauciablevar,atereal.
6
4Contrˆoledeux 4.1Executionconditionnelle On veut faire un programme qui donne, en sortie, la valeur absolue d’un nombre que donne l’utilisateur. Ce nombre est a priori de typereal qui donne le squelette suivant pour ce programme :. Ce Programvaleur absolue ; (* Ce programme calcule la valeur absolue d’un nombre donne par un utilisateur. Les variables sont assez explicites *) nombre,valeurabsolue :real; begin writeln(’De quel nombre voulez-vous la valeur absolue ?’); readln(nombre); (* calcul de la valeur absolue *) writeln(’La valeur absolue de ’,nombre,’ est ’,valeurabsolue); end. Ilresteasavoircommentcalculerlavaleurabsolue.Onsaitque: sinombre>= 0, la valeur absolue denombreestnombre; sinombre<0, la valeur absolue denombreest l’oppose denombre. Il y a une instruction, enPascal l’instruction : C’est, qui agit comme le “si”. ifexpr booltheninst expr bool Si elle vautest une expression booleenne qu’on commence par calculer.true, alors on execute l’instructioninst.tiirenaf,nnoiSontionvideeinstruc.)eLmmcoioes(censt’esilinueavantuti programme devient : Programvaleur absolue ; (* Ce programme calcule la valeur absolue d’un nombre donne par un utilisateur. Les variables sont assez explicites. On utilise deux conditionnelles. *) Varnombre,valeurabsolue :real; begin writeln(’De quel nombre voulez-vous la valeur absolue ?’); readln(nombre); if(nombre>= 0)thenvaleurabsolue:=nombre ; if(nombre<0)thenvaleurabsolue:=-nombre ; writeln(’La valeur absolue de ’,nombre,’ est ’,valeurabsolue); end. Pour calculer la valeur absolue, on peut aussi utiliser la construction.ESLE.....IENTH..F.. Cette construction prend une expression de typeboolean programme execute la le, et deux instructions. premiere si l’expression de typebooleanvauttruevautsionpresl’exemisixedauee,ltfalse: ifexpr booltheninst1elseinst2