ÉVALUATION EN ALGORITHMIQUE TEST  22 / XX  

Examen Corriges en Algorithme, Examen Algorithme, Examen Pascal

Exercice 01 :

1. Définissez : algorithme, objet.

2. Donner la structure générale d’un programme PASCAL.

3. On vous propose d’écrire un algorithme calculant le périmètre d’un cercle de diamètre entier:
   a. Identifiez les données du problème.
   b. Identifiez le(s) résultat(s) escompté(s).
   c. Déclarez tous les objets.

4. Soient les expressions suivantes :
   ```
   i) A ou B
   ii) (A - 1 > 0) et (B < 0)
   iii) (A = "M" et B >= 21) ou (A = "F" et B >= 25)
   ```
   a. Quels sont les possibles types de A et B dans chacun des cas ci-dessus ?
   b. Évaluer iii) pour A="M" et B=20.

---

**Exercice 2**

On se propose d’écrire un algorithme pour l’évaluation de la formule A suivante en fonction de la valeur de n entrée par l’utilisateur :
```
? = ∑k=1n kn−k+1 = 1n + 2n−1 + ⋯+ n1 (Problème P).
```
1. Quel sous-problème (SP) peut être déduit du problème P précédent ?
2. Quel type de sous-programme peut être utilisé pour résoudre SP ?
3. Écrire EN PASCAL le sous-programme power qui permet de résoudre SP.
4. Quelle est la différence entre la boucle TANTQUE et la boucle POUR ?
5. La boucle POUR est-elle appropriée pour résoudre le problème P ? Justifiez !
6. Proposez un PROGRAMME PASCAL somme pour la résolution du problème P : vous devez gérer au mieux tous cas possibles.

---

**Exercice 3**

1. Considérons les codes suivants :
   ```
   Algorithme algo1;
   var n, m : entier;
   debut
     lire(n, m);
     tantque(n <> m) faire
       si(n > m) alors
         n := n - m;
       sinon
         m := m - n;
       fsi
     ftq
     ecrire(n);
   fin;

   function fct1(n : entier) : booleen;
   var tmp : entier;
   debut
     tmp := n;
     tantque(tmp > 1) faire
       tmp := tmp - 2;
     ftq
     si(tmp = 1) alors
       retourner VRAI;
     sinon
       retourner FAUX;
   fin;
   ```
   a. Qu’affiche l’algorithme algo1 si l’utilisateur entre les valeurs 45 et 18 ?
   b. Que fait la fonction fct1 (expliquer son prototype puis dire ce qu’elle fait) ?

2. Écrire un PROGRAMME PASCAL qui calcule et retourne la somme des carrés des n premiers entiers naturels.

---

**Exercice 4**

Vous êtes recrutés en tant que technicien dans une entreprise de logistique. Comme première tâche, il vous est demandé de créer un programme pour permettre au service de fabrication des emballages de connaître les dimensions (de volume plus précisément) des emballages à fabriquer pour le transport de colis personnalisés. En effet, les clients ont pour habitude de commander un certain nombre d’exemplaires de produits de forme cubique (par exemple, un client peut commander 200 dés d’arête 1.5 cm) et de préciser le nombre d’emballages identiques dans lesquels il voudrait recevoir ses produits (5 par exemple). Votre programme doit permettre de déterminer le volume des emballages à fabriquer (pour le cas des dés, par exemple, chaque emballage doit avoir un volume de 135 cm³). Le langage à utiliser est le Langage PASCAL. Comment vous y prenez-vous et quel est le code de votre programme ?

Correction :

Exercice 1 : Application du Cours / 4pts

1. Définissez : algorithme, objet. – 1pt + 0.5pt

Algorithme : suite ordonnée d’instructions qui indique la démarche à suivre pour résoudre un problème ou effectuer une tâche.

Objet : case mémoire destinée à contenir des valeurs de type défini au préalable.

2. Donner la structure générale d’un programme PASCAL.
program NomDuProgramme;
var
  // déclaration des variables
begin
  // début du programme
  // instructions
end.
3. On vous propose d’écrire un algorithme calculant le périmètre d’un cercle de diamètre entier:
a. Identifiez les données du problème. – 0.5pt

Les seules données de ce problème sont le diamètre du cercle et la constante ?.

