Les structures repetitives

achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: كانون الثاني 22, 2009, 04:32:45 مسائاً


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: كانون الثاني 22, 2009, 04:34:32 مسائاً
LA SEQUENCE.

   
2. LA SEQUENCE.

 2.1. Langage de description.  
a- Instructions  
Dans les algorithmes décrivant des calculs sur les quantités numériques,  seront utilisées essentiellement les instructions que nous avons déjà étudiées.  
1° les instructions de lecture (d'entrée) notées:  
lire variables

indiquant la saisie des données  
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  résultat d'un calcul)  
exemples: écrire " Introduisez la somme initiale (en francs): "
écrire " L'intérêt fourni est de " , intérêt
écrire intérêt
écrire a, b, (a+b)/2


3° les instructions d'assignation (d'affectation) représentées par  
variable <-- expression
exemple:  
intérêt <-- somme-initiale * taux / 100
a <-- 0
i <-- i + 1
Les expressions sont des formules mathématiques symbolisant des  opérations sur des variables et/ou des constantes numériques.  
Les variables y sont représentées par un identificateur (un  nom) comme en algèbre et les constantes sont des nombres écrits en chiffres.  Nous utiliserons la convention anglo-saxonne utilisée par la plupart des  ordinateurs (et des calculatrices) et qui consiste à employer le point  (".") pour séparer la partie entière de la partie décimale d'un nombre.  
Les opérations sur des nombres sont représentées par +, -, * (pour ne pas  confondre le symbole de multiplication avec la lettre "x" ou avec le point  décimal), /.  
D'autres fonctions mathématiques usuelles sont couramment utilisées: ln x,  sin x, arctg x,
  • (signifie prendre la partie entière de x), a  mod b (fournit le reste de la division de a par b), xy,  loga x , ...  [/SIZE]
    Mais l'ordinateur peut également manipuler des variables contenant des  chaînes de caractères alphanumériques (alphabétiques et/ou numériques  et/ou spéciaux) pour les modifier, en extraire des sous-chaînes, ... Ces chaînes  de caractères sont placées entre guillemets pour les distinguer des noms de  variables. L'opération de concaténation (juxtaposition de 2 chaînes pour  en former une nouvelle) est symbolisée par // séparant les 2 chaînes originelles. La fonction qui  permet d'extraire une sous-chaîne est représentée par le nom de la  variable avec en indice les positions des lettres à extraire. Ainsi la  sous-chaîne formée des caractères occupant les positions 2, 3, 4 dans la  variable prénom sera symbolisée par: prénom2<--4  
    Enfin, la fonction qui fournit la longueur (le nombre de caractères)  de la chaîne contenue dans la variable prénom est symbolisée par |prénom|  
    b- Exemples  
    1- Exprimer un nombre de secondes sous forme d'heures, minutes, secondes. La  seule donnée est le nombre total de secondes que nous appellerons nsec; les  résultats 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 prénom et un nom en une chaîne contenant l'initiale du  prénom séparée du nom par un point  
    écrire "Quel est votre prénom?"
    lire prénom
    écrire "et votre nom?"
    lire nom
    pr <-- prénom1
    lpr <-- |prénom|
    ident <-- pr // "." // nom
    écrire "Votre prénom de", lpr, "lettres a été abrégé
    et votre identification est : ", ident

    c-Déclaratives
    Il est aussi nécessaire de préciser ce que les variables utilisées  contiendront comme type de données. Il peut s'agir de nombres entiers, de  nombres réels, de chaînes de caractères, ... Il faut faire précéder la  description de l'algorithme par une partie dite déclarative où l'on  regroupe les caractéristiques des variables manipulées.  
    La partie déclarative est placée en tête de l'algorithme et regroupe une ou  plusieurs indications de la forme:  
    entier variables
    ou réel variables

    L'algorithme complété 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
    chaîne prénom, nom, ident
    écrire "Quel est votre prénom?"
    lire prénom
    écrire "et votre nom?"
    lire nom
    pr <-- prénom1
    lpr <-- |prénom|
    ident <-- pr // "." // nom
    écrire "Votre prénom de",lpr,"lettres a été abrégé
    et votre identification est : ",ident

    2.2. Exercices  
    Pour voir les exercices et les solutions, cliquez ici.  
     
        Résumé:  Pour l'échange de données  entre le programme et l'utilisateur [SIZE=-2](ou le disque du PC), 2  mots sont utilisés:
    (1) lire pour recevoir de l'info du monde  extérieur:
    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 récupérée dans le fichier  Fichier
    (2) écrire pour fournir de l'info au monde  extérieur:
    é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 tête, on utilise l'assignation <-- pour symboliser la mémorisation dans une variable. N <-- N+2
    x <-- 2*3+5/2
    St <-- "Hello"[/COLOR][/SIZE]

    2.3. Traduction en Pascal.  
    Généralités  
    Examinons lesprogrammes complets correspondant aux algorithmesdécrits 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 règles de base.  
    Dans ces exemples, nous retrouvons déjà dix règles de base:  
    1° Un programme Pascal se compose de trois parties:  
    un en-tête, caractérisé par le mot PROGRAM  
    une section déclarative introduite ici par le mot VAR  
    une section instruction ou corps du programme, délimitée par les mots BEGIN et END.  
    Attention: Le programme se termine par un point.  
    2° L'en tête (facultative) sert à donner un nom au programme selon la forme:  
    PROGRAM identificateur;  
    3° Un identificateur en Pascal doit débuter par une lettre suivie par un  nombre quelconque de lettres, chiffres ou de "_" (caractère  souligné). Les identificateurs ne peuvent contenir d'espacement (caractère  "blanc") ou de caractères tels que %, ?, *, ., - ,... mais peuvent être aussi  longs que l'on veut.  
    4° Les variables doivent faire l'objet d'une déclaration de  type de la forme:  
    VAR liste des variables :  type;  
    5° Des points-virgules sont obligatoires pour séparer les trois parties et  pour séparer 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 placées entre parenthèses et séparées par des virgules.  
    L'ajout de LN après WRITE  (WRITELN)  force le passage à la ligne lors de l'affichage suivant à l'écran.  
    7° L'assignation se représente par ":="  
    8° Les opérateurs arithmétiques sont identiques à ceux du langage de  description d'algorithme (LDA). Toutefois, nsec\3600 est traduit par nsec DIV 3600. En effet, outre les  quatres opérations + - * / , Pascal utilise deux opérateurs supplémentaires:  
    DIV fournissant la partie  entière 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 précis dans le langage: ce  sont des mots réservésqui ne peuvent être choisis comme  identificateurs par le programmeur.  
    Dans un programme en LDA, les mots réservés sont soulignés.  
    Un certain nombre de mots tels que INTEGER, READLN, WRITE, ... ont une signification prédéfinie. Pour  éviter toute erreur, on s'abstiendra de les choisir comme identificateur.  
    10° Les mots du langage et les identificateurs doivent être séparés les uns  des autres par un ou plusieurs blancs.  
    Lecture.  
    Les lectures sont symbolisées par le mot READLN. C'est la procédure READLN qui transfère les nombres ou chaînes de  caractères du clavier vers la mémoire centrale. Ceux-ci doivent respecter la  forme des constantes de Pascal et doivent être séparés par un blanc au moins.  
    Le type de la constante donnée et celui de la variable d'accueil doivent  correspondre selon la règle des assignations.  
    Pascal admet aussi la procédure READ (qui a le même effet que READLN sans passage à la ligne pour le prochain  affichage) mais il s'est révélé à l'usage, que celle-ci était parfois source de  problème et il est préférable de l'éviter.  
    Ecriture.  
    Les écritures se font de façon semblable aux lectures, à l'aide de la  procédure WRITE. Les valeurs à  afficher apparaîtront sur l'écran à la queue-leu-leu sur une seule ligne,  parfois sans espacement entre elles.  
    Pour améliorer la lisibilité, on peut:  
    utiliser la procédure WRITELN qui force le passage à la ligne suivante  pour le prochain affichage  
    faire usage des formats d'édition qui précisent le nombre de  caractères à utiliser pour afficher chacun des résultats:  
    WRITE(valeur_entière :  n) affiche la valeur entière 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_réelle)  affiche le nombre en notation scientifique (x.xxxxxE+x précédé d'un espacement)  
    WRITE(valeur_réelle :  n) affiche le nombre en notation scientifique sur n positions  
    WRITE(valeur_réelle : n1 :  n2) affiche le nombre sur n1 positions avec n2 décimales (avec  ajustement).  
    WRITE(chaîne : n)  affiche la chaîne de caractère sur n positions (insertion d'espacement à gauche  de la chaîne si il y a trop peu de caractères et ajustement automatique, si n  est insuffisant)  
    Exemples:  
    Si la variable entière x contient 12345, (^ symbolise l'espacement)  
    WRITE(x) affiche 12345  
    WRITE(x:8) affiche ^^^12345  
    WRITE(x:2) affiche 12345  
    Si la variable réelle 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 chaîne 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 mathématique distingue plusieurs types de nombres directement  manipulables par les langages informatiques, Pascal n'en reconnaît que deux: les  types entier et réel.  
    Le type entier.  
    En LDA, nous placerons dans la déclaration des variables une ligne telle que:  
    entier age, note_de_français  
    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 mémoire.  
     
        Type Valeurs autorisées Occupation en mémoire  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 réel.  
    En LDA, nous placerons dans la déclaration des variables une ligne telle que:  
    réel taux_de_TVA,  note_moyenne  
    Mais Pascal a subdivisé les réels en 4 types pour mieux adapter le type aux  valeurs que peuvent prendre une variable, et ce pour optimiser l'occupation de  la mémoire.  
     
        Type Valeurs autorisées Nombre de chiffres significatifs Occupation en mémoire  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 entière du nombre.  
    Assignation.  
    Dans une assignation, le type de l'expression doit correspondre au type de  variable de destination. Cette règle admet une seule exception: une variable  réelle peut recevoir une valeur entière.  
    Evaluation des expressions arithmétiques.  
    Pascal respecte la même convention de priorité que l'arithmétique: les  multiplications et les divisions (opérateurs * / DIV et  MOD) sont effectuées en premier lieu, puis les additions et les  soustractions (opérateurs + et -); lorsqu'une expression contient  plusieurs opérateurs de même priorité, les opérations sont effectuées de gauche  à droite. Pour modifier cet ordre, il suffit d'introduire des parenthèses.  
    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 opérandes et du résultat.  
    Les opérateurs +, - et * peuvent agir sur des opérandes réels ou entiers et  le résultat est réel sauf si les deux opérandes sont entiers. L'opérateur / peut  agir sur des entiers et des réels mais le résultat est toujours réel. Les  opérateurs DIV et MOD ne peuvent être utilisés qu'avec  des opérandes entiers et fournissent un résultat entier.  
    Constantes numériques.  
    Le type d'une variable est défini dans la partie déclarative du programme.  C'est la forme d'écriture qui détermine le type d'une constante. Ainsi 50 est  une constante entière, tandis que 3.1416 et 50.0 sont des constantes réelles car  elles contiennent une partie fractionnaire.  
    Les constantes entières ne peuvent contenir que des chiffres décimaux (0 à 9)  précédés éventuellement d'un signe + ou -.  
    Les constantes réelles doivent contenir en plus:  
    soit par une partie fractionnaire d'au moins un chiffre, séparée de la partie  entière par un point:
     +1.2     -56       0.01       0.0
    soit une partie exposant sous forme d'une constante entière précédée par  un E indiquant la puissance de 10 par laquelle il faut multiplier la  valeur qui précède 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  entière, on parle de notation scientifique.  Fonctions mathématiques.  
     
        Notation mathématique Fonction Pascal Type de x Type du résultat Signification  |x| ABS(x) Entier ou réel Type de x Valeur absolue de x  x2 SQR(x) Entier ou réel Type de x Carré de x  x1/2 SQRT(x) Entier ou réel Réel Racine carré de x  sin x SIN(x) Entier ou réel Réel sin de x (x en radians)  cos x COS(x) Entier ou réel Réel cos de x (x en radians)  arctg x ARCTAN(x) Entier ou réel Réel Angle (en radians) dont la tangente vaut  x  ex EXP(x) Réel Réel Exponentielle de x  ln x LN(x) Réel Réel Logarithme népérien de x  
    • [/B] TRUNC(x) Réel Entier Partie entière de x  
      • [/B] INT(x) Réel Réel Partie entière de x  arrondi de x ROUND(x) Réel Entier Entier le plus proche de x  décimal de x FRAC(x) Réel Réel Partie décimale de x  On notera l'absence des fonctions tg x et xy qui se traduiront, en  employant les formules de mathématique adéquates, respectivement par  SIN(x)/COS(x) et EXP(y*LN(x)).  
        Manipulation de chaînes de caractères.  
        Nous avons déjà vu précédemment un exemple de ce type de problème et il est  évidemment nécessaire dans la vie professionnelle de manipuler des données  autres que numériques (noms de clients, d'articles vendus, ...). Celles-ci sont  alors dites du type alphabétique. Lorsqu'elles contiennent en plus des  chiffres, des symboles tels que (+, =, §, &, ...), nous parlerons de données  alphanumériques.  
        Si la manière de coder en binaire des nombres entiers ou réels se fait d'une  manière assez naturelle par un changement de base de numération, par contre la  manière de stocker des caractères en binaire est totalement arbitraire. Ainsi,  l'ANSI (American National Standard Institute) a défini un codage des  caractères 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 alphabétique. Comme deux octets permettent de stocker 256 valeurs  différtentes, nous disposerons de 256 caractères différents.  
        Il existe deux types de variables alphanumériques: les  caractère et chaîne.  
        Le type caractère.  
        Le type caractère est réservé aux variables contenant un seul  caractère (lettre, symbole, ponctuation, ...) et il est possible d'en déterminer  les successeur/prédécesseur/position dans la liste des codes ASCII. Ainsi le  successeur de "B" est "C", son prédécesseur "A" et son code ASCII 66.  
        En LDA, nous placerons dans la déclaration des variables une ligne telle que:  
        caractère lettre, initiale  
        qui se traduira en Pascal par:  
        VAR lettre, initiale:  CHAR;  
        Le type chaîne.  
        Les variables du type chaîne peuvent contenir  
        soit une suite de caractères (un mot, une phrase, ...),  
        soit un caractère (mais dont, par exemple, il est impossible de déterminer le  suivant),  
        soit aucun caractère (on parle alors de chaîne vide).  
        En LDA, nous placerons dans la déclaration des variables une ligne telle que:  
        chaîne nom, adresse  
        qui se traduira en Pascal par:  
        VAR nom, adresse:  STRING;  
        Cependant, Pascal permet aussi de préciser la taille maximale (25 dans  l'exemple ci-dessous) que pourra avoir la chaîne qui sera affectée à la  variable:  
        VAR nom, adresse:  STRING[25];  
        En l'absence de précision de longueur, Pascal réserve automatiquement la  taille maximale, à savoir 255 caractères.  
        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  illégales:
        initiale <-- "Einstein"

        initiale <-- ""

        avec la variable initiale déclarée du type caractère.  Par contre, si cette variable a été déclarée du type chaîne, celles-ci sont tout à fait légales.  
        Les fonctions alphanumériques.


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: كانون الثاني 22, 2009, 04:36:33 مسائاً
L'ALTERNATIVE.

   
3. STRUCTURES DE CHOIX.

 3.1. Introduction  
Les algorithmes décrits dans le chapitre précédent étaient très simples et  une calculatrice aurait suffi pour leur exécution. En effet, pour l'instant,  nous sommes seulement en mesure de décrire une suite d'opérations, chacune  devant être exécutée une et une seule fois. Nous ne pouvons par exemple utiliser  notre algorithme de calcul d'intérêt avec différents taux d'intérêt. Pour faire  cela, il nous faut introduire de nouvelles structures.  
Il a été démontré que pour représenter n'importe quel algorithme, il  faut disposer des trois possibilités suivantes:  
 


    • la structure de séquence qui indique que les opérations doivent être  exécutées les unes après les autres
    • la structure de choix qui indique quel ensemble d'instructions doit  être exécuté suivant les circonstances
    • la structure de répétition qui indique qu'un ensemble d'instructions  doit être exécuté plusieurs fois.[/SIZE]
    Jusqu'à présent, nous avons décrit la structure de séquence.  Nous décrirons dans ce chapitre les structures de choix: l'alternative et le  choix multiple.  3.2. La structure alternative.  
    Voici les règles d'un jeu très simple: deux joueurs A et B se cachent la main  droite derrière le dos. Chacun choisit de tendre un certain nombre de doigts (de  0 à 5), toujours derrière le dos. Les deux joueurs se montrent la main droite en  même temps. Si la somme des nombres de doigts montrés est paire, le premier  joueur a gagné, sinon c'est le second. Le problème est de faire prendre la  décision par l'ordinateur.  
    Exprimé en français, l'algorithme se présente 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  déterminer 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 présente en général sous la forme si expression alors première séquence d'instructions
    sinon deuxième séquence d'instructions
    fsi

    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 première séquence d'instruction sera exécutée et la  seconde sera ignorée; si l'expression est fausse, seule la seconde séquence  d'instructions sera effectuée.  
    Le mot sinon indique où se  termine la première séquence d'instructions et où commence la seconde. Le mot  fsi (abrégé de "fin de si")  indique où se termine la seconde séquence d'instructions.  
    (2) Dans certains cas, lorsque l'expression est fausse, aucune instruction ne  doit être exécutée. La condition s'exprime alors plus simplement sous la forme:  si  expression alors séquence d'instructions
    fsi

    (3) Quelle que soit la séquence choisie et exécutée, les instructions qui  suivent fsi seront exécutées.  
    (4) Chacune des séquences d'instructions d'un si ... fsi peut contenir des si...fsi. On dit alors  que les structures sont imbriquées.  
    (5) Pour faire apparaître plus clairement la structure, on écrit les  séquences d'instructions légèrement en retrait des mots-clefs (si, alors, sinon, fsi). On dit qu'on indente le texte de  l'algorithme.  
    Considérons l'exemple suivant écrit sans indentation et où les fins de si  (fsi) ne sont pas indiquées:  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 négatif, aucun traitement n'est effectué et dans (2.2)  si a est négatif, c vaut a-b.  
    3.3.Expressions logiques et variables booléennes.  
    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 réalisée (et n'aura donc la  valeur "vrai") que si la variable  reste a été assignée à 0. Dans les autres cas, cette condition prendra la  valeur "faux".  
    On peut combiner des affirmations à l'aide d'opérateurs logiques ,à  savoir: ou, et et non, les deux premiers portent sur deux opérandes et  le dernier sur un seul. Il est évident que ces opérandes ne peuvent prendre que  deux valeurs: vrai ou faux.  
    Par définition:  
    op1ou op2 n'a  la valeur faux que si les deux  opérandes ont la valeur faux, sinon  l'expression a la valeur vrai.  
    op1et op2 n'a  la valeur vrai que si les deux  opérandes ont la valeur vrai, sinon  l'expression a la valeur faux.  
    non opérande a la  valeur vrai si l'opérande a la valeur  faux et inversement.  
    Supposons par exemple qu'on exécute 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'inégalité ci-dessus font comparer des nombres ou  des variables à valeur numérique.  
    On peut également comparer des lettres: l'affirmation "b" précède "x"  dans l'ordre alphabétique a pour valeur vrai. De même, si la variable car contient le  caractère "v", l'affirmation car suit "w" dans l'ordre  alphabétique a pour valeur faux.  
    Comme nous l'avons déjà vu, pour ramener des nombres à la seule  représentation 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 manière naturelle pour représenter un caractère sous forme  binaire. On associe donc arbitrairement un code à chaque caractère connu par  l'ordinateur, à savoir les signes du clavier (lettres, chiffres décimaux, signes  de ponctuation et caractères spéciaux) et les caractères de contrôle. Le code  importe peu mais l'ordre de classement (collating sequence) qu'il définit  est par contre très important. Le code ASCII, le plus fréquemment utilisé  sur les micro-ordinateurs, respecte l'ordre croissant des caractères "0", "1",  ..., "9" et l'ordre alphabétique des 26 lettres de l'alphabet, et ceci sans  mêler aucun autre caractère dans ces séquences. Afin de simplifier les  notations, on convient d'utiliser les symboles "<" pour signifier  "précède dans la collating sequence", "" pour "suit dans la collating  sequence ou est égal",...  
    Variables booléennes.  
    Il est possible de stocker la valeur d'une expression logique dans une  variable (comme le résultat d'une opération arithmétique est stocké dans une  variable numérique). Cette variable ne peut prendre que les valeurs vrai et faux. Ces variables sont appelées variables logiques ou  booléennes.  
    En LDA, elles se déclarent comme ceci:  
    booléen: OK, pair  
    et en Pascal par:  
    VAR BOOLEAN: OK, pair;
    El l'assignation d'une variable booléenne se fait de la manière 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 décrit en 2 se traduit par:  
    PROGRAM Jeu;
    VAR NA, NB, Reste:INTEGER;
    BEGIN
    WRITE('Introduisez le nombre de doigts montrés par le joueur A');
    READLN(NA);
    WRITE('Introduisez le nombre de doigts montrés 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 séquences d'instructions à exécuter dans le cas  où la condition est vraie (cette séquence suit le mot alors) et dans le cas où la condition est fausse  (cette séquence suit le mot sinon) doivent être encadrées par le mots BEGIN et END qui en indiquent le début et la fin. Dans le cas où ces  séquences se réduisent à 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 après avoir indiqué  le nom du vainqueur, nous serions obligés d'utiliser les BEGIN et END:  
    PROGRAM Jeu;
    VAR NA, NB, Reste:INTEGER;
    BEGIN
    WRITE('Introduisez le nombre de doigts montrés par le joueur A');
    READLN(NA);
    WRITE('Introduisez le nombre de doigts montrés 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 séquence d'instructions  
    sinon séquence  d'instructions
    fsi
     

    se traduit en Pascal par:  
    IF expression THEN BEGIN
                       séquence d'instructions
                       END
    ELSE BEGIN
         séquence d'instructions
         END;
    Il est interdit de mettre un ; après le END indiquant la fin de la séquence d'instructions  qui suit le THEN.  
     
    Et la forme: si expression alors séquence d'instructions
    fsi

    se traduit en Pascal par:  
    IF expression THEN BEGIN
                       séquence 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 apparaître que le sinon de la première  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 défaut:  lorsque le premier joueur tape au clavier son nombre stocké dans NA, celui-ci  reste affiché et le deuxième joueur peut choisir NB de façon à être certain de  gagner.  Il existe deux remèdes à ce problème. La première consiste à effacer l'écran  après que A ait tapé son nombre. Ceci se fait en Pascal par l'instruction CLRSCR qui nécessite le chargement  d'une librairie. Celui-ci est activé par la ligne: USES Crt; écrite juste en-dessous de PROGRAM Jeu;  
    La deuxième solution est de saisir le caractère (le chiffre dans ce cas) tapé  au clavier sans l'afficher. Cela se fait grâce à la fonction READKEY qui scrute en permanence le clavier et qui  capte la touche qui vient d'être enfoncée. Cependant cette fonction ne peut être  employée que pour l'affectation à une variable de type caractère.  
    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 montrés par le joueur A');
    A:=READKEY;
    VAL(A, NA, Err);
    IF Err<>0 THEN WRITELN('Erreur de format numérique!')
    ELSE BEGIN
         WRITE('Introduisez le nombre de doigts montrés par le joueur B);
         B:=READKEY;
         VAL(B, NB, Err);
         IF Err<>0 THEN WRITELN('Erreur de format numérique!')
         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 procédure VAL(Chaine, Nombre, Erreur)  permet de convertir Chaine en  sa valeur numérique.qui sera stockée dans Nombre. La variable Erreur contiendra la valeur 0 si la conversion  s'est faite sans problème ou la position du premier caractère inadéquat. Erreur doit être du type INTEGER, Chaine du type STRING ou CHAR et Nombre d'un type numérique (entier ou réel).  3.6. Le choix multiple.  
    Supposons que l'on veuille demander à l'utilisateur de choisir dans un menu  une des 3 possibilités offertes. Le choix présenté ne se limite pas à une  alternative (soit - soit).  
    Nous nous trouvons en présence 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'abréviation de "ou que".  

    La structure de choix multiple peut, comme l'alternative, prendre deux  formes: selon que
        première expression logique faire première séquence d'instructions
      oq deuxième expression logique faire deuxième séquence d'instructions
       ...
      oq n ème expression logique faire n ème séquence d'instructions
    autrement (n+1) ème séquence d'instructions
    fselon
    et selon que
        première expression logique faire première séquence d'instructions
      oq ...
      oq n ème expression logique faire  n ème séquence d'instructions
    fselon
    La première forme généralise le si ... alors ... sinon ...  fsi, la seconde le si ... alors ... fsi.  

    Si la i ème expression logique a la valeur vrai, la i ème séquence d'instructions est exécutée puis il  y a passage aux instructions qui suivent le mot fselon. Si toutes les expressions logiques ont la  valeur faux, on exécute dans le premier  cas la séquence d'instructions qui suit le mot autrement , dans le deuxième cas on passe  directement à ce qui suit fselon.  
    Afin d'éviter toute ambiguïté, on exige que les différentes expressions  logiques soient mutuellement exclusives.  
    3.7. Le choix multiple en Pascal.  
    La traduction de selon que  ...fselon en Pascal n'est pas très commode parce que la  structure du choix multiple y est très restrictive: Il est seulement possible de  traduire un selon que ...  fselon pour lequel l'expression prend les valeurs prises  par une variable de type énuméré (dont les valeurs appartiennent à un ensemble;  par exemple entier, caractère).  
    La forme générale du choix multiple est:
    CASE <expression> OF
      valeur1: première séquence d'instructions;
      valeur2: deuxième séquence d'instructions;
       ...
      valeurN: Nème séquence d'instructions;
    ELSE (N+1) ème séquence d'instructions;
    END;
    Il est à noter que les différentes séquences d'instructions  sont délimitées par BEGIN et  END qui peuvent seulement être  omis si une séquence se résume à une seule instruction.  Pour traduire en Pascal un selon  que plus général, il faut utiliser des IF imbriqués. Par  exemple, ...
    lire x
    selon que
    x<0 faire écrire x,"est négatif"
    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 négatif.')
    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. Déterminer si l'équation ax+by+c=0 représente  l'équation d'une droite parallèle à 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 différent de 0. Déterminer 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 Ampère et t en seconde.  Déterminer un algorithme qui proposerait de calculer la différence de potentiel,  la puissance et l'énergie.


    مامي

    • Hero Member
    • *****
      • مشاركة: 1140
      • مشاهدة الملف الشخصي
      • البريد الالكتروني
    رد #3 في: كانون الثاني 23, 2009, 07:18:29 مسائاً


    achraf.mouni

    • Hero Member
    • *****
      • مشاركة: 2439
      • مشاهدة الملف الشخصي
      • البريد الالكتروني
    رد #4 في: كانون الثاني 23, 2009, 07:53:40 مسائاً
    شكرا لمرورك


    شذى الروح

    • Hero Member
    • *****
      • مشاركة: 3501
      • مشاهدة الملف الشخصي
      • البريد الالكتروني
    رد #5 في: كانون الثاني 23, 2009, 07:57:58 مسائاً
    رائع جدا اخي اشرف بارك الله فيك
    تقبل مروري الجد متواضع


    achraf.mouni

    • Hero Member
    • *****
      • مشاركة: 2439
      • مشاهدة الملف الشخصي
      • البريد الالكتروني
    رد #6 في: كانون الثاني 23, 2009, 08:02:33 مسائاً
    مرورك اسعدني شذى .................شكرا الف شكر لمرورك


    blaklist1

    • Newbie
    • *
      • مشاركة: 34
      • مشاهدة الملف الشخصي
      • البريد الالكتروني
    رد #7 في: كانون الثاني 28, 2009, 01:50:06 مسائاً
    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  


    achraf.mouni

    • Hero Member
    • *****
      • مشاركة: 2439
      • مشاهدة الملف الشخصي
      • البريد الالكتروني
    رد #8 في: كانون الثاني 28, 2009, 02:00:18 مسائاً
    شكرا لمرورك


    lucky girl

    • Hero Member
    • *****
      • مشاركة: 1151
      • مشاهدة الملف الشخصي
      • البريد الالكتروني
    رد #9 في: كانون الثاني 28, 2009, 04:31:23 مسائاً
    merciiiiiiiiiiii bcp mon frere c un tres bon travail


    achraf.mouni

    • Hero Member
    • *****
      • مشاركة: 2439
      • مشاهدة الملف الشخصي
      • البريد الالكتروني
    رد #10 في: كانون الثاني 28, 2009, 07:07:58 مسائاً
    شكرا لمرورك الطيب