22-01-2009, 05:32 PM
  #1
achraf.mouni



   achraf.mouni
 
: 08-09-2008
:
: 2,439
achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni
12 Les structures repetitives




achraf.mouni    
22-01-2009, 05:34 PM
  #2
achraf.mouni



   achraf.mouni
 
: 08-09-2008
:
: 2,439
achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni

LA SEQUENCE.


2. LA SEQUENCE.

2.1. Langage de description.
a- Instructions
Dans les algorithmes dcrivant des calculs sur les quantits numriques, seront utilises essentiellement les instructions que nous avons dj tudies.
1 les instructions de lecture (d'entre) notes:
lire variables

indiquant la saisie des donnes
exemples:
lire somme_initiale
lire taux
2 les instructions d'criture (de sortie) de la forme:
exemple:
crire expression

indiquant l'affichage d'un message et/ou du contenu d'une variable (ou du rsultat d'un calcul)
exemples: crire " Introduisez la somme initiale (en francs): "
crire " L'intrt fourni est de " , intrt
crire intrt
crire a, b, (a+b)/2


3 les instructions d'assignation (d'affectation) reprsentes par
variable <-- expression
exemple:
intrt <-- somme-initiale * taux / 100
a <-- 0
i <-- i + 1
Les expressions sont des formules mathmatiques symbolisant des oprations sur des variables et/ou des constantes numriques.
Les variables y sont reprsentes par un identificateur (un nom) comme en algbre et les constantes sont des nombres crits en chiffres. Nous utiliserons la convention anglo-saxonne utilise par la plupart des ordinateurs (et des calculatrices) et qui consiste employer le point (".") pour sparer la partie entire de la partie dcimale d'un nombre.
Les oprations sur des nombres sont reprsentes par +, -, * (pour ne pas confondre le symbole de multiplication avec la lettre "x" ou avec le point dcimal), /.
D'autres fonctions mathmatiques usuelles sont couramment utilises: ln x, sin x, arctg x, [x] (signifie prendre la partie entire de x), a mod b (fournit le reste de la division de a par b), xy, loga x , ...
Mais l'ordinateur peut galement manipuler des variables contenant des chanes de caractres alphanumriques (alphabtiques et/ou numriques et/ou spciaux) pour les modifier, en extraire des sous-chanes, ... Ces chanes de caractres sont places entre guillemets pour les distinguer des noms de variables. L'opration de concatnation (juxtaposition de 2 chanes pour en former une nouvelle) est symbolise par // sparant les 2 chanes originelles. La fonction qui permet d'extraire une sous-chane est reprsente par le nom de la variable avec en indice les positions des lettres extraire. Ainsi la sous-chane forme des caractres occupant les positions 2, 3, 4 dans la variable prnom sera symbolise par: prnom2<--4
Enfin, la fonction qui fournit la longueur (le nombre de caractres) de la chane contenue dans la variable prnom est symbolise par |prnom|
b- Exemples
1- Exprimer un nombre de secondes sous forme d'heures, minutes, secondes. La seule donne est le nombre total de secondes que nous appellerons nsec; les rsultats consistent en 3 nombres h, m, s.
crire " Introduisez le nombre de secondes"
lire nsec
s <-- nsec mod 60
m <-- (nsec \ 60) mod 60
h <-- nsec \ 3600
crire nsec, "valent: ", h, "heure(s) ", m, "minute(s) et", s, "seconde(s)"

2- Transformer un prnom et un nom en une chane contenant l'initiale du prnom spare du nom par un point
crire "Quel est votre prnom?"
lire prnom
crire "et votre nom?"
lire nom
pr <-- prnom1
lpr <-- |prnom|
ident <-- pr // "." // nom
crire "Votre prnom de", lpr, "lettres a t abrg
et votre identification est : ", ident

c-Dclaratives
Il est aussi ncessaire de prciser ce que les variables utilises contiendront comme type de donnes. Il peut s'agir de nombres entiers, de nombres rels, de chanes de caractres, ... Il faut faire prcder la description de l'algorithme par une partie dite dclarative o l'on regroupe les caractristiques des variables manipules.
La partie dclarative est place en tte de l'algorithme et regroupe une ou plusieurs indications de la forme:
entier variables
ou rel variables

L'algorithme complt de l'exemple 1 devient:
entier nsec, h, m, s
crire "Introduisez le nombre de secondes:"
lire nsec
s <-- nsec mod 60
m <-- (nsec \ 60) mod 60
h <-- nsec \ 3600
crire nsec, "valent: ", h, "heure(s)", m, "minute(s) et", s, "seconde(s)"

