Travail Dirigé 2

1. Faire une petite calculatrice, qui peut calculer les 4 opérateurs arithmétiques:

 

Program Calculatrice;

Var

  a,b,r : Real;

  op : char;

Begin

  Write('Entrez 2 nombres et un operateur entre eux: ');

  Readln(a,op,op,b);

  If op = '+' Then

    r := a+b

  Else If op = '-' Then

    r := a-b

  Else If op = '*' Then

    r := a*b

  Else If op = '/' Then

    If b <>0 Then

     r := a/b

    Else r := 1E38

  Else r  := -1E38;

Writeln(a:8:3,op,b:8:3,'=',r:8:3);

End.

Exercices:Dessinez l’arbre programmatique du programme suivant:

Program Ex1;

  var a,b,c,d,min,t : real;

  Begin

   Write(‘Enterz 4 nombres reels:’); Readln(a,b,c,d);

   min := a;

   if min > b Then min := b

 Else if min > c Then Min := c;

 t:= min; min :=d; d:= t;

 Writeln(‘Les valeur finales sont: ‘,a:8:3,b:8:3,c:8:3,d:8:3);

End.

2. Calculer la somme des nombres entiers, qui sont lus jusqu'au un nombre  égale à -100 est lu.

 

Program somme1;

Var

   n,s : Integer;

Begin

  Writeln('Entrez des nombres entiers:');

  Readln(n);

  s:=0;

  While n<>-100 Do

  Begin

    s := s+n;

    Readln(n);

  End;

 Writeln('La somme est: ',s);

End.

Exercices : 1. Modifier le programme pour lire jusqu'au fin de fichier. 2. Modifiez le programme pour calculer la somme des nombres positifs lus. 3. Modifier pour calculer la moyenne des nombres positifs.

3. Calculer cos x par calculer de la suite infinie

 avec exactitude e

(On doit terminer quand le membre calculé devient inférieur ou égale à e)

Exercice: Traduisez l'arbre en Pascal.

 

4. Calculer la somme des nombres entiers dans l'intervalle [M,N]:

Traduction de la boucle "pour"

For i := M To N Do s := s+i;

Exercices:

1. Ecrivez le programme en Pascal.

2. Changez la boucle "pour" avec le répétitive "tant que".

 

5. Calculez le  pgcd des  deux entiers.

Il  y a quelque  variants.  Seulement le variant  avec le répétitive "jusqu'au" est traduit. Les autres sont laissés aux étudiants pour exercice.

 

Program pgcd;

var

   a,b,t,da,db: Integer;

Begin

   Write('Entrez 2 nombres entiers':);

   Readln(a,b);

   da:=a; db:=b;

   Repeat

     t := da mod db;

     da := db;

     db := t;

   Until t=0;

   Writeln('Le pgcd de ',a,' et ',b,' est ', da);

End.

Variant 2 :

Variant 3:

6.Calculer le maximum d'une liste non vide dentiers jusqu’à . la fin du fichier soit lu. (on a tapé Ctrl-Z)

Program Max;
 Var dlu, Max : Integer;
Begin
 Write('Nombre (0 pour terminer)?
');
 ReadLn(dlu);
 Max := dlu;
 While not eof Do Begin
   If dlu > Max Then Max := dlu;
   Write('Nombre (0 pour terminer)?
');
   ReadLn(dlu); End;
 WriteLn('Le maximum est: ', Max);
End.

Exercice_1: Faire un programme qui calcule la maximum et le nombre d'occurrences de ce maximum dans une liste non vide terminée par 0.

Exercice_2: Faire un programme qui calcule la différence entre le maximum et le minimum pour une liste non vide.

7. Deux programmes illustrant l’approximation des nombres réels.


a) L’équation quadratique avec deux très différentes racines


 

 

 

program eq_carre;

const

   TROP_GRANDE = 1000000000.0;

 var a,b,c,x1,x2,d : real;

begin

   a:=1; b:= -TROP_GRANDE; c:=1;

   d := sqrt(b*b-4*a*c);

   x1:= (-b+d)/2/a;

   x2:= (-b-d)/2/a;

   writeln('Les racines calculees par la formule ordinaire: x1=',x1:6:2,

          ' x2=',x2:12:10);

   x2 := c/x1;

   writeln('Les racines calculees par la formule de Viete: x1=',x1:6:2,

          ' x2=',x2:12:10);

end.

b) Additionner sens cesse. Quand l’erreur va devenir 25% du pas ?

program While_err;

  const

     debut=100;

     pas = 0.01;

 var

   compte, tous_les : integer;

   nombre:real;

begin

  nombre := debut;

  compte := 0;

  write('afficher les resultats intermediaires ',

            'tous les ? (333 par exemple) ?');

  readln(tous_les);

  while (abs(nombre-(debut+(compte*pas)))<pas/4) do

  begin

     nombre:= nombre + pas;

     compte := compte+1;

       if compte mod tous_les = 0 then

             writeln('valeur obtenue ',

                 nombre:12:6,

                 ',au lieu de ',debut+(compte*pas):8:4,

                 ' en ',compte,' calculs');

 

  end;

   writeln('erreur de 25% en ',compte,' calculs');

end.