ESA NAMUR
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le deal à ne pas rater :
Bon plan achat en duo : 2ème robot cuiseur Moulinex Companion ...
600 €
Voir le deal

Solution aux exercices de prog.

3 participants

Aller en bas

Solution aux exercices de prog. Empty Solution aux exercices de prog.

Message  Nico Jeu 1 Nov - 15:44

Bon, j'ai fait un autre post pour eviter que ceux qui en font encore soient tentés de regarder ^^
J'ai essayé de commenter mon code autant que possible...

Je vous conseille vivement de le copier coller dans Turbo Delphi plutot que de le regarder sur le forum, car les mots clés sont pas en couleurs, et les lignes trop longues font de vilain retour a la ligne... Pas si vous copiez-collez le tout dans Turbo Delphi


Exercices :

Exercice 1 :
Une addition.
Demandez à l'utilisateur d'entrer deux nombres, les additionner, et sortir le résultat.
Programme Exercice1.exe

Code:
var
  Nbr1, Nbr2 : integer;
begin
  write('Entrez le premier nombre : ');
  readln(Nbr1);
  write('Entrez le deuxieme nombre : ');
  readln(Nbr2);
  writeln('La somme est ',Nbr1+Nbr2);  //pas besoin d'une variable pour la somme
  readln;
end.



Exercice 2 :
Une multiplication, en utilisant les boucles et les additions.
Demandez à l'utilisateur d'entrer deux nombres positifs, les multiplier en n'utilisant que l'opération d'addition, sortir le résultat.
Programme Exercice2.exe

Code:
var
  Nbr,Prod,Cpt:longword;  // vu que positif, je peux utiliser des variables non-signées
                          // Cpt pour "compteur", Prod pour "produit"
begin
  write('Entrez votre nombre : ');
  readln(Nbr);
  write('Par combien voulez-vous le mutliplier ? : ');
  readln(Cpt);
  Prod:=0;
  for Cpt:=Cpt downto 1 do Prod:=Prod+Nbr;  // j'ajoute a 'Prod' mon nombre initial autant de fois que necessaire
  writeln('Le produit est : ',Prod);
  readln;
end.



Exercice 3 :
Tables de multiplication.
Afficher les tables de multiplications, jusqu'a 10, en gardant une certaine mise en page :
1 x 1 = 1
1 x 2 = 2
...
1 x 9 = 9
1 x 10 = 10
-----------
2 x 1 = 2
2 x 2 = 4
... etc
Remarque, l'opérateur pour les multiplication est *
Programme Exercice3.exe

Code:
var
  Nbr1,Nbr2:byte;
begin
  for Nbr1:=1 to 10 do  // boucle qui permet de passer d'une table a l'autre
    begin
      for Nbr2:=1 to 10 do  //boucle qui génère chaque ligne d'une table
        writeln(Nbr1,' X ',Nbr2,' = ',Nbr1*Nbr2);
      writeln;
    end;
  readln;
end.



Exercice 4 :
Un systeme de controle basé sur l'age.
Demandez à l'utilisateur son nom. Demandez lui son âge.
sortir une phrase du type "Bonjour <NOM>, vous pouvez accéder a ce site" si la personne est majeure
Si elle est mineure, sortir "Bonjour <NOM>, vous ne pouvez pas accéder à ce site, revenez dans X an(s)!!!"
Programme Exercice4.exe

Code:
var
  Age:byte;
  Nom:shortstring;
begin
  write('Veuillez entrer votre nom : ');
  readln(Nom);
  write('Quel est votre age ? : ');
  readln(Age);
  if Age>=18 then writeln ('Bonjour ',Nom,', vous pouvez acceder a ce site')
  else writeln('Bonjour ',Nom,', vous ne pouvez pas acceder a ce site, revenez dans ',18-Age,' an(s)!!!');
  readln;
end.



Exercice 5 :
Pyramide.
Affichez une petite pyramide de 10 lignes, à l'aide de boucles, un peu comme celle ci :
Code:
    *
    ***
  *****
  *******
 *********
Programme Exercice5.exe

Code:
var
  Nesp,Neto,Nlig:byte;  //Pour Nombre d'espaces, Nombres d'etoiles, Nombres de lignes
begin
  for Nlig:=1 to 10 do    //Cette boucle pour passer d'une ligne a l'autre, et savoir a quel ligne nous sommes
    begin                          // plus on va avancer dans les lignes, moins yaura d'espaces avant les etoiles
      for Nesp:=Nlig to 10 do write(' ');    // Cette boucle definit le nombres d'espaces en fonction de la ligne actuelle
      for Neto:=Nlig*2-1 downto 1 do write('*');      //Cette boucle définit le nombre d'étoiles en fonction de la ligne.. 1,3,5 etc
      writeln;                                        //Un retour a la ligne avant de retourner au début du programme
    end;
  readln;