b. Identifiez le(s) résultat(s) escompté(s). – 0.5pt

Le seul résultat attendu est le périmètre du cercle défini par le diamètre pris en entrée.

c. Déclarez tous les objets. – 1pt
const PI = 3.1415;
var diametre : entier;
    perimetre : reel;
4. Soient les expressions suivantes :
i) A ou B
ii) (A - 1 > 0) et (B < 0)
iii) (A = "M" et B >= 21) ou (A = "F" et B >= 25)
a. Quels sont les possibles types de A et B dans chacun des cas ci-dessus ? – 0.5pt x 3

Cas i) A et B doivent être des booléens

Cas ii) A et B doivent être des nombres (entier ou réel)

Cas iii) A doit être une chaîne de caractères et B un nombre (entier ou réel)

b. Évaluer iii) pour A="M" et B=20. – 0.5pt

iii) ≡ (A = "M" et B >= 21) ou (A = "F" et B >= 25)
≡ ("M" = "M" et 20 >= 21) ou ("M" = "F" et 20 >= 25) pour A="M" et B=20
≡ (Vrai et Faux) ou (Faux et Faux)
≡ Faux ou Faux ≡ Faux

Exercice 2 – 7pts

On se propose d’écrire un algorithme pour l’évaluation de la formule A suivante en fonction de la valeur de n entrée par l’utilisateur :
? = ∑k=1n kn−k+1 = 1n + 2n−1 + ⋯+ n1 (Problème P).
1. Quel sous-problème (SP) peut être déduit du problème P précédent ? – 1pt

Le sous-problème le plus évident est celui de l’évaluation de la puissance à l’ordre n d’un nombre entier donné.

2. Quel type de sous-programme peut être utilisé pour résoudre SP ? – 1pt

Pour le sous-problème identifié, c’est une fonction qui est convenable : elle prendra en argument le nombre entier (k) ainsi que l’ordre n et retournera la valeur de k élevé à la puissance n.

3. Écrire EN PASCAL le sous-programme power qui permet de résoudre SP. – 1.5pts
function power(k : integer; n : integer) : integer;
var
  i, puiss : integer;
begin
  puiss := 1;
  for i := 1 to n do
    puiss := puiss * k;
  power := puiss;
end;
4. Quelle est la différence entre la boucle TANTQUE et la boucle POUR ? – 1pt

La principale différence est que la boucle TANTQUE peut être utilisée même dans les cas où le nombre d’itérations n’est pas connu à l’avance ; ce qui n’est pas le cas pour la boucle POUR.

5. La boucle POUR est-elle appropriée pour résoudre le problème P ? Justifiez ! – 1pt

Oui, car le nombre d’itérations (n) est connu.

6. Proposez un PROGRAMME PASCAL somme pour la résolution du problème P : vous devez gérer au mieux tous cas possibles. – 1.5pts
program somme;
var
  n, k, som : integer;

function power(k : integer; n : integer) : integer;
var
  i, puiss : integer;
begin
  puiss := 1;
  for i := 1 to n do
    puiss := puiss * k;
  power := puiss;
end;

begin
  writeln('Entrez la valeur de n :');
  readln(n);
  som := 0;
  for k := 1 to n do
    som := som + power(k, n - k + 1);
  writeln('La somme est : ', som);
end.

Exercice 3 – 4pts

1. Considérons les codes suivants :
Algorithme algo1;
var n, m : entier;
debut
  lire(n, m);
  tantque(n <> m) faire
    si(n > m) alors
      n := n - m;
    sinon
      m := m - n;
    fsi
  ftq
  ecrire(n);
fin;

function fct1(n : entier) : booleen;
var tmp : entier;
debut
  tmp := n;
  tantque(tmp > 1) faire
    tmp := tmp - 2;
  ftq
  si(tmp = 1) alors
    retourner VRAI;
  sinon
    retourner FAUX;
fin;
a. Qu’affiche l’algorithme algo1 si l’utilisateur entre les valeurs 45 et 18 ? – 0.5pt

