Vous êtes sur la page 1sur 5

Devoir de contrôle n°1 Coefficient : 1 Durée: 1 heure

Date : Mercredi 15 mars 2017


Matière : Informatique Classe : 4ème Mathématiques
Lycée : Abou el Kacem Chebbi Kalâa Kébira- Nom : ..........................
Sousse Corrigé Prénom : .....................
Enseignant : N.DHIFALLAH Semestre n° 2 N° : ............. Note : ......... / 20
Année scolaire 2016-2017 NB : cette copie doit être rendue à la fin de la séance.
Exercice 1 : (4 points)
Soit la fonction recherche_dicho dont l'algorithme est donné ci-après :
0) DEF FN recherche_dicho (T:TAB,n : entier ,v : réel ): Booléen
1) a ← 1, b ←n, trouve ← Faux
répéter
m ← (a+b) DIV 2
si T[m]=v alors trouve ← VRAI
sinon si T[m]>v alors b m-1
sinon a m+1
finsi
jusqu'a (trouve) OU (a>b)
2) recherchedicotrouve
3) Fin recherche_dicho

Compléter l'algorithme de la fonction recherche_dicho, dont les paramètre sont T, n et v , permettant


de vérifier l’existence d'un réel v dans un tableau T de taille n par la méthode de recherche
dichotomique, puis renvoi le résultat se trouvant dans la variable « trouve ».
Exercice 2 : (3 points)
Soit la procédure suivante :
procedure tribulles(var t:tab; n:integer);
var i: Integer ;echange : Booléen ; aux :integer ;
begin

repeat
echange :=false ;
for i :=1 to n-1 do
begin
if T[i]>T[i+1] then
begin
echange := true ;
aux := T[i] ;
T[i] :=T[i+1] ;
T[i+1] :=aux ;
End ;
End ;
Cours d’informatique en ligne :

n :=n-1 ;
Until (echange = false) or (n=1) ;
End ;
Compléter la procédure de tri à bulles en pascal ci-dessus, pour trier un tableau T, de taille n en
ordre croissant.

Problème : (13 points)


On se propose d'écrire un programme qui permet de remplir un tableau T de taille n <15 par des
entiers au hasard entre 20 et 30, puis d’afficher le tableau, ensuite de saisir un entier x qui existe dans
T, puis effacer toutes les occurrences de x dans T enfin afficher le tableau résultat.

Page 1/5
Devoir de contrôle n°1-SEM2- 4ème Mathématiques Année Scolaire 2016-2017

Questions:
1) Analyser le problème en le décomposant en modules.
2) Déduire l'algorithme du programme principal ainsi que les algorithmes des modules
envisagés.
3) Déduire le programme pascal et l’enregistrer sous le nom « DC3M.pas » dans
C:\BAC2017
Analyse du Programme principal Algorithme de la procédure saisir :
Nom : problème 0) DEF Proc saisir(var x:entier)
Résultat= proc Afficher(T,n) 1) Répéter
Proc effacer(x,T,n) Ecrire("entier à supprimer x=") , lire(x)
Proc saisir(x) jusqu'à (FN verif(x,t,n)=vrai)
Proc Remplir(t,n) 2)Fin Saisir
Fin problème T.D.O.Locaux
Tableau de déclaration de nouveau type Objet Type/Nature
Type
Verif Fonction
TAB=tableau de 14 entiers Algorithme de la procédure decaler:
T.D.O. Globaux 0) DEF Proc decaler(p :entier,Var t :tab, Var n :entier)
Objet Type/Nature 1) pour i de p à n-1 faire
T[i]←T[i+1]
T TAB FinPour
n,x entier 2)n ←n-1
Afficher, effacer, remplir, saisir Procédure 3) Fin inserer
Algorithme du programme principal : T.D.O.Locaux
0) Début problème Objet Type/Nature
1) Proc Remplir(t,n)
2) proc Afficher(T,n) i entier
3) Proc saisir(x)
4) Proc effacer(x,T,n)
5) proc Afficher(T,n) Algorithme de la procédure effacer :
6) Fin problème 0) DEF Proc effacer(x :entier,Var t :tab, Var n :entier)
1)i1
Algorithme de la procédure Afficher : 2) tant que verif(x,t,n)=vrai et (n<>0) faire
0)DEF Proc afficher(t :tab, n :entier) si t[i]=x alors PROC decaler(i,t,n)
1)Pour i de 1 à n faire sinon ii+1
Ecrire("T[",i, "]=",t[i]) FinSi
FinPour Fintantque
2) Fin Afficher 3) Fin effacer
T.D.O.Locaux T.D.O.Locaux
Objet Type/Nature Objet Type/Nature
i entier i entier
Algorithme de la procédure Remplir
0)DEF proc Remplir (var T:tab ,var n:entier) Algorithme de la fonction verif :
1) Répéter 0) DEF FN verif(x :entier, t :tab, n :entier) :booléen
Cours d’informatique en ligne :

Ecrire("n="), lire(n) 1) I0 , trouve faux


jusqu'à n <15 2) Répéter
2) pour i de 1 à n faire Ii+1
t[i]hasard(11)+20 Si t[i]=x alors trouve vrai
finPour Jusqu'à (trouve=vrai) ou(i=n)
Fin Remplir 3) veriftrouve
T.D.O.Locaux 4) Fin verif
Objet Type/Nature T.D.O.Locaux
Objet Type/Nature
i Entier
I Entier
trouve booléen

Page 2/5
Devoir de contrôle n°1-SEM2- 4ème Mathématiques Année Scolaire 2016-2017

program probleme; procedure decaler(p:integer;var t:tab;var n:integer);