end.



Exercice 6 :
Division entière.
Demandez a l'utilisateur d'entrer deux nombres positifs. Le programme effectue une division entière, et affiche le quotient et le reste
Exemple : 17 divisé par 3 donne 5 et il reste 2 ( 17=(3x5)+2 )
Programme Exercice6.exe

Code:
var
  Nbr,Divi,Cpt:integer;  //Divi pour diviseur, et Cpt pour compteur
begin
  write('Entrez le nombre a diviser : ');
  readln(Nbr);
  write('Entrez le diviseur : ');
  readln(Divi);
  Cpt:=0;
  while Divi<=Nbr do  // cette boucle sert a compter le nombre de fois que le diviseur peut etre retiré du nombre
    begin
      Cpt:=Cpt+1;
      Nbr:=Nbr-Divi;
    end;
  write('Le resultat est ',Cpt,' et le reste est ',Nbr);
  readln;
end.



Exercice 7 :
Suite de Fibonacci.
Affichez la suite de Fibonacci, ou chaque nombre est la somme des deux précédents :
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Afficher une suite de 25 nombres
Programme Exercice7.exe

Code:
var
  Nbr1,Nbr2,Interm:longword; //entiers positifs ... Interm=Intermédiaire
  Cpt:byte;  //apres tout, pas besoin d'une grosse variable pour aller jusqu'a 25 !
begin
  Nbr1:=0;
  Nbr2:=1;
  write(Nbr1);  // variables initialisées, et ecriture du premier nombre
  for Cpt := 2 to 25 do
    begin
      Interm:=Nbr2;      //je met de coté la valeur de Nbr2
      Nbr2:=Nbr2+Nbr1;  //Nbr2 deviens la somme de Nbr2+Nbr1
      Nbr1:=Interm;      //Nbr1 deviens l'ancienne valeur de Nbr2
      write(', ',Nbr1);
    end;
    readln;
end.



Exercice 8 :
Minimum et maximum
Demandez a l'utilisateur d'entrer 10 nombres. Lui sortir le plus petit, et le plus grand.
Programme Exercice8.exe

Code:
var
  Min,Max,Nbr:integer;   
  Cpt:byte;
begin
  write('Entrez un nombre : ');
  readln(Nbr);
  Min:=Nbr;                //j'initialise les variables avec le premier nombre que j'entre
  Max:=Nbr;
  for Cpt:=2 to 10 do
    begin
      write('Entrez un nombre : ');
      readln(Nbr);
      if Nbr>Max then Max:=Nbr;  //si le nombre est plus grand que le maximum actuel, je remplace le maximum
      if Nbr<Min then Min:=Nbr;  //si le nombre est plus petit que le minimum actuel, je remplace le minimum
    end;
  writeln('Le nombre le plus petit est ',Min);
  writeln('Le nombre le plus grand est ',Max);
  readln;
end.

Nico

Messages : 43
Date d'inscription : 23/10/2007

Revenir en haut Aller en bas

Solution aux exercices de prog. Empty Re: Solution aux exercices de prog.

Message  Nico Jeu 1 Nov - 16:00

"Perfectionnement"
Les mêmes exercices, avec quelques complications

Exercice 2b :
Meme exercice, mais l'utilisateur peut entrer des nombres négatifs.
Programme Exercice2B.exe

Deux solutions, une ou on vérifie le signe final, on transforme tout en positif et puis on applique le signe final:
Code:
var
  Nbr,Prod,Cpt:integer;
  Neg:boolean;
begin
  write('Entrez votre nombre : ');
  readln(Nbr);
  write('Par combien voulez-vous le mutliplier ? : ');
  readln(Cpt);
  Prod:=0;
  if (Cpt<0) XOR (Nbr<0) then Neg:=True else Neg:=False; // XOR = ou exclusif, l'un ou l'autre, mais pas les deux.  Si le resultat sera négatif, je met le boolean Neg à 'TRUE'
  if (Cpt<0) then Cpt:=-Cpt;                            //Je transforme tout mes nombres negatifs en positif, afin de ne rien changer a la mecanique de la boucle
  if (Nbr<0) then Nbr:=-Nbr;
  for Cpt:=Cpt downto 1 do Prod:=Prod+Nbr;
  if Neg then Prod:=-Prod;                              //Si le resultat est négatif, j'applique le signe
  writeln('Le produit est : ',Prod);
  readln;
