jenny42 | Salut Je doit faire un programme en php sur les tas. Je l'ai déjà en c++ mais j'ai quelque difficulté à le passer en php.
Y aurait t il quelqu'un pour m'aider?
Ci-dessous le programme en c++ :
Code :
- #include <stdlib.h>
- #include <stdio.h>
- #include "tas.h"
- Bool inf(int i, int j)
- {
- return ((i<j) ? vrai : faux) ;
- }
- Bool Tas::comparaison(int i, int j)
- {
- if (eval==NULL)
- {
- return compare(tableau[i],tableau[j]) ;}
- return compare(eval[tableau[i]],eval[tableau[j]]);
- }
- void Tas::echange(int i, int j)
- {
- if (i<taille_max && j<taille_max)
- {
- int temp = tableau[i] ;
- tableau[i]=tableau[j] ;
- tableau[j] = temp ;
- if (flag)
- {
- inverse[tableau[i]]=i ;
- inverse[tableau[j]]=j ;
- }
- }
- }
- void Tas::descend(int i)
- {
- int fils = 2*i + 1 ;
- fils = ((fils<taille-1 && comparaison(fils+1,fils) ? fils+1 : fils)) ;
- if (fils<taille && comparaison(fils,i))
- {
- echange(i, fils) ;
- descend(fils) ;
- }
- }
- void Tas::remonte(int i)
- {
- if (i>0 && comparaison(i,(i-1)/2))
- {
- echange (i,(i-1)/2) ;
- remonte ((i-1)/2) ;
- }
- }
- Tas::Tas(int n)
- {
- taille = taille_max = n ;
- tableau = new int [n] ;
- compare = (fptr) inf ;
- flag = faux ;
- inverse = NULL ;
- }
- Tas::Tas(int * ptr , int n, fptr comp, int * ptr2, Bool f)
- {
- taille = taille_max = n ;
- flag = f ;
- if (ptr!=NULL)
- {
- tableau = ptr ;
- eval = ptr2 ;
- if(comp!=NULL)
- compare = comp ;
- else
- compare = (fptr) inf ;
- if (flag)
- {
- inverse = new int [taille] ;
- for(int i=0 ; i<taille ; i++)
- {
- if (tableau[i]>taille-1)
- {
- fprintf(stderr,"Tas non inversible" ) ;
- flag = faux ;
- break ;
- }
- inverse[tableau[i]]=i ;
- }
- }
- }
- else {
- taille = 0 ;
- tableau = NULL ;
- compare = NULL ;
- eval = NULL ;
- inverse = NULL ;
- flag = faux ;
- }
- }
- Tas::~Tas()
- {
- if (flag)
- delete [] inverse ;
- }
- int Tas::GetTaille()
- {
- return taille ;
- }
- void Tas::SetTaille (int offset)
- {
- taille+=offset ;
- }
- int Tas::ExtrMinimum()
- {
- if (taille==0)
- {
- fprintf(stderr,"Tas Vide" ) ;
- exit(1) ;
- }
- int mini = tableau[0] ;
- echange(0, taille-1) ;
- SetTaille(-1) ;
- descend(0) ;
- return mini ;
- }
- void Tas::Percolation(int i)
- {
- remonte(i) ;
- }
- int Tas::Inverse(int i)
- {
- if (flag)
- return (inverse[i]) ;
- fprintf(stderr,"Tas non inversible !" ) ;
- return 0 ;
- }
- void Tas::Tri()
- {
- if (taille==0)
- {
- fprintf(stderr,"Tas Vide" ) ;
- exit(1) ;
- }
- for (int i=(taille/2 - 1); i>-1 ; i--)
- descend(i) ;
- }
|
|