4. Activité
On désire écrire un programme
RECHERCHE qui permet de vérifier
l’existence d’un entier P dans un
tableau T d’éléments positifs de N
entiers avec N dans l’intervalle [5..20]
7. 1
• Consulter les éléments de la liste
2
• les comparer un à un avec l’élément recherché, du debut jusqu’à
trouver l’élément ou arriver à la fin de la liste
3
• Ceci est réalisé à l’aide d’une structure itérative
8.
9.
10. Analyse du programme principale
Résultat=
si x=vrai alors
ecrire(p,' existe dans le tableau')
sinon
ecrire(p,' n''existe pas dans le tableau');
Finsi
Xfn existe(n,p,t)
Proc saisie(n,p,t);
Fin recherche
11. Algorithme de la fonction existe
0) Def fn existe (n,p: entier ; t :tab) : booleen
1) verif faux
i0
répéter
ii+1
si t[i]=p alors
verif vrai
Finsi
Jusqu’à (verif=vrai) ou (i=n)
2)existeverif
3) Fin exixte
12.
13.
14. program sequentielle ;
uses wincrt ;
type
tab = array [1..20] of integer ;
var
t : tab ;
n,p : integer ;
x : boolean ;
15. procedure saisie ( var n,p : integer ;var t :tab);
var
i : integer ;
begin
repeat
writeln('Saisir la taille du tableau :'); readln(n);
until n in [5..20];
for i:= 1 to n do
Begin
repeat
writeln('Saisir l''élement ',i); readln(t[i]);
until t[i] > 0 ;
end;
writeln('saisir un entier :'); readln(p);
end;
16. function existe (n,p: integer ; t :tab) : boolean ;
Var
i : integer ; verif : boolean ;
begin
verif := false ;
i:=0 ;
repeat
i:=i+1;
if t[i]=p then
verif:=true ;
until (verif=true ) or (i=n) ;
existe:=verif ;
end;
23. 1
• Comparer P avec l’élément du milieu du tableau.
2
• Si P< milieu alors chercher P dans la partie gauche. (tri
croissant)
• Si P> milieu alors chercher P dans la partie droite.
3
• Refaire le même travail jusqu’à trouver P ou bien
arriver à la fin du tableau.
27. Analyse du programme principal
Résultat=
si x=vrai alors
ecrire(p,' existe dans le tableau')
sinon
ecrire(p,' n''existe pas dans le tableau');
Finsi
Xfn existe(n,p,t)
Proc saisie(n,p,t);
Fin recherche
28. Algorithme de la fonction existe
0)def fn existe (n,e :entier ; t :tab) : boolean ;
1) x:=faux
bi:=1
bs:=n
repeter
mil(bi+bs) div 2
Si t[mil] = e alors x vrai
Sinon si t[mil] < e alors
bi mil+1
Sinon bs mil-1
finsi
finsi
jusqu’à (x= vrai) ou (bi >= bs)
2)existe x
3) Fin existe
29.
30.
31. program dichotomique ;
uses wincrt ;
type tab = array [1..20] of integer ;
var t : tab ; n,e,m : integer ; x : boolean ;
procedure saisie ( var n,e : integer ;var t :tab);
var i : integer ;
Begin
repeat
writeln('Saisir la taille du tableau :'); readln(n);
until n in [5..20];
for i:= 1 to n do
begin
Repeat
writeln('Saisir l''élement ',i); readln(t[i]);
until t[i] > 0 ;
end;
writeln('saisir un entier :'); readln(e);
end;
32. function existe (n,e : integer ; t :tab) : boolean ;
var i,bi,bs : integer ;
x : boolean ;
Begin
x:=false ; bi:=1 ; bs:=n ;
repeat
mil:=(bi+bs) div 2
if t[mil] = e then
x:=true
else if t[mil] < e then
bi:=n+1
else
bs:=n-1 ;
until (x=true) or (bi >= bs) ;
Existe:=x;
end;
Activité : On désire écrire un programme d’une fonction booléenne RECHERCHE qui permet de vérifier l’existence d’un entier P dans un tableau T de N entiers.Pour chercher l’élément P dans le tableau
La recherche séquentielle
La recherche dichotomique
On désire écrire un programme d’une fonction booléenne RECHERCHE qui permet de vérifier l’existence d’un entier P dans un tableau T de N entiers.
10mn
On désire écrire un programme d’une fonction booléenne RECHERCHE qui permet de vérifier l’existence d’un entier P dans un tableau T de N entiers.