end.

Une autre ou on change le mécanisme de la boucle en fonction du signe du multiplicateur :
Code:
var
  Nbr,Prod,Cpt:integer;
begin
  write('Entrez votre nombre : ');
  readln(Nbr);
  write('Par combien voulez-vous le mutliplier ? : ');
  readln(Cpt);
  Prod:=0;
  if (Cpt>=0) then
    for Cpt:=Cpt downto 1 do Prod:=Prod+Nbr
  else
    for Cpt:=Cpt to -1 do Prod:=Prod-Nbr;    // si le coef est négatif, je change le fonctionnement de la boucle for
  writeln('Le produit est : ',Prod);
  readln;
end.


Exercice 3b:
Meme chose, mais au lieu d'afficher les chiffres, on les affiche en lettres : "cinq multiplié par neuf vaux quarante-cinq"
Programme Exercice3B.exe

Bien plus long que je l'imaginais, c'etait le plus dur de tous ^^
Code:
var
  Nbr1,Nbr2,Nbr3:byte;
  Nbr1L,Nbr2L,ProdL:shortstring;  //L pour la version Lettres ^^
begin
  for Nbr1:=1 to 10 do
    begin
      case Nbr1 of                //apres avoir incrémenté Nbr1, je regarde combien il vaux
        1 : Nbr1L:='Un';          //et je met le mot correspondant dans Nbr1L
        2 : Nbr1L:='Deux';
        3 : Nbr1L:='Trois';
        4 : Nbr1L:='Quatre';
        5 : Nbr1L:='Cinq';
        6 : Nbr1L:='Six';
        7 : Nbr1L:='Sept';
        8 : Nbr1L:='Huit';
        9 : Nbr1L:='Neuf';
        10 : Nbr1L:='Dix';
        end;
      for Nbr2:=1 to 10 do
        begin
          case Nbr2 of          //meme chose pour Nbr2
            1 : Nbr2L:='un';
            2 : Nbr2L:='deux';
            3 : Nbr2L:='trois';
            4 : Nbr2L:='quatre';
            5 : Nbr2L:='cinq';
            6 : Nbr2L:='six';
            7 : Nbr2L:='sept';
            8 : Nbr2L:='huit';
            9 : Nbr2L:='neuf';
            10 : Nbr2L:='dix';
            end;
          Nbr3:=Nbr1*Nbr2;
          case Nbr3 of
            1..16 : ProdL:='petit';          //Je calcule le produit, et je regarde si il s'agit d'un cas particulier
            17..19 :  begin                  //Si c'est de 1 a 16, c'est un cas particulier, il ne s'agira pas d'un mot composé
                        ProdL:='dix';
                        Nbr3:=Nbr3-10;      //Une fois que j'ai définit de quel dizaine il s'agit, j'inscrit le premier mot
                      end;                  //Et je soustrait la dizaine correspondante, afin qu'il ne reste que les unités
            20..29 :  begin
                        ProdL:='vingt';
                        Nbr3:=Nbr3-20;
                      end;
            30..39 :  begin
                        ProdL:='trente';
                        Nbr3:=Nbr3-30;
                      end;
            40..49 :  begin
                        ProdL:='quarante';
                        Nbr3:=Nbr3-40;
                      end;
            50..59 :  begin
                        ProdL:='cinquante';
                        Nbr3:=Nbr3-50;
                      end;
            60..69 :  begin
                        ProdL:='soixante';
                        Nbr3:=Nbr3-60;
                      end;
            70..79 :  begin
                        ProdL:='septante';
                        Nbr3:=Nbr3-70;
                      end;
            80,82..89 :  begin
                        ProdL:='quatre-vingt';
                        Nbr3:=Nbr3-80;
                      end;
            81 :      begin                      //Si c'est 81, c'est un cas particulier, car on dit quatre-vingt-un et non pas
                        ProdL:='quatre-vingt-un'; //quatre-vingt et un, comme pour les autres dizaines ...
                        Nbr3:=Nbr3-81;            //j'enleve 81, afin qu'il ne reste rien dans nombre 3, et qu'il n'ajoute rien au mot
                      end;
            90..99 :  begin
                        ProdL:='nonante';
                        Nbr3:=Nbr3-90;
                      end;
            100 :    begin
                        ProdL:='cent';
                        Nbr3:=Nbr3-100;
                      end;
            end;
            if ProdL='petit' then                  // les cas particuliers, je remplace 'petit' par la valeur correspondante
              case Nbr3 of
                1 : ProdL:='un';
                2 : ProdL:='deux';
                3 : ProdL:='trois';
                4 : ProdL:='quatre';
                5 : ProdL:='cinq';
                6 : ProdL:='six';
                7 : ProdL:='sept';
                8 : ProdL:='huit';
                9 : ProdL:='neuf';
                10 : ProdL:='dix';
                11 : ProdL:='onze';
                12 : ProdL:='douze';
                13 : ProdL:='treize';
                14 : ProdL:='quatoze';
                15 : ProdL:='quinze';
                16 : ProdL:='seize';
                end
            else                                  //Si ce n'est pas un cas particulier, j'analyse les unités restantes, et
              case Nbr3 of                        //j'ajoute la derniere partie du mot composé (concaténation de strings)
                0 : ;
                1 : ProdL:=ProdL+' et un';
                2 : ProdL:=ProdL+'-deux';
                3 : ProdL:=ProdL+'-trois';
                4 : ProdL:=ProdL+'-quatre';
                5 : ProdL:=ProdL+'-cinq';
                6 : ProdL:=ProdL+'-six';
                7 : ProdL:=ProdL+'-sept';
                8 : ProdL:=ProdL+'-huit';
                9 : ProdL:=ProdL+'-neuf';
          end;
          writeln(Nbr1L,' multiplie par ',Nbr2L,' vaux ',ProdL);
        end;
      writeln;
    end;
  readln;
