Corrigé Informatique 2 21 - 22

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 7

Université A.

Mira de Bejaia Année universitaire 2021/2022


Faculté de Technologie 1ère Année Technologie
Département de Technologie Durée : 01h30min

Examen – Informatique 2

Exercice 01 : [5 pts]
Soit T, un tableau de N nombres entiers. Écrire un programme Pascal qui permet de diviser T en deux
tableaux VP et VN : VP contient les valeurs positives et nulles et VN contient les valeurs négatives.
Exemple :
T VP VN
3 2 -4 9 -1 0 -3 3 2 9 0 -4 -1 -3

Exercice 02 : [8 pts]
Soit l’algorithme
3 2 -4 suivant
4 9 : -1 0 3 2 -4 4 9 -1 3 20 -4 4 9 -1 0
Algorithme
1. 3 2 -4Exo2;4 9 -1 0 Questions
3 2 -4 : 4 9 -1 3 20 -4 4 9 -1 0
Variables
2. A : tableau [1..100,1..100] de réel; 1. Traduire l’algorithme en Programme
i, j, N : entier; PASCAL.
3.
S, M : réel;
4.Début 2. Dérouler le programme pour les valeurs
{*-*-* Les entrées *-*-*} suivantes : N = 3 et
5. Lire(N);
2 4 −4
6. Pour i 1 à N faire 𝐴=[ 4 8 1 ]
Pour j 1 à N faire
7. Lire(A[i,j]); 3.5 9 3
Fin-Pour 3. Déduire ce que fait le programme ?
8. Fin-Pour 4. Réécrire le programme en remplaçant la boucle
9. {*-*-* Traitement *-*-*} for par la boucle while dans la partie de
S  0;
10. Pour i  1 à N faire traitement.

11. S  S+A[i,N-i+1] ; Remarque :


Fin-Pour
12. M  S/N ; 2 4 −4
Eléments de l’anti- 𝐴=[ 4
13.{*-*-* Les sorties *-*-*} 8 1]
diagonale de A 3.5 9 3
Écrire(S:4:2, M:4:2);
Fin.
Exercice 03 : [7 pts]
Soit le programme PASCAL suivant :
Program Exo3; Questions :
var
t, d : integer; 1. Identifier le type de sous-programme présent
v, vkm : real;
dans ce programme.
……… Conversion (x: real): real ;
var 2. Réécrire le sous-programme en complétant
y : real; avec ce qui manque.
Begin 3. Dérouler le programme pour d= 300 et t = 8.
y := (x*3600)/1000 ;
4. Déduire ce que fait le programme ?
……………………….
End; 5. Réécrire le programme en transformant le
Begin sous-programme utilisé à l’autre type de sous-
read(d,t); programme.
v :=d/t ;
vkm := conversion(v);
writeln('La vitesse est : ', v:10:3 ,' m/s');
writeln('La vitesse est : ', vkm:10:3, ' km/h');
End.
Bonne chance
1/1
Université A. Mira de Bejaia Année universitaire 2021/2022
Faculté de Technologie 1ère Année Technologie
Département de Technologie Durée : 01h30min

Solution de l’examen – Informatique 2

Solution de l’exercice 01 : [5 pts]


Le programme Pascal qui permet de diviser T en deux tableaux VP et VN est le suivant: (Solution 1)
Programme PASCAL
Program Classification ; 0.25
Var
N,i,k,x : integer; 0.25
{Les variables k et x sont utilisées pour parcourir les éléments de VP et VN, respectivement. D’autres
identificateurs (noms de variables) peuvent être utilisés}
T,VP,VN : array [1..100] of integer ; 0.75 (0.25 pour chaque déclaration de tableau)

Begin
{*-*-* Les entrées *-*-*}
Writeln('Donner la taille du vecteur T');
Read(N) ; 0.25
Writeln('Donner les composantes du vecteur T');
For i :=1 to N do
0.25
Read(T[i]) ;

{*-*-* Traitement *-*-*}


x :=1 ; k :=1 ; 0.5 (0.25 pour l’initialisation de x et 0.25 pour celle de k)
For i :=1 to N do 0.25
if (T[i]>=0) then 0.5 (pour un if double ou pour deux if simples)
Begin
VP[k] :=T[i] ;
0.5 (0.25 par instruction)
k :=k+1 ;
End
Else
Begin
VN[x] :=T[i] ;
0.5 (0.25 par instruction)
x :=x+1 ;
End ;

{*-*-* Les sorties *-*-*}