Avant la boucle n = 45 et m = 18
Premier tour de boucle n devient 45 – 18 = 27 et m reste 18
Second tour de boucle n devient 27 – 18 = 9 et m reste 18
Troisième tour de boucle n reste 9 et m devient 18 – 9 = 9 puis on sort de la boucle (car n et m ont la même valeur)
La valeur de n est affichée ; par conséquent, pour les valeurs 45 et 18 entrées par l’utilisateur, cet algorithme affiche 9 à l’écran.

b. Que fait la fonction fct1 (expliquer son prototype puis dire ce qu’elle fait) ? – 0.5pt + 0.5pt

Prototype : fct1 prend un entier en paramètre et retourne un booléen
Exemples : si fct1 prend 1, elle retourne Vrai ; si fct1 prend 2, elle retourne Faux ; si fct1 prend 3, elle retourne Vrai…
Conclusion : fct1 prend un nombre entier comme argument et retourne une valeur booléenne indiquant si ledit nombre est impair ou pas.

2. Écrire un PROGRAMME PASCAL qui calcule et retourne la somme des carrés des n premiers entiers naturels.
program SommeCarres;

function somme_carres(n : integer) : integer;
var
  k, som : integer;
begin
  som := 0;
  for k := 1 to n do
    som := som + k * k;
  somme_carres := som;
end;

var
  n, result : integer;
begin
  writeln('Entrez un entier n :');
  readln(n);
  result := somme_carres(n);
  writeln('La somme des carrés des ', n, ' premiers entiers naturels est : ', result);
end.

Exercice 4 – 4pts

Vous êtes recrutés en tant que technicien dans une entreprise de logistique. Comme première tâche, il vous est demandé de créer un programme pour permettre au service de fabrication des emballages de connaître les dimensions (de volume plus précisément) des emballages à fabriquer pour le transport de colis personnalisés. En effet, les clients ont pour habitude de commander un certain nombre d’exemplaires de produits de forme cubique (par exemple, un client peut commander 200 dés d’arête 1.5 cm) et de préciser le nombre d’emballages identiques dans lesquels il voudrait recevoir ses produits (5 par exemple). Votre programme doit permettre de déterminer le volume des emballages à fabriquer (pour le cas des dés, par exemple, chaque emballage doit avoir un volume de 135 cm³). Le langage à utiliser est le Langage PASCAL. Comment vous y prenez-vous et quel est le code de votre programme ?

Pour répondre à cette tâche en Pascal, nous allons créer un programme qui calcule le volume total des emballages nécessaires pour les produits cubiques commandés par les clients.

Étapes pour créer le programme :

  • Définition des données d'entrée : Nous aurons besoin de l'arête du cube (arrete_cube) et du nombre d'exemplaires commandés (nombre_exemplaires).
  • Calcul du volume d'un emballage : Le volume d'un cube est calculé en élevant l'arête au cube : volume_cube = arrete_cube * arrete_cube * arrete_cube.
  • Calcul du volume total des emballages : Le volume total des emballages sera le produit du volume d'un cube et du nombre d'exemplaires commandés : volume_total = volume_cube * nombre_exemplaires.
  • Affichage du résultat : Afficher le volume total des emballages nécessaires.
program CalculVolumeEmballages;
var
  arrete_cube, nombre_exemplaires, volume_cube, volume_total : integer;
begin
  writeln('Calcul du volume des emballages pour des produits cubiques');
  writeln('--------------------------------------------------------');
  // Lecture des données d'entrée
  writeln('Entrez la longueur de l\'arête du cube (en cm) :');
  readln(arrete_cube);
  writeln('Entrez le nombre d\'exemplaires commandés :');
  readln(nombre_exemplaires);
  // Calcul du volume d'un cube
  volume_cube := arrete_cube * arrete_cube * arrete_cube;
  
  // Calcul du volume total des emballages
  volume_total := volume_cube * nombre_exemplaires;
  
  // Affichage du résultat
  writeln('--------------------------------------------------------');
  writeln('Le volume d\'un emballage (cube) est de ', volume_cube, ' cm³.');
  writeln('Le volume total des emballages nécessaires est de ', volume_total, ' cm³.');
  
  readln; // Retrouver plein d’exercices corriges sur le site www.PandaCodeur.com
end.

Télécharger L'exercice Sous Forme de PDF

 

Si vous avez trouvé les examens corrigés en algorithmique de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 652027193 | Réaliser Par Mr Joël_Yk

Partager ici

Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam