Académique Documents
Professionnel Documents
Culture Documents
systemesdeproduction.blogspot.com 2009
• systemesdeproduction.blogspot.com
Introduction
1
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
Travail demandé
PROBLEM I
PROBLEM II
Percoler.
Tamiser.
Modif_Heap.
Maximum.
Eliminer_racine.
Ajout_noeud.
Faire_Heap.
Heapsort.
PROBLEM I
{
if(n<=1)
return n;
else
{
long int i;
long int u=0;
long int v=1;
long int w;
for(i=1;i<n;i++)
{
w=u+v;
u=v;
v=w;
}
return w;
}
}
3
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
int fib2(int n)
{
if(n<=1)
{
return n;
}
else
{
return fib2(n-1)+fib2(n-2);
}
}
4
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
void CTst1Dlg::OnButton1()
{
n=n+100;
}
n=1;
for(i=0;i<10;i++)
{
mtimer timer;
fib2(n);
c[i]= timer.elapsed_usec();
n=n+2;
}
txt= a[0];
txt1= a[1];
txt2= a[2];
txt3= a[3];
txt4= a[4];
txt5= a[5];
this->UpdateData(false);
this->Invalidate();
}
//trace
CString mess="iterative";
CPen p(PS_SOLID,5,RGB(60,255,60));
CPen p2(PS_SOLID,5,RGB(200,0,15));
CPen p3(PS_SOLID,5,RGB(200,0,200));
CPen p0(PS_SOLID,5,RGB(0,0,0));
dc.SelectObject(&p);
dc.TextOut(270,347,mess);
dc.MoveTo(230,350);
dc.LineTo(260,350);
mess="recursive terminale";
dc.SelectObject(&p2);
dc.TextOut(270,362,mess);
dc.MoveTo(230,365);
dc.LineTo(260,365);
mess="recursive ";
dc.SelectObject(&p3);
dc.TextOut(270,377,mess);
dc.MoveTo(230,380);
dc.LineTo(260,380);
6
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
dc.SelectObject(&p0);
mess="t(n)";
dc.TextOut(20,230,mess);
mess="(n)";
dc.TextOut(605,610,mess);
dc.MoveTo(30,250);
dc.LineTo(30,600);
dc.MoveTo(30,600);
dc.LineTo(600,600);
int n=3;
if (a[9]>0)
{
dc.SelectObject(&p);
dc.MoveTo(30,600);
for(int i=0;i<100;i++)
{
dc.LineTo((30+n)*2,600-(a[i])/10);
dc.MoveTo((30+n)*2,600-(a[i])/10);
n=n+2;
}
}
dc.SelectObject(&p2);
n=3;
if (b[9]>0)
{
dc.MoveTo(30,600);
for(int i=0;i<100;i++)
{
dc.LineTo((30+n)*2,600-b[i]/10);
dc.MoveTo((30+n)*2,600-b[i]/10);
n=n+2;
}
dc.SelectObject(&p3);
//fib2
n=10;
if (c[9]>0)
{
dc.MoveTo(30,600);
for(int i=0;i<10;i++)
{
dc.LineTo((30+n)*1,600-c[i]);
dc.MoveTo((30+n)*1,600-c[i]);
n=n+3;
}
7
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
}
}
CDialog::OnPaint();
}
}
Fib1 itérative
Fib2 récursive non
terminale
8
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
PROBLEM II
class Tableau{
protected:
int *Tab;
static int Max;
public:
int GetMax(){return Max;}
int SetMax(int max){this->Max=max;}
Tableau(int N);
// l’ensemble de ces
void remplire(void);
méthodes seront redéfinis
void generer(void);
dans la classe dérivée Heap
void afficher(void);
void insertsort(void);
void quick_sort(int,int);
void generation(int ) ;
};
int Tableau::Max=0;
class Heap: public Tableau{
public:
Heap(int );
void percoler(int);
void tamiser(int);
void faire_Heap();
void heap_sort(void) ;
void ajouter_noeud(int);
void suprimer_racine(void);
void modifier_noeud(int, int);
};
9
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
void Tableau::generer()
{ int nombre;
cout<<"donner la taille de votre tableau\n";
cin>>nombre;
SetMax(nombre);
for(int i=0;i<Max;i++)
{
Tab[i]=random(200);
}
}
void Tableau::generation(int nombre)
{ ;
SetMax(nombre);
for(int i=0;i<Max;i++)
{
Tab[i]=random(156);
}
}
Tableau::Tableau(int N){
Tab=new int[N];
//Max=9;
}
void Tableau::remplire() //(int n)
{int nombre;
cout<<"donner la taille de votre tableau\n";
cin>>nombre;
SetMax(nombre);
for (int i = 0 ; i <Max ; i++)
{
printf("Tab[%d] = ",i);
cin>>Tab[i];
}
10
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
void Tableau::insertsort()
{
int j,x;
for(int i=1;i<Max;i++)
{
x=Tab[i];
j=i-1;
while(j>=0 && x <Tab[j])
{
Tab[j+1]=Tab[j];
j=j-1;
}
Tab[j+1]=x;
}
}
11
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
quick_sort(pivot+1,r);
}
}
Heap::Heap(int N):Tableau(N)
{
}
void Heap::percoler(int i)
{
int h = i;
int j ;
do
{
j = h;
if ((j > 0) && (Tab[j / 2] <
Tab[h]))
{
h = j / 2;
int aux;
aux = Tab[j];
Tab[j] = Tab[h];
Tab[h] = aux;
}
}while ( j != h);
}
12
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
void Heap::tamiser(int i)
{
int j,z;
int k=i;
do
{
j=k;
if((2*j+1<Max) && (this-
>Tab[2*j+1]>this->Tab[k]))
{
k=2*j+1;
}
if(((2*j+2)<Max) && (this-
>Tab[2*j+2]>this->Tab[k]))
{
k=2*j+2;
}
z=this->Tab[j];
this->Tab[j]=this->Tab[k];
this->Tab[k]=z;
}
while(j!=k);
}
13
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
void Heap::suprimer_racine(void)
{
this-
>Tab[0]=this->Tab[Max--];
Max-- ;
this-
>tamiser(0);
Max++;
}
if(ancien>valeur)
tamiser(i);
else
this-
>percoler(i);
}
14
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
M_timer timer;
/* c’est une classe prédéfinie contenant des
méthodes qui permettent de calculer le temps
d’exécution d’un programme */
for(int i=0;i<=5;i++)
{
tab.generer(Y[i]);//génère un tableau avec les
valeurs prédéfinies de n
15
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
timer; //initialisation
du timer
tab.insertsort(0,Y[i]); // application de la méthode
de calcule de temps à la méthode insersort
a[i]=timer.elapsed_usec(); // méthode
prédéfinis qui retourne le temps d’exécution
}
this->Invalidate();// retourner les paramètres
nécessaires pour tracer la
courbe
Tri rapide
Tri
insertion
Tri
monceau
CONCLUSION
16
TP d’algorithmique/ 2008-
systemesdeproduction.blogspot.com 2009
17