Writeln('Les composantes du vecteur VP sont : ');
For i :=1 to (k-1) do
Write(VP[i]:4) ; 0.5 (0.25 pour write et 0.25 pour for qui varie jusqu’à k-1)
Writeln;
Writeln('Les composantes du vecteur VN sont : ');
For i :=1 to (x-1) do
0.5 (0.25 pour write et 0.25 pour for qui varie jusqu’à x-1)
Write(VN[i]:4) ;
End.

Ou bien (Solution 2)
Programme PASCAL
Program Classification ;
0.25
Var
N,i,k,x : integer; 0.25
{Les variables k et x sont utilisées pour parcourir les éléments de VP et VN respectivement. D’autres
identificateurs (noms de variables) peuvent être utilisés}
T,VP,VN : array [1..100] of integer ; 0.75 (0.25 pour chaque déclaration de tableau)

Begin
{*-*-* Les entrées *-*-*}
Writeln('Donner la taille du vecteur T');
Read(n) ; 0.25
Writeln('Donner les composantes du vecteur T');
For i :=1 to N do
0.25
Read(T[i]) ;

{*-*-* Traitement *-*-*}


x :=0 ; k :=0 ; 0.5 (0.25 pour l’initialisation de x et 0.25 pour celle de k)
For i :=1 to N do 0.25
if (T[i]>=0) then 0.5 (pour un if double ou pour deux if simples)

Begin
k :=k+1 ;
0.5 (0.25 par instruction)
VP[k] :=T[i] ;
End
Else
Begin
x :=x+1 ;
0.5 (0.25 par instruction)
VN[x] :=T[i] ;
End ;

{*-*-* Les sorties *-*-*}


Writeln('Les composantes du vecteur VP sont : ');
For i :=1 to k do
Write(VP[i]:4) ; 0.5 (0.25 pour write et 0.25 pour for qui varie jusqu’à k)
Writeln;
Writeln('Les composantes du vecteur VN sont : ');
For i :=1 to x do
Write(VN[i]:4) ; 0.5 (0.25 pour write et 0.25 pour for qui varie jusqu’à x)
End.

N.B: Les messages et les commentaires ne sont pas notés.


Solution de l’exercice 02 : [8 pts]
1. Traduire l’algorithme en Programme PASCAL. (3.5 pts)

Algorithme Programme PASCAL


Algorithme Exo2; Program Exo2; 0.25
variables var 0.25
A : tableau [1..100,1..100] de réel; A:array [1..100,1..100] of real; 0.25
i, j, N : entier; i,j,N:integer; 0.25
S, M : réel; S, M : real; 0.25
Début Begin
{*-*-* Les entrée *-*-*} {*-*-* Les entrée *-*-*}
Lire(N); Read(N); 0.25
Pour i 1 à N faire For i:=1 to N do
Pour j 1 à N faire For j:=1 to N do 0.75
Lire(A[i,j]); Read(A[i,j]);
Fin-Pour
Fin-Pour {*-*-* Traitement *-*-*}
{*-*-* Traitement *-*-*} S:=0; 0.25
S  0; For i:=1 to N do
0.5
Pour i  1 à N faire S:=S+A[i,N-i+1];
S  S+A[i,N-i+1] ; M:=S/N; 0.25
Fin-Pour
M  S/N ;
{*-*-* Les sorties *-*-*} {*-*-* Les sorties *-*-*}
Write(S:4:2, M:4:2); 0.25
Ecrire(S:4:2, M:4:2);
Fin. End.

2. Dérouler le programme pour les valeurs suivantes : N = 3 et (2.5 pts)


𝟐 𝟒 −𝟒
𝑨=[ 𝟒 𝟖 𝟏 ]
𝟑. 𝟓 𝟗 𝟑

Instructions Variables Affichage


N i j A S M
Read(N); 3 / / / / 0.25
For i:=1 to N do 1 1 j=1 j=2 j=3
For j:=1 to N do 2 2 i=1 2 4 -4
read (A[i,j]) ;  3 3 i=2 4 8 1
/ / 0.5
i= 3 3.5 9 3
S:=0;  / /  0 / 0.25
For i:=1 1
S:=S+A[i,N-i+1]; / 0.25
S:=0+A[1,3];  
S:=0+(-4)=-4; -4
For i:=2 2 / /
S:=S+A[i,N-i+1];
S:=-4+A[2,2];  0.25
S:=-4+8=4;  4
For i:=3 3 /
S:=S+A[i,N-i+1]; /
S:=4+A[3,1];   0.25
S:=4+3.5=7.5; 7.5
M:=S/N;
  2.5 0.25