end.


Exercice 4b :
Meme chose, mais cette fois ci, on affiche correctement le mot "an", c'est a dire au pluriel ou au singulier.
Programme Exercice4B.exe

Code:
var
  Age:byte;
  Nom:shortstring;
begin
  write('Veuillez entrer votre nom : ');
  readln(Nom);
  write('Quel est votre age ? : ');
  readln(Age);
  if Age>=18 then writeln ('Bonjour ',Nom,', vous pouvez acceder a ce site')
  else if Age=17 then writeln('Bonjour ',Nom,', vous ne pouvez pas acceder a ce site, revenez dans un an!!!')
    else writeln('Bonjour ',Nom,', vous ne pouvez pas acceder a ce site, revenez dans ',18-Age,' ans!!!');
  readln;
end.


Exercice 5b:
Demandez a l'utilisateur la hauteur souhaitée.
Programme Exercice5B.exe

Code:
var
  Nesp,Neto,Nlig,NligMax:byte;
begin
  write('Combien de lignes (40 max) ? : ');
  readln(NligMax);
  for Nlig:=1 to NligMax do
    begin
      for Nesp:=Nlig to NligMax do write(' ');
      for Neto:=Nlig*2-1 downto 1 do write('*');
      writeln;
    end;
  readln;
end.


Exercice 7b :
Meme chose, mais cette fois, on demande a l'utilisateur combien de nombres il souhaite afficher.
Programme Exercice7B.exe

Code:
var
  Nbr1,Nbr2,Interm:longword;
  Cpt,Ntotal:byte;
begin
  Nbr1:=0;
  Nbr2:=1;
  write('Combien de nombres voulez-vous afficher ? ');
  readln(Ntotal);
  if Ntotal=0 then              //si l'utilisateur veux rien afficher, et bien on affichera rien!
  else
    if Ntotal=1 then write(Nbr1)  //si 1, on affiche juste le premier nombre, mais on peux pas rentrer dans la boucle, qui commence a partir de 2
    else
      begin
        write(Nbr1);
        for Cpt := 2 to Ntotal do
          begin
            Interm:=Nbr2;
            Nbr2:=Nbr2+Nbr1;
            Nbr1:=Interm;
            write(', ',Nbr1);
          end;
      end;
    readln;
end.


Exercice 8b :
Meme chose, mais cette fois ci, on demande a l'utilisateur combien de nombres il va entrer.
Programme Exercice8B.exe

Code:
var
  Min,Max,Nbr:integer;   
  Cpt,Ntotal:byte;
begin
  write('Combien de nombre voulez vous entrer ? ');
  readln(Ntotal);
  write('Entrez un nombre : ');
  readln(Nbr);
  Min:=Nbr;                //j'initialise les variables avec le premier nombre que j'entre
  Max:=Nbr;
  if Ntotal>=2 then
    begin
      for Cpt:=2 to Ntotal do
        begin
          write('Entrez un nombre : ');
          readln(Nbr);
          if Nbr>Max then Max:=Nbr;  //si le nombre est plus grand que le maximum actuel, je remplace le maximum
          if Nbr<Min then Min:=Nbr;  //si le nombre est plus petit que le minimum actuel, je remplace le minimum
        end;
    end;
  writeln('Le nombre le plus petit est ',Min);
  writeln('Le nombre le plus grand est ',Max);
  readln;