Et l'algorithme de l'exemple 2:
entier lpr
chane prnom, nom, ident
crire "Quel est votre prnom?"
lire prnom
crire "et votre nom?"
lire nom
pr <-- prnom1
lpr <-- |prnom|
ident <-- pr // "." // nom
crire "Votre prnom de",lpr,"lettres a t abrg
et votre identification est : ",ident

2.2. Exercices
Pour voir les exercices et les solutions, cliquez ici.

Rsum: Pour l'change de donnes entre le programme et l'utilisateur (ou le disque du PC), 2 mots sont utiliss:
(1) lire pour recevoir de l'info du monde extrieur:
lire N o N est le nom de la variable qui va recevoir l'information fournie par l'utilisateur
lire N sur Fichier o N est le nom de la variable qui va recevoir l'information rcupre dans le fichier Fichier
(2) crire pour fournir de l'info au monde extrieur:
crire "Bonjour tout le monde." o la partie entre guillemet est le message afficher l'cran
crire N o N est le nom de la variable qui contient l'information crire
crire N sur Fichier o N est le nom de la variable qui contient l'information crire sur le fichier Fichier

Lorsque le programme travaille dans sa tte, on utilise l'assignation <-- pour symboliser la mmorisation dans une variable. N <-- N+2
x <-- 2*3+5/2
St <-- "Hello"


2.3. Traduction en Pascal.
Gnralits
Examinons lesprogrammes complets correspondant aux algorithmesdcrits en LDA.
entier nsec, h, m, s
crire "Introduisez le nombre de secondes:"
lire nsec
s <-- nsec mod 60
m <-- (nsec \ 60) mod 60
h <-- nsec \ 3600
crire nsec, "valent: ", h, "heures",m, "minutes et", s, "secondes"