M:=7.5/3=2.5;
Write(S:4:2, M:4:2);  7.50 2.50 0.5
3. Déduire ce que fait le programme ? (0.75 pt)
Le programme calcule la somme et la moyenne des éléments de l’anti-diagonale de la matrice A. 0.75 (La
formulation de cette phrase peut changer, cependant, les mots en surbrillance doivent apparaître)

4. Réécrire le programme en remplaçant la boucle for par la boucle while dans la partie de
traitement.(1.25 pt)

Programme PASCAL
Program Exo2;
var
A:array [1..100,1..100] of real;
i,j,N:integer;
S, M : real;
Begin
{*-*-* Les entrée *-*-*}
Read(N);
For i:=1 to N do
For j:=1 to N do
Read(A[i,j]);

{*-*-* Traitement *-*-*}


S:=0;
i:=1 ; 1.25 pt :
While (i<=N) do
Begin 0.25 Initialisation.
S:=S+A[i,N-i+1]; 0.25 Syntaxe de la boucle while
0.25 L’ajout du begin
i:=i+1;
0.25 Incrémentation
End;
0.25 L’ajout du end
M:=S/N;

{*-*-* Les sorties *-*-*}


Write(S:4:2, M:4:2);

End.

Solution de l’exercice 03 : [7 pts]


1. Identifier le type de sous-programme présent dans ce programme. (0.25 pt)
Le sous-programme est une fonction 0.25
2. Ré-écrire le sous-programme en complétant avec ce qui manque. (1 pt)

Programme PASCAL
Program Exo3;
var
t, d : integer;
v, vkm : real;
Function conversion (x: real): real ; 0.25 pour le mot-clé function
var
y : real;
Begin
y := (x*3600)/1000 ;
conversion :=y; 0.75
End;
Begin {Début du Programme Principal}
read(d,t);
v :=d/t ;
vkm := conversion(v);
writeln('La vitesse est : ', v:10:3 ,' m/s');
writeln('La vitesse est : ', vkm:10:3, ' km/h');
End. {Fin du Programme Principal}

3. Dérouler le programme pour d= 300 et t = 8. (2.5 pts)

Instructions Programme principal La fonction Affichage


t d v vkm x y conversion 0.25
Read(d, t) 8 300 / / 0.5
v :=d/t   37.5 / 0.25
vkm := conversion(v)    /
conversion(v) (l’appel à la fonction
conversion avec le paramètre v=37.5)
=> La trasmission des paramètres 37.5 0.5
y := (x*3600)/1000 ; 135 0.25

conversion :=y; → conversion = 135 135 0.5


vkm:= conversion(v)=135
135 0.25
writeln('La vitesse est : ', v:10:3 ,' m/s'); La vitesse est :
37.5 m/s
writeln('La vitesse est : ', vkm:10:3, ' km/h'); La vitesse est :
135 km/h

4. Déduire ce que fait le programme ? (1 pt)


Le programme calcule la vitesse en m/s, puis fait appel à un sous-programme qui fait la conversion de cette
vitesse en km/h. 1pt (La formulation de cette phrase peut changer, cependant, les mots en surbrillance doivent
apparaître)

5. Réécrire le programme en transformant le type de sous-programme utilisé à l’autre type de sous-


programme. (2.25 pts) (Solution 1)
Programme PASCAL
Program Exo3;
var
t, d : integer;
v, vkm : real; 1.5 pt :
Procedure conversion (x: real; var y:real) ;
Begin 0.25 : Procedure
y := (x*3600)/1000 ; 0.25 var, 0.25 y:real
End; 0.25 Suppression du type
Begin {Début du Programme Principal} 0.5 Suppression de
read(d,t); conversion :=y
v :=d/t ;
conversion(v, vkm); 0.75
writeln('La vitesse est : ', v:10:3 ,' m/s');
writeln('La vitesse est : ', vkm:10:3, ' km/h');
End. {Fin du Programme Principal}
Ou bien (Solution 2)
Programme PASCAL
Program Exo3;
var
t, d : integer;
v, vkm, R : real; 0.25
Procedure conversion (x: real; var y:real) ; 1.5 pt :
Begin
y := (x*3600)/1000 ; 0.25 : Procedure
End; 0.25 var, 0.25 y:real
Begin {Début du Programme Principal} 0.25 Suppression du type
read(d,t); 0.5 Suppression de
v :=d/t ; conversion :=y
conversion(v, R); 0.25
vkm := R; 0.25
writeln('La vitesse est : ', v:10:3 ,' m/s');
writeln('La vitesse est : ', vkm:10:3, ' km/h');
End. {Fin du Programme Principal}

Vous aimerez peut-être aussi