uses wincrt; var i:integer;
type begin
tab=array[1..14] of integer;
var for i:=p to n-1 do
t:tab; t[i]:=t[i+1];
n,x:integer;
procedure afficher(t:tab;n:integer); n:=n-1;
var i:integer; end;
begin
for i:=1 to n do procedure effacer (x:integer;var t:tab;var n:integer);
writeln('T[',i,']=',T[i]); var i:integer;
end; begin
function i:=1;
verif(x:integer;t:tab;n:integer):boolean; while (verif(x,t,n)) and (n<>0 )do
var i:integer;trouve:boolean; begin
begin if t[i]=x then decaler(i,t,n)
i:=0;trouve:=false; else i:=i+1;
repeat end;
i:=i+1; end;
if t[i]=x then trouve:=true;
until (trouve) or (i=n); begin
remplir(t,n);
verif:=trouve; afficher(t,n);
end; saisir(x);
effacer(x,t,n);
procedure remplir(var t:tab; var n:integer); afficher(t,n);
var i:integer; end.
begin
repeat
write('n=');readln(n);
until n<15;

randomize;
for i:=1 to n do
t[i]:=random(11)+20;
Cours d’informatique en ligne :

end;

procedure saisir( var x:integer);


begin
repeat
write('entier à supprimer x='); readln(x);
until verif(x,t,n);
end;

Page 3/5
Devoir de contrôle n°1-SEM2- 4ème Mathématiques Année Scolaire 2016-2017

Deuxième méthode :
Utiliser la fonction position à la place de la fonction vérif. Position permet de renvoyer la position
d’un entier dans le tableau, s’il n’existe pas elle renvoie 0

Analyse du Programme principal Algorithme de la procédure saisir :


Nom : problème 0) DEF Proc saisir(var x:entier)
Résultat= proc Afficher(T,n) 1) Répéter
Proc effacer(x,T,n) donnée("entier à supprimer x=") , lire(x)
Proc saisir(x) jusqu'à (FN position(x,t,n)<>0)
proc Afficher(T,n) 2)Fin Saisir
Proc Remplir(t,n) T.D.O.Locaux
Fin problème Objet Type/Nature
Tableau de déclaration de nouveau type
Verif Fonction
Type
Algorithme de la procédure decaler:
TAB=tableau de 14 entiers 0) DEF Proc decaler(p :entier,Var t :tab, Var n :entier)
T.D.O. Globaux 1) pour i de p à n-1 faire
Objet Type/Nature T[i]←T[i+1]
FinPour
T TAB 2)n ←n-1
n,x entier 3) Fin inserer
Afficher,effacer, remplir, saisir Procédure T.D.O.Locaux
Algorithme du programme principal : Objet Type/Nature
7) Début probleme
8) Proc Remplir(t,n) i entier
9) proc Afficher(T,n)
10) Proc saisir(x)
11) Proc effacer(x,T,n) Algorithme de la procédure effacer :
12) proc Afficher(T,n) 0) DEF Proc effacer(x :entier,Var t :tab, Var n :entier)
13) Fin poblème 1) tant que (FN position(x,t,n)<>0) et (n<>0)faire
PROC decaler(FN position(x,t,n) ,t,n)
Algorithme de la procédure Afficher : Fintantque
0)DEF Proc afficher(t :tab, n :entier) 2) Fin effacer
1)Pour i de 1 à n faire T.D.O.Locaux
Ecrire("T[",i, "]=",t[i]) Objet Type/Nature
FinPour
2) Fin Afficher i entier
T.D.O.Locaux
Objet Type/Nature Algorithme de la fonction position:
5) DEF FN position(x :entier, t :tab, n :entier) :entier
I entier 6) I0 , p0
Algorithme de la procédure Remplir 7) Répéter
Cours d’informatique en ligne :

0)DEF proc Remplir (var T:tab ,var n:entier) Ii+1


1) Répéter Si t[i]=x alors pi
Ecrire("n="), lire(n) Jusqu'à (p<>0) ou(i=n)
jusqu'à n <15 8) Position p
2) pour i de 1 à n faire 9) Fin position
t[i]hasard(11)+20 T.D.O.Locaux
finPour Objet Type/Nature
Fin Remplir
T.D.O.Locaux I,p Entier
Objet Type/Nature
I Entier

Page 4/5
Devoir de contrôle n°1-SEM2- 4ème Mathématiques Année Scolaire 2016-2017

program probleme;
uses wincrt; procedure decaler(p:integer;var t:tab;var n:integer);
type var i:integer;
tab=array[1..14] of integer; begin
var
t:tab; for i:=p to n-1 do
n,x,:integer; t[i]:=t[i+1];
procedure afficher(t:tab;n:integer);
var i:integer; n:=n-1;
begin end;
for i:=1 to n do
writeln('T[',i,']=',T[i]);
end;
function procedure effacer (x:integer;var t:tab;var n:integer);
position(x:integer;t:tab;n:integer):integer; var i:integer;
var begin
i,p:integer;
begin while (position(x,t,n)<>0) and (n<>0 )do
i:=0;p:=0; decaler(position(x,t,n), t,n);
repeat
i:=i+1; end;
if t[i]=x then p:=i;
until (p<>0) or (i=n); begin
remplir(t,n);
position:=p; afficher(t,n);
end; saisir(x);
effacer(x,t,n);
procedure remplir(var t:tab; var n:integer); afficher(t,n);
var i:integer; end.
begin
repeat
write('n=');readln(n);
until n<15;

randomize;
for i:=1 to n do
t[i]:=random(11)+20; Cours d’informatique en ligne :

end;

procedure saisir( var x:integer);


begin
repeat
write('entier à supprimer x='); readln(x);
until position(x,t,n)<>0;

end;

Page 5/5

Vous aimerez peut-être aussi