Techniques des Réseaux Informatiques
EXERCICES PASCAL Exemple 2 : Ecrire un programme pascal qui permet de calculer le périmètre et la surface d’un rectangle ?
Spécification des sorties : Spécification des entrées : Spécification des traitements :
p, s a, b p = (a + b)*2 ,
s = a*b
Solution : Program rectangle ; Var p, s, a, b : integer; Begin Readln(a); readln(b); P:= (a + b)*2; s:= a * b; Writeln(p); writeln(s); End. Exemple 3 : Ecrire un programme pascal qui permet de calculer la TVA et TTC d’un montant HT ?
Spécification des sorties : Spécification des entrées : Spécification des traitements :
TVA, TTC HT TVA = HT * 20%
,
TTC = HT + TVA
Solution : Program compta ; Uses crt ; Var HT, TTC, TVA : real ; Begin Textcolor(yellow); textbackground(red); clrscr; Write(‘Donner un montant hors taxe :’) ; Readln(HT) ; TVA := HT * 0.2 ; TTC := HT + TVA; Writeln(‘La TVA est : ‘,TVA); Writeln(‘La TTC est : ‘,TTC) ; End. If Exercice 1 : Exécuter le programme suivant et donner le résultat final de : a, b, c et d Program test ; Var a, b, c, d : real ; Begin A := 5; b := 10; c := a + b; d := a – b; A := b/2 +d; b := a + b + c + d; c := b*2 + d; d := b/2 + c; 1
Techniques des Réseaux Informatiques
Writeln(‘a = ‘,a); Writeln(‘c = ‘,c); End.
Writeln(‘b = ‘,b); Writeln(‘d = ‘,d);
Exercice 2 : Ecrire un programme pascal qui permet de faire la permutation entre deux nombres entiers ? Program permutation ; Var a, b, c : integer ; Begin Write(‘Tapez la valeur de a : ’) ; readln(a) ; Write(‘Tapez la valeur de b : ’) ; readln(b) ; C := a ; a := b ; b :=c ; Writeln(‘La nouvelle valeur de a : ‘,a) ; Writeln(‘La nouvelle valeur de b : ‘,b) ; End. Exercice 3 : Soit un vendeur de lait qui expédie une quantité de bouteille (q) avec un prix unitaire (pu). Si le total de la commande (tc) dépasse 500 Dh, le transport est gratuit, sinon l’acheteur doit ajouter 10% de (tc) pour le transport. • Ecrire un programme pascal équivalent qui permet de calculer la somme a payé (sp) • Compléter le programme en ajoutant la condition d’un minimum de 10 Dh pour le transport Solution 1 : Program lait1 ; Var pu, tc, q, sp : real ; Begin Write(‘Donner Le prix Unitaire : ‘) ; Write(‘Donner La quantité : ‘) ; Tc := pu * q ; If tc > 500 then sp := tc else Writeln(‘La somme a payé vaut : ‘,sp) ; End.
readln(pu) ; readln(q) ; sp := tc + tc*10/100;
Solution 2 : Program lait2 ; Var pu, tc, q, sp : real ; Begin Write(‘Donner Le prix Unitaire : ‘) ; Write(‘Donner La quantité : ‘) ; Tc := pu * q ; t := tc*10/100; If tc > 500 then sp := tc Else If t>10 then sp := tc + t Else sp := tc + 10; Writeln(‘La somme a payé vaut : ‘,sp) ; End.
readln(pu) ; readln(q) ;
2
Techniques des Réseaux Informatiques
Exercice 4 : Soit a, b et c trois paramètres d’un triangle : • Si a = b = c alors triangle équilatéral • Si a = b ou a = c ou b = c alors triangle isocèle • Si a <> b <> c alors triangle normal ? Ecrire un programme pascal qui permet d’afficher si un triangle est équilatéral, isocèle ou normal Solution : Program triangle ; Var a, b, c : integer ; Begin Write(‘Tapez le paramètre a : ‘); readln(a) ; Write(‘Tapez le paramètre b : ‘); readln(b) ; Write(‘Tapez le paramètre c : ‘); readln(c) ; If (a = b) and (a = c) then writeln(‘Triangle équilateral’) else If (a = b) or (a = c) or (b = c) then writeln(‘Triangle isicèle’); If (a <> b) and (a<>c) then writeln(‘Triangle Normal’); End. Exercice 5: A la fin d’année, pour chaque étudiant doit avoir deux notes : note écrite (ne) de coefficient 5 et note orale (no) de coefficient 3. Ecrire un programme pascal qui permet de calculer la moyenne et d’afficher l’un des résultats suivantes : « Admis » ou « Echoué » Solution : Program examen ; Var no, ne, moy : real ; Begin Write(‘Tapez la note écrite :’) ; readln(ne) ; Write(‘Tapez la note orale :’) ; readln(no) ; Moy := (ne*5 + no*3)/8 ; Writeln(‘La moyenne est :’,moy) ; If moy >= 10 then writeln(‘Admis’) else End.
writeln(‘Echoué’);
Exercice 6: Chaque personnel dans une entreprise doit avoir un montant brute (mb) de paiement dont on peut enlevé ou ajouter certains droits : Cotisation familiale sous forme d’un pourcentage appliqué sur le montant brute (mb) La CNSS et différents impôts Soit l’échelle suivant : +3%
-30 DH
+4%
-50 DH
+5%
-60 DH
? Ecrire un programme qui permet de calculer le salaire net (sn)
3
Techniques des Réseaux Informatiques
Solution : Program employé ; Var mb, sn : real ; Begin Write(‘Tapez le montant brute : ‘) ; Readln(mb) ; If (mb<3000) then sn := mb – 30 + mb*3/100 ; If (mb>=3000) and (mb<=5000) then sn := mb – 50 + mb*4/100 ; If (mb>5000) then sn := mb – 60 + mb*5/100 ; Writeln(‘Le salaire net vaut : ‘,sn) ; End. Exercice 7: Un vendeur de pièce électronique expédie une quantité (q) de pièce avec un prix unitaire (p) suivant la condition : Si le nombre de pièce acheter dépasse 100 alors il remis à l’acheteur 20% de total de la commande (tc), sinon, si le nombre de pièce dépasse 50 il remis à l’acheteur 10% de (tc). ? Ecrire un programme qui permet de calculer le montant final de la facture (mff)
Solution : Program piece ; Var p, q, tc, mff : real ; Begin Write(‘tapez le prix unitaire de la pièce :’); readln(p) ; Write(‘tapez la quantité des pièces :’); readln(q) ; Tc := p*q ; If q>100 then mff := tc – (20/100)*tc ; If (q>50) and (q<=100) then mff := tc – tc*0.1 Writeln(‘Le montant final de la facture est :’,mff); End.
else
mff := tc;
Exercice 8: Pour la gestion de ses ventes un vendeur de fournitures à donner le plafond suivant, concernant les remises de montant total des achats (mta) : 0%
5%
10%
12% mta
300
600
900
? Calculer le prix net (pn) ainsi que la remise (r) Solution : Program vente ; Var mta, r, pn : real ; Begin Write(‘tapez le montant total des achats :’); readln(mta) ; If (mta<300) then r := 0 ; If (mta>=300) and (mta<600) then r := mta*5/100 ; 4
Techniques des Réseaux Informatiques
If (mta>=600) and (mta<900) Pn := mta – r ; Writeln(‘Le prix net est :’,pn); End.
then
r := mta*0.1 else r := mta*0.12 ;
Exercice 9: Pour calculer la somme a payé d’une facture d’électricité l’agent de l’ONE doit relevé deux numéros du conteur, de mois dernier (D) et de mois avant dernier (AD) Si la quantité d’électricité consommée est inférieur ou égale a 100KW, chaque KW est majoré de 140 centimes, en ajoutant un coût forfaitaire de 10DH ? Ecrire un programme qui permet de calculer la somme a payé (sp) Solution : Program one ; Use crt ; Var q, d, ad, sp : real ; Begin Textcolor(red) ; textbackground(12) ; clrscr; Write(‘tapez le relevé de conteur du mois dernier : ‘) ; readln(d) ; Write(‘tapez le relevé de conteur du mois avant dernier : ‘) ; readln(ad) ; Q :=d – ad ; If q<= 100 then sp := q*0.8 + 10 Else sp := 100*0.8 + (q 100)*1.4 + 10; Writeln(‘La somme a payé est :’,sp); End. Exercice 10: Soit un employer qui travail des nombres des heures normales (n1) avec au taux horaire (t1), et des heures supplémentaires (n2) avec un taux horaire (t2) Déterminer le salaire brut (s) de cette employer. Comparer (s) au plafond p = 1600 DH de sécurité sociale (c) : Si s <= 1600 alors c = 6% * s Si s> 1600 alors c = 100 DH ? Ecrire un programme pascal qui permet de calculer le net a payé (np) Solution : Program salaire ; Uses crt ; Var n1, n2, t1, t2, np, s, c : real ; Begin Textcolor(red) ; textbackground(12) ; clrscr; Write(‘Donner le nombre des heures normales :’) ; readln(n1) ; Write(‘Donner le taux horaire t1 :’) ; readln(t1) ; Write(‘Donner le nombre des heures supplémentaires :’) ; readln(n2) ; Write(‘Donner le taux horaire t2 :’) ; readln(t2) ; If s <= 1600 then c := s*0.06 else c := 100; Np := s –c; Writeln(‘Le net a payé vaut :’,np) ; End. 5
Techniques des Réseaux Informatiques
case Exemple 1 : Ecrire un programme pascal qui affiche le nom de jour à partir numéro de jour Solution : Var n : integer ; Begin Write(‘Tapez un numéro du jour : ’) ; Case (n) of 1 : writeln(‘Lundi’) ; 2 : writeln(‘Mardi’) ; 3 : writeln(‘Mercredi’) ; 4 : writeln(‘Jeudi’) ; 5 : writeln(‘Vendredi’) ; 6 : writeln(‘Samedi’) ; 7 : writeln(‘Dimanche’) ; end; end.
readln(n) ;
Exemple 2 : Ecrire un programme pascal qui affiche le nom de mois à partir de numéro de mois Solution : Var
x : integer ; Begin Write(‘Tapez un numéro du mois : ’) ; Case (x) of 1 : writeln(‘Janvier’) ; 2 : writeln(‘Février’) ; 3 : writeln(‘Mars’) ; 4 : writeln(‘Avril’) ; 5 : writeln(‘Mai’) ; 6 : writeln(‘Juin’) ; 7 : writeln(‘Juillet’) ; 8 : writeln(‘Août’) ; 9 : writeln(‘Septembre’) ; 10 : writeln(‘Octobre’) ; 11 : writeln(‘Novembre’) ; 12 : writeln(‘Décembre’) ; end; end.
readln(x) ;
1. Les instructions de répétitions : La répétition représente l’idée d’exécuter une même séquence plusieurs fois, en distingue 3 formes de répétition : a) 1ère Forme : Tant que (condition) faire séquence C'est-à-dire tant que la condition est vérifié en exécute la séquence En Turbo Pascal : 6
Techniques des Réseaux Informatiques
While (condition)
do séquence
Exemple 1 : Ecrire un programme pascal qui permet d’afficher le mot « Bonjour » 5 fois Solution : Program bonjours ; Var i : integer ; Begin I := 1 ; While i <= 5 do Begin Writeln(‘Bonjour’) ; End ; End.
Exemple 2 : Ecrire un programme pascal qui permet de calculer la somme d’une suite d’éléments entiers Solution : Program suite ; Var i, n, s : integer ; Begin Write(‘Tapez un entier : ‘) ; readln(n) ; I := 1 ; s := 0 ; While i <= n do Begin S :=s + i ; I := i+ 1 ; End ; Writeln(‘La somme est :’,s) ; End. b) 2ème Forme : Pour i = A1 à An faire séquence C'est-à-dire la séquence (s) est exécutée pour i=A1, i=A2, i=A3, …… i=An En Turbo Pascal : For i := A1 to An do s Exemple : ? Réécrire l’exemple 1 et l’exemple 2 sous la 2ème forme Solution (Exemple 1) : Program bonjours ; Var i : integer ; Begin For i:=1 to 5 do Writeln(‘Bonjour’) ; End. Solution (Exemple 2) : Program Var
suite ; i, n, s : integer ; 7
Techniques des Réseaux Informatiques
Begin Write(‘Tapez un entier : ‘) ; readln(n) ; For i := 1 to n do S :=s + i ; Writeln(‘La somme est :’,s) ; End. Repeat
séquence
until (condition)
Série d’exercices N° :2 Exercice 1 : Soit deux villages A et B avec A = 210 et B = 280, chaque année la population de A augmente de 8%, celle de B augmente de 5%. Calculer le nombre d’année nécessaire pour que A dépasse B. Généraliser le problème avec n’importe quelle valeur de A et B. Solution 1 : Program population ; Var a, b, n : integer ; Begin A := 210 ; B := 280 ; n := 0 ; While A
e, min, max, moy, s : real;
i : integer ;
8
Techniques des Réseaux Informatiques
Write(‘Element 1 :’) ; readln(e) ; min := e; For i := 2 to 10 do Begin Write(’Element ’,i,’ :’); readln(e); If e<min then min := e; If e>max then max := e; S := s + e ; End; Moy := s/10 ; Writeln(’Le minimum est : ’,min); Writeln(’Le maximum est : ’,max); Writeln(’La moyenne est : ’,moy); End. Exercice 4 : Calculer et afficher la puissance d’un nombre entier ? An An = (A*A*A*A*A*….*A) n fois Solution : Program puissance; Var a, n, p, i : integer; Begin Write(‘Donner un entier: ‘); readln(a); Write(‘Donner exposant : ‘) ; readln(n) ; P := 1 ; For i := 1 to n do p := p*a ; Writeln(‘Le puissance est : ‘,p); End. Exercice 5 : En utilisant l’instruction while ou repeat écrire un programme qui calcule la somme des éléments entiers jusqu’à la saisie de la valeur 1. Solution 1 : Var e, s : integer ; Begin Writeln(‘Tapez des éléments déférents de 1’) ; Write(‘Tapez un élémént : ‘) ; readln(e) ; While e <> 0 do Begin Write(‘Tapez un élémént : ‘) ; S := s+e ; End ; Write(‘La somme des éléments saisie vaut : ‘,s) ; End.
s :=e ;
readln(e) ;
Exercice 6 : Ecrire un programme qui permet d’afficher des étoiles sous forme carré puis sous forme triangulaire Solution 1 : (carré) 9
Techniques des Réseaux Informatiques
Program etoile ; Var n, j, i : integer ; Begin Write(‘Tapez un entier :’); readln(n); For i := 1 to n do Begin For j := 1 to n do Write(‘* ’); Writeln; End; End. Solution 2 : (triangle) Program etoile ; Var n, j, i : integer ; Begin Write(‘Tapez un entier :’); readln(n); For i := 1 to n do Begin For j := 1 to i do Write(‘* ’); Writeln; End; End. Les types Série d’exercices N° :3 Exercice 1 : Ecrire un programme pascal qui retire les blancs d’une phrase donnée. Exp : Entrée (je suis un étudiant) Sortie (jesuisunétudiant) Solution : Program blancs; Var s:string; i,n : integer; Begin Readln(s) ; n := length(s) ; For i:=1 to n do If s[i] <> ‘ ‘ then write(s[i]); End. Exercice 2 : Le mot miroir d’un mot donnée est le mot obtenu en lisant le mot à partir de fin. ? Ecrire un programme pascal donnant le mot miroir d’un mot exp : emhtirogla est le mot miroir de algorithme Solution : Program miroir ; Var s : string ; n,i : integer ; Begin Readln(s); n := length(s); For i := n downto 1 do write(s[i]);
(for i := 1 to n do write(s[n-i+1]);) 10
Techniques des Réseaux Informatiques
End. Exercice 3 : Ecrire un programme qui permet de dire si un mot donné est un mot palindrome. C’est à dire identique a son miroir. Exp : KAYAK, ESSE, … Solution : Program palindrome ; Var s : string ; n, m, i : integer; Begin Readln(s); n := length(s); m := 0; For i := 1 to n do If s[i] = s[n-i+1] then m := m+1; If m = n then write(‘Ce mot est palindrome’); End. Exercice 4 : Soit un employé est caractérisé par son nom, prénom, adresse et salaire. ? Ecrire un programme pascal qui permet de lire 5 employé. Solution : Program employer ; Var nom, prenom, adr : string; n : integer; salaire : real; Begin For i := 1 to 5 do Begin Write(‘Nom : ’); readln(nom) ; Write(‘Prénom : ’); readln(prenom) ; Write(‘Adresse : ’); readln(adr) ; Write(‘Salaire : ’); readln(salaire) ; End ; End. Exercice 5 : Ecrire un programme pascal qui donne si un nombre existe dans un tableau ou pas. (tableau de 10 réel). Solution 1 : Program recherche; Var t : array[1..10] of real ; e : real ; n, i : integer; Begin N := 0; For i := 1 to 10 do readln(t[i]); Write(‘Donner un élément a rechercher : ’); Readln(e); For i := 1 to 10 do If e = t[i] then n :=n+1; If n = 0 then writeln(‘Cet élément existe pas’); Else writeln(‘Cet élément existe’) ; End. Solution 2 : 11
Techniques des Réseaux Informatiques
Program recherche; Var t : array[1..10] of real ; e : real ; i : integer; v : boolean; Begin V := false; For i := 1 to 10 do readln(t[i]); Write(‘Donner un élément a rechercher : ’); Readln(e); For i := 1 to 10 do If e = t[i] then v := true; If v = true then writeln(‘Cet élément existe’); Else writeln(‘Cet élément existe pas’) ; End. Exercice 6 : Ecrire un programme pascal qui affiche le plus grand élément d’un tableau de 10 entiers. Solution : Program grand ; Var t : array[1..10] of integer ; I , max : integer; Begin For i := 1 to 10 do Write(‘entrer l’’élément numéro ‘,i,’ :’) ; readln(t[i]); Max := t[1]; For i :=2 to 10 do If t[i]> max then Max := t[i]; Writeln(max); End. Exercice 7 : Soit un tableau de 10 nombres entiers, et soit E un entier. Calculer le nombre de fois que E apparaît dans le tableau. ? Ecrire un programme équivalent Solution : Program apparaition ; Var a : array[1..10] of integer; e, i, n : integer; Begin For i := 1 to 10 do readln(a[i]); Readln(e); For i := 1 to 10 do If e = a[i] then n := n + 1; Writeln(‘Appariation de : ’, e , ‘ et ‘, n , ‘ fois’ ); End. Exercice 8 : Soit T un tableau de 10 entiers, chercher sa valeur maximale et le rang de celle-ci dans le tableau. Solution : Program
rang ; 12
Techniques des Réseaux Informatiques
Var Begin
t : array[1..10] of integer ;
max, i, r: integer;
For i:= 1 to 10 do Begin Write(‘Element ‘, i,’ : ‘); Readln(t[i]); End; Max := t[1]; r :=1; For i := 1 to 10 do Begin If maw < t[i] then max := t[i]; R := I; End; Writeln(‘ La valeur maximale est : ‘,max) ; Writeln(‘Le rang est : ‘,r) ; End. Exercice 9 : Soit T un tableau de 10 réels, inserer la valeur x à la Kième place (on obtiendra un tableau de 11 éléments) Solution 1 : Program var Begin For I := 1 to Readln(x); T[11] := t[k]; For I := 1 to End.
insertion ; t : array[1..11] of real ;
x : real; i, k: integer;
10 do readln(t[i]); readln(k); t[k] := x; 11 do writeln(t[i]);
Solution 2 : Program insertion ; var t : array[1..11] of real ; Begin For I := 1 to 10 do readln(t[i]); Readln(x); readln(k); For i := 10 downto k do t[i+1] := t[i]; t[k] := x; For I := 1 to 11 do writeln(t[i]); End.
x : real; i, k: integer;
Exercice 10 : Trier un tableau de 10 entiers de plus petit au plus grand. Program triage ; Var t : array[1..10] of integer ; i, j, c : integer; Begin For I := 1 to 10 do readln(t[i]); Repeat J := 0; For I :=1 to 9 do If t[i] > t[i+1] then 13
Techniques des Réseaux Informatiques
Begin C := t[i]; T[i] := t[i+1]; T[i+1] := c; J := j +1; End; Until j :=0; For I := 1 to 10 do writeln(t[i]); End.
14