deviendra en Pascal:
PROGRAM secondes;
VAR nsec, h, m, s : INTEGER;
BEGIN
WRITE('Introduisez le nombre de secondes: ');
READLN (nsec) ;
s:=nsec MOD 60 ;
m:=nsec DIV 60 MOD 60 ;
h:=nsec DIV 3600 ;
WRITELN (nsec, 'valent: ', h, 'heures', m, 'minutes et', s, 'secondes')
END.
Les rgles de base.
Dans ces exemples, nous retrouvons dj dix rgles de base:
1 Un programme Pascal se compose de trois parties:
un en-tte, caractris par le mot PROGRAM
une section dclarative introduite ici par le mot VAR
une section instruction ou corps du programme, dlimite par les mots BEGIN et END.
Attention: Le programme se termine par un point.
2 L'en tte (facultative) sert donner un nom au programme selon la forme:
PROGRAM identificateur;
3 Un identificateur en Pascal doit dbuter par une lettre suivie par un nombre quelconque de lettres, chiffres ou de "_" (caractre soulign). Les identificateurs ne peuvent contenir d'espacement (caractre "blanc") ou de caractres tels que %, ?, *, ., - ,... mais peuvent tre aussi longs que l'on veut.
4 Les variables doivent faire l'objet d'une dclaration de type de la forme:
VAR liste des variables : type;
5 Des points-virgules sont obligatoires pour sparer les trois parties et pour sparer les instructions
6 Les instructions de lecture et d'criture se traduisent respectivement par READLN et WRITE (ou WRITELN) suivis d'une liste de variables ou d'expressions places entre parenthses et spares par des virgules.
L'ajout de LN aprs WRITE (WRITELN) force le passage la ligne lors de l'affichage suivant l'cran.
7 L'assignation se reprsente par ":="
8 Les oprateurs arithmtiques sont identiques ceux du langage de description d'algorithme (LDA). Toutefois, nsec\3600 est traduit par nsec DIV 3600. En effet, outre les quatres oprations + - * / , Pascal utilise deux oprateurs supplmentaires:
DIV fournissant la partie entire du quotient de deux nombres entiers
MOD fournissant le reste de la division de deux nombres entiers
Ainsi, 13 / 5 fournit la valeur 2.6
13 DIV 5 fournit 2
et 13 MOD 5 fournit 3.
9 Les mots PROGRAM, VAR, BEGIN, END, DIV, MOD, ... ont un sens prcis dans le langage: ce sont des mots rservsqui ne peuvent tre choisis comme identificateurs par le programmeur.
Dans un programme en LDA, les mots rservs sont souligns.
Un certain nombre de mots tels que INTEGER, READLN, WRITE, ... ont une signification prdfinie. Pour viter toute erreur, on s'abstiendra de les choisir comme identificateur.
10 Les mots du langage et les identificateurs doivent tre spars les uns des autres par un ou plusieurs blancs.
Lecture.
Les lectures sont symbolises par le mot READLN. C'est la procdure READLN qui transfre les nombres ou chanes de caractres du clavier vers la mmoire centrale. Ceux-ci doivent respecter la forme des constantes de Pascal et doivent tre spars par un blanc au moins.
Le type de la constante donne et celui de la variable d'accueil doivent correspondre selon la rgle des assignations.
Pascal admet aussi la procdure READ (qui a le mme effet que READLN sans passage la ligne pour le prochain affichage) mais il s'est rvl l'usage, que celle-ci tait parfois source de problme et il est prfrable de l'viter.
Ecriture.
Les critures se font de faon semblable aux lectures, l'aide de la procdure WRITE. Les valeurs afficher apparatront sur l'cran la queue-leu-leu sur une seule ligne, parfois sans espacement entre elles.
Pour amliorer la lisibilit, on peut:
utiliser la procdure WRITELN qui force le passage la ligne suivante pour le prochain affichage
faire usage des formats d'dition qui prcisent le nombre de caractres utiliser pour afficher chacun des rsultats:
WRITE(valeur_entire : n) affiche la valeur entire sur n positions (insertion d'espacement gauche du nombre si il y a trop peu de chiffres et ajustement automatique, si n est insuffisant)
WRITE(valeur_relle) affiche le nombre en notation scientifique (x.xxxxxE+x prcd d'un espacement)
WRITE(valeur_relle : n) affiche le nombre en notation scientifique sur n positions
WRITE(valeur_relle : n1 : n2) affiche le nombre sur n1 positions avec n2 dcimales (avec ajustement).
WRITE(chane : n) affiche la chane de caractre sur n positions (insertion d'espacement gauche de la chane si il y a trop peu de caractres et ajustement automatique, si n est insuffisant)
Exemples:
Si la variable entire x contient 12345, (^ symbolise l'espacement)
WRITE(x) affiche 12345
WRITE(x:8) affiche ^^^12345
WRITE(x:2) affiche 12345
Si la variable relle x contient 123.4567, (^ symbolise l'espacement)
WRITE(x) affiche ^1.23456E+2
WRITE(x:7) affiche ^1.2E+2
WRITE(x:8:2) affiche ^^123.46
WRITE(x:2) affiche 1.2E+2
Si la variable du type chane x contient 'AZERTY', (^ symbolise l'espacement)
WRITE(x) affiche AZERTY
WRITE(x:8) affiche ^^AZERTY
WRITE (x:3) affiche AZERTY
Manipulation de nombres.
Si la mathmatique distingue plusieurs types de nombres directement manipulables par les langages informatiques, Pascal n'en reconnat que deux: les types entier et rel.
Le type entier.
En LDA, nous placerons dans la dclaration des variables une ligne telle que:
entier age, note_de_franais
Mais Pascal a subdivis les entiers en 5 types pour mieux adapter le type aux valeurs que peuvent prendre une variable, et ce pour optimiser l'occupation de la mmoire.

Type Valeurs autorises Occupation en mmoire SHORTINT de -128 +127 1 octet BYTE de 0 255 1 octet INTEGER de -32768 +32767 2 octets WORD de 0 65535 2 octets LONGINT de -2147483648 2147483647 4 octets Le type rel.
En LDA, nous placerons dans la dclaration des variables une ligne telle que:
rel taux_de_TVA, note_moyenne
Mais Pascal a subdivis les rels en 4 types pour mieux adapter le type aux valeurs que peuvent prendre une variable, et ce pour optimiser l'occupation de la mmoire.

Type Valeurs autorises Nombre de chiffres significatifs Occupation en mmoire SINGLE de -1038 9,8 1038 7 chiffres 4 octets REAL de -1038 9,8 1038 11 chiffres 6 octets DOUBLE de -10308 10308 15 chiffres 8 octets EXTENDED de -104932 9,8 104932 19 chiffres 10 octets Il existe aussi le type COMP stock sur 8 octets et offrant une gamme de nombres allant de -9,8 1018 9,8 1018 mais ne conservant que la partie entire du nombre.
Assignation.
Dans une assignation, le type de l'expression doit correspondre au type de variable de destination. Cette rgle admet une seule exception: une variable relle peut recevoir une valeur entire.
Evaluation des expressions arithmtiques.
Pascal respecte la mme convention de priorit que l'arithmtique: les multiplications et les divisions (oprateurs * / DIV et MOD) sont effectues en premier lieu, puis les additions et les soustractions (oprateurs + et -); lorsqu'une expression contient plusieurs oprateurs de mme priorit, les oprations sont effectues de gauche droite. Pour modifier cet ordre, il suffit d'introduire des parenthses.
Exemple: WRITELN(1/2*3) n'affichera pas la valeur de 1/6 mais bien de 3/2 car la division se fera avant la multiplication.
Type des oprandes et du rsultat.
Les oprateurs +, - et * peuvent agir sur des oprandes rels ou entiers et le rsultat est rel sauf si les deux oprandes sont entiers. L'oprateur / peut agir sur des entiers et des rels mais le rsultat est toujours rel. Les oprateurs DIV et MOD ne peuvent tre utiliss qu'avec des oprandes entiers et fournissent un rsultat entier.
Constantes numriques.
Le type d'une variable est dfini dans la partie dclarative du programme. C'est la forme d'criture qui dtermine le type d'une constante. Ainsi 50 est une constante entire, tandis que 3.1416 et 50.0 sont des constantes relles car elles contiennent une partie fractionnaire.
Les constantes entires ne peuvent contenir que des chiffres dcimaux (0 9) prcds ventuellement d'un signe + ou -.
Les constantes relles doivent contenir en plus:
soit par une partie fractionnaire d'au moins un chiffre, spare de la partie entire par un point:
+1.2 -56 0.01 0.0
soit une partie exposant sous forme d'une constante entire prcde par un E indiquant la puissance de 10 par laquelle il faut multiplier la valeur qui prcde la lettre E : 1E4 vaut 1 * 104 = 10000.0 6E-2 vaut 6 * 10-2 = 0.06
soit les deux: 3.14E+4 vaut 3.14 * 104 = 31400.0
Dans ce cas et si il n'y a qu'un seul chiffre non nul dans la partie entire, on parle de notation scientifique. Fonctions mathmatiques.

Notation mathmatique Fonction Pascal Type de x Type du rsultat Signification |x| ABS(x) Entier ou rel Type de x Valeur absolue de x x2 SQR(x) Entier ou rel Type de x Carr de x x1/2 SQRT(x) Entier ou rel Rel Racine carr de x sin x SIN(x) Entier ou rel Rel sin de x (x en radians) cos x COS(x) Entier ou rel Rel cos de x (x en radians) arctg x ARCTAN(x) Entier ou rel Rel Angle (en radians) dont la tangente vaut x ex EXP(x) Rel Rel Exponentielle de x ln x LN(x) Rel Rel Logarithme nprien de x [x] TRUNC(x) Rel Entier Partie entire de x [x] INT(x) Rel Rel Partie entire de x arrondi de x ROUND(x) Rel Entier Entier le plus proche de x dcimal de x FRAC(x) Rel Rel Partie dcimale de x On notera l'absence des fonctions tg x et xy qui se traduiront, en employant les formules de mathmatique adquates, respectivement par SIN(x)/COS(x) et EXP(y*LN(x)).
Manipulation de chanes de caractres.
Nous avons dj vu prcdemment un exemple de ce type de problme et il est videmment ncessaire dans la vie professionnelle de manipuler des donnes autres que numriques (noms de clients, d'articles vendus, ...). Celles-ci sont alors dites du type alphabtique. Lorsqu'elles contiennent en plus des chiffres, des symboles tels que (+, =, , &, ...), nous parlerons de donnes alphanumriques.
Si la manire de coder en binaire des nombres entiers ou rels se fait d'une manire assez naturelle par un changement de base de numration, par contre la manire de stocker des caractres en binaire est totalement arbitraire. Ainsi, l'ANSI (American National Standard Institute) a dfini un codage des caractres sur deux octets (ou bytes). Ce code porte le nom de code ASCII (American Standard Code for Information Interchange) et respecte, entre autres, l'ordre alphabtique. Comme deux octets permettent de stocker 256 valeurs diffrtentes, nous disposerons de 256 caractres diffrents.
Il existe deux types de variables alphanumriques: les caractre et chane.
Le type caractre.
Le type caractre est rserv aux variables contenant un seul caractre (lettre, symbole, ponctuation, ...) et il est possible d'en dterminer les successeur/prdcesseur/position dans la liste des codes ASCII. Ainsi le successeur de "B" est "C", son prdcesseur "A" et son code ASCII 66.
En LDA, nous placerons dans la dclaration des variables une ligne telle que:
caractre lettre, initiale
qui se traduira en Pascal par:
VAR lettre, initiale: CHAR;
Le type chane.
Les variables du type chane peuvent contenir
soit une suite de caractres (un mot, une phrase, ...),
soit un caractre (mais dont, par exemple, il est impossible de dterminer le suivant),
soit aucun caractre (on parle alors de chane vide).
En LDA, nous placerons dans la dclaration des variables une ligne telle que:
chane nom, adresse
qui se traduira en Pascal par:
VAR nom, adresse: STRING;
Cependant, Pascal permet aussi de prciser la taille maximale (25 dans l'exemple ci-dessous) que pourra avoir la chane qui sera affecte la variable:
VAR nom, adresse: STRING[25];
En l'absence de prcision de longueur, Pascal rserve automatiquement la taille maximale, savoir 255 caractres.
Assignation.
Dans une assignation, le type de l'expression doit correspondre au type de variable de destination. C'est ainsi que les assignations suivantes sont illgales:
initiale <-- "Einstein"

initiale <-- ""

avec la variable initiale dclare du type caractre. Par contre, si cette variable a t dclare du type chane, celles-ci sont tout fait lgales.
Les fonctions alphanumriques.
achraf.mouni    
22-01-2009, 05:36 PM
  #3
achraf.mouni



   achraf.mouni
 
: 08-09-2008
:
: 2,439
achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni

L'ALTERNATIVE.


3. STRUCTURES DE CHOIX.

3.1. Introduction
Les algorithmes dcrits dans le chapitre prcdent taient trs simples et une calculatrice aurait suffi pour leur excution. En effet, pour l'instant, nous sommes seulement en mesure de dcrire une suite d'oprations, chacune devant tre excute une et une seule fois. Nous ne pouvons par exemple utiliser notre algorithme de calcul d'intrt avec diffrents taux d'intrt. Pour faire cela, il nous faut introduire de nouvelles structures.
Il a t dmontr que pour reprsenter n'importe quel algorithme, il faut disposer des trois possibilits suivantes:

  • la structure de squence qui indique que les oprations doivent tre excutes les unes aprs les autres
  • la structure de choix qui indique quel ensemble d'instructions doit tre excut suivant les circonstances
  • la structure de rptition qui indique qu'un ensemble d'instructions doit tre excut plusieurs fois.
Jusqu' prsent, nous avons dcrit la structure de squence. Nous dcrirons dans ce chapitre les structures de choix: l'alternative et le choix multiple. 3.2. La structure alternative.
Voici les rgles d'un jeu trs simple: deux joueurs A et B se cachent la main droite derrire le dos. Chacun choisit de tendre un certain nombre de doigts (de 0 5), toujours derrire le dos. Les deux joueurs se montrent la main droite en mme temps. Si la somme des nombres de doigts montrs est paire, le premier joueur a gagn, sinon c'est le second. Le problme est de faire prendre la dcision par l'ordinateur.
Exprim en franais, l'algorithme se prsente comme suit:
- prendre connaissance du nombre de doigts de A
- prendre connaissance du nombre de doigts de B
- calculer la somme de ces deux nombres
- si la somme est paire, A est le gagnant
- si la somme est impaire, B est le gagnant.
Pour dterminer si un nombre est pair ou impair, il suffit de calculer le reste de la division par 2 (.. modulo 2): il vaut 0 dans le premier cas et 1 dans le second.

En langage de description d'algorithme, l'algorithme s'crira:

entier na,nb,reste
lire na,nb
reste <-- (na + nb) mod 2
si reste = 0 alors crire "Le joueur A a gagn."
sinon crire "Le joueur B a gagn."
fsi
crire "Bravo pour le gagnant!"

REMARQUES

(1) La structure alternative se prsente en gnral sous la forme si expression alors premire squence d'instructions
sinon deuxime squence d'instructions
fsi

o expression conditionne le choix d'un des deux ensembles d'instructions. Cette expression peut tre soit vraie soit fausse. Si l'expression est vraie, la premire squence d'instruction sera excute et la seconde sera ignore; si l'expression est fausse, seule la seconde squence d'instructions sera effectue.
Le mot sinon indique o se termine la premire squence d'instructions et o commence la seconde. Le mot fsi (abrg de "fin de si") indique o se termine la seconde squence d'instructions.
(2) Dans certains cas, lorsque l'expression est fausse, aucune instruction ne doit tre excute. La condition s'exprime alors plus simplement sous la forme: si expression alors squence d'instructions
fsi

(3) Quelle que soit la squence choisie et excute, les instructions qui suivent fsi seront excutes.
(4) Chacune des squences d'instructions d'un si ... fsi peut contenir des si...fsi. On dit alors que les structures sont imbriques.
(5) Pour faire apparatre plus clairement la structure, on crit les squences d'instructions lgrement en retrait des mots-clefs (si, alors, sinon, fsi). On dit qu'on indente le texte de l'algorithme.
Considrons l'exemple suivant crit sans indentation et o les fins de si (fsi) ne sont pas indiques: si a > 0 alors
si b > 0 alors
c <-- a+b
sinon
c <-- a-b

Cet algorithme peut aussi bien tre une mauvaise criture de:
(2.1)

si a > 0 alors si b > 0 alors c <-- a+b
sinon c <-- a-b
fsi
fsi
que de:
(2.2)
si a > 0 alors si b > 0 alors c <-- a+b
fsi
sinon c <-- a-b
fsi

Dans (2.1), si a est ngatif, aucun traitement n'est effectu et dans (2.2) si a est ngatif, c vaut a-b.
3.3.Expressions logiques et variables boolennes.
Expressions logiques.
Les expresssions logiques se construisent partir d'affirmations qui sont soit vraies soit fausses. Une condition telle que "reste=0" n'impose pas la variable reste d'tre nulle. Il ne s'agit en effet pas d'une assignation mais de l'expression d'une condition qui ne sera ralise (et n'aura donc la valeur "vrai") que si la variable reste a t assigne 0. Dans les autres cas, cette condition prendra la valeur "faux".
On peut combiner des affirmations l'aide d'oprateurs logiques , savoir: ou, et et non, les deux premiers portent sur deux oprandes et le dernier sur un seul. Il est vident que ces oprandes ne peuvent prendre que deux valeurs: vrai ou faux.
Par dfinition:
op1ou op2 n'a la valeur faux que si les deux oprandes ont la valeur faux, sinon l'expression a la valeur vrai.
op1et op2 n'a la valeur vrai que si les deux oprandes ont la valeur vrai, sinon l'expression a la valeur faux.
non oprande a la valeur vrai si l'oprande a la valeur faux et inversement.
Supposons par exemple qu'on excute les assignations suivantes: a <-- 1
a <-- 1
b <-- 2
c <-- 3

alors
(b > 8) ou (c < 1) a la valeur faux
(b > 0) ou (c > 1) a la valeur vrai
(b > 9) ou (c > 1) a la valeur vrai
(b > a) et (c > b) a la valeur vrai
(b > a) et (c < 0) a la valeur faux
non (c < a) a la valeur vrai
non ((b > a) et (c > b)) a la valeur faux
((b > a) et (c > b)) ou (a < 0) a la valeur vrai

Les relations d'galit ou d'ingalit ci-dessus font comparer des nombres ou des variables valeur numrique.
On peut galement comparer des lettres: l'affirmation "b" prcde "x" dans l'ordre alphabtique a pour valeur vrai. De mme, si la variable car contient le caractre "v", l'affirmation car suit "w" dans l'ordre alphabtique a pour valeur faux.
Comme nous l'avons dj vu, pour ramener des nombres la seule reprsentation que connaissent les ordinateurs (le binaire), il suffit de faire un changement de base et passer de la base 10 la base 2. Par contre, il n'existe pas de manire naturelle pour reprsenter un caractre sous forme binaire. On associe donc arbitrairement un code chaque caractre connu par l'ordinateur, savoir les signes du clavier (lettres, chiffres dcimaux, signes de ponctuation et caractres spciaux) et les caractres de contrle. Le code importe peu mais l'ordre de classement (collating sequence) qu'il dfinit est par contre trs important. Le code ASCII, le plus frquemment utilis sur les micro-ordinateurs, respecte l'ordre croissant des caractres "0", "1", ..., "9" et l'ordre alphabtique des 26 lettres de l'alphabet, et ceci sans mler aucun autre caractre dans ces squences. Afin de simplifier les notations, on convient d'utiliser les symboles "<" pour signifier "prcde dans la collating sequence", "" pour "suit dans la collating sequence ou est gal",...
Variables boolennes.
Il est possible de stocker la valeur d'une expression logique dans une variable (comme le rsultat d'une opration arithmtique est stock dans une variable numrique). Cette variable ne peut prendre que les valeurs vrai et faux. Ces variables sont appeles variables logiques ou boolennes.
En LDA, elles se dclarent comme ceci:
boolen: OK, pair
et en Pascal par:
VAR BOOLEAN: OK, pair;
El l'assignation d'une variable boolenne se fait de la manire suivante: OK <-- Vrai

3.4. Exercices.
Pour voir les exercices et les solutions, cliquez ici.
3.5. L'alternative en Pascal.
En Pascal, l'exemple du jeu dcrit en 2 se traduit par:
PROGRAM Jeu;
VAR NA, NB, Reste:INTEGER;
BEGIN
WRITE('Introduisez le nombre de doigts montrs par le joueur A');
READLN(NA);
WRITE('Introduisez le nombre de doigts montrs par le joueur B);
READLN(NB);
RESTE := (NA + NB) MOD 2;
IF RESTE=0 THEN WRITELN('Le joueur A a gagn.')
ELSE WRITELN('Le joueur B a gagn.');
WRITELN('Bravo pour le gagnant!')
END.
La structure alternative se traduit presque mot mot de LDA en Pascal: si se traduit par IF, alors par THEN et sinon par ELSE. Les squences d'instructions excuter dans le cas o la condition est vraie (cette squence suit le mot alors) et dans le cas o la condition est fausse (cette squence suit le mot sinon) doivent tre encadres par le mots BEGIN et END qui en indiquent le dbut et la fin. Dans le cas o ces squences se rduisent une seule instruction, les mots BEGIN et END peuvent tre omis (comme dans l'exemple ci-dessus).
Ainsi, en ajoutant le message WRITELN('Bravo pour le gagnant!') juste aprs avoir indiqu le nom du vainqueur, nous serions obligs d'utiliser les BEGIN et END:
PROGRAM Jeu;
VAR NA, NB, Reste:INTEGER;
BEGIN
WRITE('Introduisez le nombre de doigts montrs par le joueur A');
READLN(NA);
WRITE('Introduisez le nombre de doigts montrs par le joueur B);
READLN(NB);
RESTE := (NA + NB) MOD 2;
IF RESTE=0 THEN BEGIN
WRITELN('Le joueur A a gagn.');
WRITELN('Bravo pour le gagnant!')
END
ELSE BEGIN
WRITELN('Le joueur B a gagn.');
WRITELN('Bravo pour le gagnant!')
END
END.
La forme:
si expression alors squence d'instructions
sinon squence d'instructions
fsi

se traduit en Pascal par:
IF expression THEN BEGIN
squence d'instructions
END
ELSE BEGIN
squence d'instructions
END;
Il est interdit de mettre un ; aprs le END indiquant la fin de la squence d'instructions qui suit le THEN.

Et la forme: si expression alors squence d'instructions
fsi

se traduit en Pascal par:
IF expression THEN BEGIN
squence d'instructions
END;
Remarques:
(1) La traduction en Pascal de (2.1) est:
IF A>0 THEN IF B>0 THEN C:=A+B
ELSE C:=A-B;
En effet, en Pascal, le ELSE se rapporte toujours au IF ... THEN le plus proche.
Pour traduire (2.2), il faut soit modifier les alternatives pour que le sinon se rapporte au alors le plus proche: si NOT (a=0) alors c <-- a - b
sinon si b > 0 alors c <-- a + b
fsi
fsi
ou faire apparatre que le sinon de la premire condition est absent:

IF A>0 THEN IF B>0 THEN C:=A+B
ELSE
ELSE C:=A-B;
(2) Le programme de jeu list ci-dessus a un gros dfaut: lorsque le premier joueur tape au clavier son nombre stock dans NA, celui-ci reste affich et le deuxime joueur peut choisir NB de faon tre certain de gagner. Il existe deux remdes ce problme. La premire consiste effacer l'cran aprs que A ait tap son nombre. Ceci se fait en Pascal par l'instruction CLRSCR qui ncessite le chargement d'une librairie. Celui-ci est activ par la ligne: USES Crt; crite juste en-dessous de PROGRAM Jeu;
La deuxime solution est de saisir le caractre (le chiffre dans ce cas) tap au clavier sans l'afficher. Cela se fait grce la fonction READKEY qui scrute en permanence le clavier et qui capte la touche qui vient d'tre enfonce. Cependant cette fonction ne peut tre employe que pour l'affectation une variable de type caractre.
Dans ce cas notre programme deviendrait:
PROGRAM Jeu;
USES Crt;
VAR NA, NB, Reste, Err : INTEGER;
A, B : CHAR;
BEGIN
CLRSCR;
WRITE('Introduisez le nombre de doigts montrs par le joueur A');
A:=READKEY;
VAL(A, NA, Err);
IF Err<>0 THEN WRITELN('Erreur de format numrique!')
ELSE BEGIN
WRITE('Introduisez le nombre de doigts montrs par le joueur B);
B:=READKEY;
VAL(B, NB, Err);
IF Err<>0 THEN WRITELN('Erreur de format numrique!')
ELSE BEGIN
RESTE := (NA+NB) MOD 2;
IF RESTE=0 THEN WRITELN('Le joueur A a gagn.')
ELSE WRITELN('Le joueur B a gagn.');
WRITELN('Bravo pour le gagnant!')
END
END.
La procdure VAL(Chaine, Nombre, Erreur) permet de convertir Chaine en sa valeur numrique.qui sera stocke dans Nombre. La variable Erreur contiendra la valeur 0 si la conversion s'est faite sans problme ou la position du premier caractre inadquat. Erreur doit tre du type INTEGER, Chaine du type STRING ou CHAR et Nombre d'un type numrique (entier ou rel). 3.6. Le choix multiple.
Supposons que l'on veuille demander l'utilisateur de choisir dans un menu une des 3 possibilits offertes. Le choix prsent ne se limite pas une alternative (soit - soit).
Nous nous trouvons en prsence d'un choix multiple qui s'crit en LDA: entier i
lire i
selon que
i=1 faire bloc1
oq i=2 faire bloc2
oq i=3 faire bloc3
autrement crire "Mauvais choix"
fselon
Le mot oq est l'abrviation de "ou que".

La structure de choix multiple peut, comme l'alternative, prendre deux formes: selon que
premire expression logique faire premire squence d'instructions
oq deuxime expression logique faire deuxime squence d'instructions
...
oq n me expression logique faire n me squence d'instructions
autrement (n+1) me squence d'instructions
fselon
et selon que
premire expression logique faire premire squence d'instructions
oq ...
oq n me expression logique faire n me squence d'instructions
fselon
La premire forme gnralise le si ... alors ... sinon ... fsi, la seconde le si ... alors ... fsi.

Si la i me expression logique a la valeur vrai, la i me squence d'instructions est excute puis il y a passage aux instructions qui suivent le mot fselon. Si toutes les expressions logiques ont la valeur faux, on excute dans le premier cas la squence d'instructions qui suit le mot autrement , dans le deuxime cas on passe directement ce qui suit fselon.
Afin d'viter toute ambigut, on exige que les diffrentes expressions logiques soient mutuellement exclusives.
3.7. Le choix multiple en Pascal.
La traduction de selon que ...fselon en Pascal n'est pas trs commode parce que la structure du choix multiple y est trs restrictive: Il est seulement possible de traduire un selon que ... fselon pour lequel l'expression prend les valeurs prises par une variable de type numr (dont les valeurs appartiennent un ensemble; par exemple entier, caractre).
La forme gnrale du choix multiple est:
CASE <expression> OF
valeur1: premire squence d'instructions;
valeur2: deuxime squence d'instructions;
...
valeurN: Nme squence d'instructions;
ELSE (N+1) me squence d'instructions;
END;
Il est noter que les diffrentes squences d'instructions sont dlimites par BEGIN et END qui peuvent seulement tre omis si une squence se rsume une seule instruction. Pour traduire en Pascal un selon que plus gnral, il faut utiliser des IF imbriqus. Par exemple, ...
lire x
selon que
x<0 faire crire x,"est ngatif"
oq x=0 faire crire x,"est nul"
autrement crire x,"est positif"
fselon
...

se traduit par:
...
READLN(x);
IF x<0 THEN WRITELN(x, ' est ngatif.')
ELSE IF x=0 THEN WRITELN(x, ' est nul.')
ELSE WRITELN(x, ' est positif.');
3.8. Exercices. 1) Lire 3 nombres a, b et c. Dterminer si l'quation ax+by+c=0 reprsente l'quation d'une droite parallle l'un des axes (et si oui, lequel) ou une droite oblique par rapport aux axes. Tenir compte du fait qu'on pourrait avoir a=b=0.
2) Lire 3 nombres a, b et c o a est diffrent de 0. Dterminer si la parabole d'quation y=ax+bx+c coupe l'axe des x en 0, 1 ou 2 points.
3) Demander et lire les valeurs de R en Ohm, I en Ampre et t en seconde. Dterminer un algorithme qui proposerait de calculer la diffrence de potentiel, la puissance et l'nergie.
achraf.mouni    
23-01-2009, 08:18 PM
  #4
 
 
: 01-12-2007
: 1,140

    
23-01-2009, 08:53 PM
  #5
achraf.mouni



   achraf.mouni
 
: 08-09-2008
:
: 2,439
achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni

achraf.mouni    
23-01-2009, 08:57 PM
  #6
 
 
La spécialité: Autres
: 15-07-2008
:
: 3,501


__________________





if we say we do
     
23-01-2009, 09:02 PM
  #7
achraf.mouni



   achraf.mouni
 
: 08-09-2008
:
: 2,439
achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni

.................
achraf.mouni    
28-01-2009, 02:50 PM
  #8
blaklist1
   blaklist1
 
: 06-01-2008
: qq part o nord
: 34
blaklist1

vraiment c magnific mon frere....... est ce ke t'as des exercices sur le langage C car la facult ou je me trouve on s'anteresse du C et pas de pascal ! merci encor une fois
__________________
blaklist1    
28-01-2009, 03:00 PM
  #9
achraf.mouni



   achraf.mouni
 
: 08-09-2008
:
: 2,439
achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni   achraf.mouni

achraf.mouni    
28-01-2009, 05:31 PM
  #10
lucky girl
VIP_MEMBRE
   lucky girl
 
La spécialité: Autres
( )
: 01-01-2009
:
: 1,151
lucky girl   lucky girl   lucky girl   lucky girl   lucky girl   lucky girl   lucky girl   lucky girl   lucky girl   lucky girl   lucky girl

merciiiiiiiiiiii bcp mon frere c un tres bon travail
__________________



WhAt DoEs NoT KiLL mE mAkE Me StRoNgEr





lucky girl    

(Tags)
repetitives, structures

« | »



{} Tekla Structures 17.0 rais1820 3 23-08-2012 02:40 PM
dynamique des structures SAM17NO 6 08-04-2011 11:04 AM
Les structures avec si SHADOWCASTLE La langue franaise 5 14-10-2009 05:08 PM
{} Hydraulic structures delmo 7 08-09-2009 04:55 PM
Dynamics of Structures _ 0 02-05-2009 11:52 PM


11:45 AM.