end.


Exercice 8c :
Meme chose que l'exercice 8, mais le programme ne s'arrete que si l'utilisateur tape 0.
Programme Exercice8C.exe

Code:
var
  Min,Max,Nbr:integer;   
  Cpt:byte;
begin
  write('Entrez un nombre : ');
  readln(Nbr);
  Min:=Nbr;                //j'initialise les variables avec le premier nombre que j'entre
  Max:=Nbr;
    while Nbr<>0 do
        begin
          write('Entrez un nombre : ');
          readln(Nbr);
          if Nbr>Max then Max:=Nbr;  //si le nombre est plus grand que le maximum actuel, je remplace le maximum
          if Nbr<Min then Min:=Nbr;  //si le nombre est plus petit que le minimum actuel, je remplace le minimum
        end;
  writeln('Le nombre le plus petit est ',Min);
  writeln('Le nombre le plus grand est ',Max);
  readln;
end.

Nico

Messages : 43
Date d'inscription : 23/10/2007

Revenir en haut Aller en bas

Solution aux exercices de prog. Empty Re: Solution aux exercices de prog.

Message  samuel Jeu 1 Nov - 19:03

Merci a toi pour les exercices , je vais continuer par contre un peu a t'ennuyer et trouver par moi meme avant de looker ^^

samuel
Admin

Messages : 62
Date d'inscription : 22/10/2007

https://esainfo.keuf.net

Revenir en haut Aller en bas

Solution aux exercices de prog. Empty Re: Solution aux exercices de prog.

Message  Nico Jeu 1 Nov - 19:15

Ya pas de soucis :p

Nico

Messages : 43
Date d'inscription : 23/10/2007

Revenir en haut Aller en bas

Solution aux exercices de prog. Empty Merci

Message  Bernard Jeu 1 Nov - 21:23

Merci pour les exercices Nico! J'en suis au 5 et je commence à me creuser un peu la tête... Ca fait du bien de pratiquer un petit peu! Je continuerai demain et j'espère que ça ira...

Par contre, j'ai une question d'ordre pratique (as JC): Comment ça fonctionne exactemment pour le mode 'pas à pas' dans Delphi? Si tu peux m'aider, merci.

à+

Dynamite
Bernard
Bernard

Messages : 115
Date d'inscription : 26/10/2007
Age : 51
Localisation : Gembloux

Revenir en haut Aller en bas

Solution aux exercices de prog. Empty Re: Solution aux exercices de prog.

Message  samuel Ven 2 Nov - 1:12

le mode pas a pas , quand tu l'active (F8) tu a la fenetre ''dos'' ki s'active et a chaque fois que tu clickera sur la touche (f7) tu verra la ligne de commande ' sous delphi' souligner en bleu ki est lue a chaque etape

( pour ma part je doit diminuer la fenetre de delphi pour pouvoir voir la fenetre dos et delphi en meme temp , car la touche f7 ne fonctionne que si tu a la fenetre delphi d'actif )

samuel
Admin

Messages : 62
Date d'inscription : 22/10/2007

https://esainfo.keuf.net

Revenir en haut Aller en bas

Solution aux exercices de prog. Empty ?

Message  Bernard Ven 2 Nov - 14:53

Merci de ta réponse mais je ne comprends toujours pas... suis un peu lourd Rolling Eyes

J'ai bien des trucs qui se passent dans différentes fenêtres... mais ça m'aide pas à piger ce que le compilateur fait....Peut-être que c'est pas les bonnes fenêtres! Par exemple, j'aimerais voir l'affectation des valeurs aux différentes variables, et ça...ben je le vois pas! cyclops

Merci à qui peut m'aider........
Bernard
Bernard

Messages : 115
Date d'inscription : 26/10/2007
Age : 51
Localisation : Gembloux

Revenir en haut Aller en bas

Solution aux exercices de prog. Empty Re: Solution aux exercices de prog.

Message  Nico Sam 3 Nov - 1:50

Pareil, je vois pas les valeurs ...
En fait il affiche brievement "processus inacessible"

JC y arrivait pas non plus

Nico

Messages : 43
Date d'inscription : 23/10/2007

Revenir en haut Aller en bas

Solution aux exercices de prog. Empty Re: Solution aux exercices de prog.

Message  samuel Lun 5 Nov - 0:24

avez vous penser a activer les option que le prof avait vaguement montrer ?

samuel
Admin

Messages : 62
Date d'inscription : 22/10/2007

https://esainfo.keuf.net

Revenir en haut Aller en bas

Solution aux exercices de prog. Empty Re: Solution aux exercices de prog.

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum