Esempio n. 1
0
int main()
{
  pile p1;
  initialisationPile(p1);
  unsigned int i;
  for (i=0;i<5;i++)
    {
      empile(p1,i);
    }

  pile p2;
  initialisationPile(p2,p1);

  for (i=0;i<5;i++)
    {
      empile(p1,2*i);
    }

  while(!testPileVide(p1))
    {
      std::printf("%d ",sommet(p1));
      depile(p1);
    }
  std::putchar('\n');

  affectationPile(p1,p2);

  while(!testPileVide(p2))
    {
      std::printf("%d ",sommet(p2));
      depile(p2);
    }
  std::putchar('\n');

  while(!testPileVide(p1))
    {
      std::printf("%d ",sommet(p1));
      depile(p1);
    }
  std::putchar('\n');
  testamentPile(p2);
  testamentPile(p1);
  return 0;
}
Esempio n. 2
0
void parcours_intExp(n_exp *n)
{
  int iRegistre = 0;
  
  char tmp[256]; 
  sprintf(tmp, "li $t%d, %d", iRegistre, n->u.entier);
  printMips(tmp);
  sprintf(tmp, "$t%d", iRegistre);
  empile(tmp);
}
Esempio n. 3
0
/* Effectue un tri rapide séquentiel */
void rapide_seq(bloc_t bloc_init) {
    pile p;
    int i, nb_blocs;
    bloc_t bloc;
    bloc_t blocs[2];

    init_pile(&p);
    empile(&p, bloc_init);

    /* Principe du tri rapide séquentiel :
     * tant qu’il y a des blocs à trier, dépile un bloc, le découpe en
     * (au maximum) deux sous-blocs non-encore triés et les empile */
    do {
        bloc = depile(&p);
        nb_blocs = rapide_decoupebloc(bloc, blocs);
        for (i = 0; i < nb_blocs; i++)
            empile(&p, blocs[i]);
    } while (!pile_vide(&p));
}
Esempio n. 4
0
void worker(Pile* p){
  TabNombres tn, gauche, droite;
  int pivot;
  depile(p, &tn);
  while(*(tn.tab)){
    partitionner(tn, &pivot);
    if(pivot > 1){
      gauche.tab = tn.tab;
      gauche.lng = pivot;
      empile(p, gauche);
    }if ( tn.lng - (pivot + 1) > 1 ){
      droite.tab = tn.tab + pivot + 1;
      droite.lng = tn.lng - (pivot + 1);
      empile(p, droite);
    }
    depile(p, &tn);
    
  }
  //sleep(2);
  
}
Esempio n. 5
0
/*-------------------------------------------------------------------------*/
void parcours_lireExp(n_exp *n)
{
  printMips("li $v0 5");
  printMips("syscall");

  int iRegistre = 0;
  char tmp[256];

  sprintf(tmp, "move $t%d, $v0", iRegistre);
  printMips(tmp);
  sprintf(tmp, "$t%d", iRegistre);
  empile(tmp);
}
Esempio n. 6
0
void parcours_varExp(n_exp *n)
{
  char var[256];
  char tmp[256];

  parcours_var(n->u.var, var);

  int iRegistre = 0;
  sprintf(tmp, "lw $t%d, %s", iRegistre, var);
  printMips(tmp);
  sprintf(tmp, "$t%d", iRegistre);
  empile(tmp);
}
Esempio n. 7
0
void triRapideFT(TabNombres tn){
  Pile p;
  initPile(&p);
  empile(&p, tn);
  pthread_t thd;
  printf("haha\n");
  int i;
  for(i = 0; i < NBWORKERS; i++){
    pthread_create(&thd, NULL, (void* (*)(void*))worker, (void*)&p);
  }

  //sleep(2);
  //stop = true;
  pthread_join(thd, NULL);
}
Esempio n. 8
0
void * wrapper(void *arg){
 
    arg_t * arg2 = arg;
    bloc_t bloc;
    bloc_t bret[2];
    int nb_bloc;
    int i;
        while(1){
            //on lock le mutex pour demarrer
            pthread_mutex_lock(&mutex1);
            
            // verif tri terminé, on debloque les threads bloqué + mutex
            if(pile_vide(&ma_pile) && arg2->compteur == 0){
                pthread_cond_broadcast(&cond);
                pthread_mutex_unlock(&mutex1);
                return NULL;
            }

            if(pile_vide(&ma_pile) && arg2->compteur > 0){
                //deverouille le mutex et attends que cond soit signalée
                pthread_cond_wait(&cond,&mutex1);
            }
            //si pile pas vide
            if(!pile_vide(&ma_pile)){
                arg2->compteur++;
                //on depile un bloc
                bloc = depile(&ma_pile);
                if(bloc.fin-bloc.debut > seuil_bloc_long){
                    //on le decoupe
                    nb_bloc = rapide_decoupebloc(bloc,bret);
                    //on empile les sous blocs
                    for(i = 0; i < nb_bloc; i++)
                        empile(&ma_pile,bret[i]);
                }
                else{
                    rapide_seq(bloc);
                }
                arg2->compteur--;
            }
            pthread_mutex_unlock(&mutex1);
        }
}
Esempio n. 9
0
/*-------------------------------------------------------------------------*/
void parcours_opExp(n_exp *n) 
{
  char tmp[256];

  int iRegistre = 0;
  int iRegistre2 = 1;
  int iRegistre3 = 2;
  

  if(n->u.opExp_.op == plus) {
    parcours_exp(n->u.opExp_.op1);
    parcours_exp(n->u.opExp_.op2);
    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);
    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);

    sprintf(tmp,"add $t%d, $t%d, $t%d",iRegistre, iRegistre2, iRegistre3);
    printMips(tmp);
  } else if(n->u.opExp_.op == moins){
    parcours_exp(n->u.opExp_.op1);
    parcours_exp(n->u.opExp_.op2);
    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);
    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);

    sprintf(tmp,"sub $t%d, $t%d, $t%d",iRegistre, iRegistre2, iRegistre3);
    printMips(tmp);
  } else if(n->u.opExp_.op == fois) {
    parcours_exp(n->u.opExp_.op1);
    parcours_exp(n->u.opExp_.op2);
    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);
    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);

    sprintf(tmp,"mult  $t%d, $t%d", iRegistre2, iRegistre3);
    printMips(tmp);
    sprintf(tmp,"mflo $t%d",iRegistre);
    printMips(tmp);
  } else if(n->u.opExp_.op == divise) {
    parcours_exp(n->u.opExp_.op1);
    parcours_exp(n->u.opExp_.op2);
    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);
    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);

    sprintf(tmp,"div  $t%d, $t%d", iRegistre2, iRegistre3);
    printMips(tmp);
    sprintf(tmp,"mflo $t%d",iRegistre);
    printMips(tmp);
  } else if(n->u.opExp_.op == egal){
    parcours_exp(n->u.opExp_.op1);
    parcours_exp(n->u.opExp_.op2);

    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);
    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);

    char etiquette[256];
    new_tag(etiquette);
    sprintf(tmp,"li $t%d, 1",iRegistre);
    printMips(tmp);
    sprintf(tmp,"beq $t%d, $t%d %s",iRegistre2, iRegistre3, etiquette);
    printMips(tmp);
    sprintf(tmp,"li $t%d, 0",iRegistre);
    printMips(tmp);
    sprintf(tmp,"%s:", etiquette);
    printMips(tmp);
  } else if(n->u.opExp_.op == diff) {
    parcours_exp(n->u.opExp_.op1);
    parcours_exp(n->u.opExp_.op2);
    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);
    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);

    char etiquette[256];
    new_tag(etiquette);
    sprintf(tmp,"li $t%d, 0",iRegistre);
    printMips(tmp);
    sprintf(tmp,"beq $t%d, $t%d %s",iRegistre2, iRegistre3, etiquette);
    printMips(tmp);
    sprintf(tmp,"li $t%d, 1",iRegistre);
    printMips(tmp);
    sprintf(tmp,"%s:", etiquette);
    printMips(tmp);
  }else if(n->u.opExp_.op == inf){
    parcours_exp(n->u.opExp_.op1);
    parcours_exp(n->u.opExp_.op2);
    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);
    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);
    char etiquette[256];
    new_tag(etiquette);
    sprintf(tmp,"li $t%d, 1",iRegistre);
    printMips(tmp);
    sprintf(tmp,"blt $t%d, $t%d %s",iRegistre2, iRegistre3, etiquette);
    printMips(tmp);
    sprintf(tmp,"li $t%d, 0",iRegistre);
    printMips(tmp);
    sprintf(tmp,"%s:", etiquette);
    printMips(tmp);
  }else if(n->u.opExp_.op == infeg){  
    parcours_exp(n->u.opExp_.op1);
    parcours_exp(n->u.opExp_.op2);
    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);
    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);

    char etiquette[256];
    new_tag(etiquette);
    sprintf(tmp,"li $t%d, 1",iRegistre);
    printMips(tmp);
    sprintf(tmp,"ble $t%d, $t%d %s",iRegistre2, iRegistre3, etiquette);
    printMips(tmp);
    sprintf(tmp,"li $t%d, 0",iRegistre);
    printMips(tmp);
    sprintf(tmp,"%s:", etiquette);
    printMips(tmp);
  }else if(n->u.opExp_.op == ou){
    char faux1[256]; 
    char faux2[256]; 
    char vrai[256];
    char empile[256];
    new_tag(faux1);
    new_tag(faux2);
    new_tag(vrai);
    new_tag(empile);
    
    parcours_exp(n->u.opExp_.op1);
    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);
    sprintf(tmp,"beq $zero, $t%d, %s",iRegistre2, faux1);
    printMips(tmp);
    sprintf(tmp,"j %s",vrai);
    printMips(tmp);
    sprintf(tmp,"%s :",faux1);
    printMips(tmp);
    
    parcours_exp(n->u.opExp_.op2);
    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);
    
    sprintf(tmp,"or $t%d, $zero, $t%d",iRegistre, iRegistre3);
    printMips(tmp);

    sprintf(tmp,"j %s",empile);
    printMips(tmp);
    sprintf(tmp, "%s :", vrai);
    printMips(tmp);
    sprintf(tmp,"move $t%d $t%d",iRegistre, iRegistre2);
    printMips(tmp);

    sprintf(tmp,"%s : ", empile);
    printMips(tmp);
  } else if(n->u.opExp_.op == et) {
    char fin[256];
    char faux[256];
    new_tag(fin);
    new_tag(faux);

    parcours_exp(n->u.opExp_.op1);
    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);

    sprintf(tmp,"beq $zero, $t%d, %s",iRegistre2,faux);
    printMips(tmp);

    sprintf(tmp, "$t%d", iRegistre2);
    empile(tmp);

    parcours_exp(n->u.opExp_.op2);
    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);

    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);

    sprintf(tmp,"beq $zero, $t%d, %s", iRegistre3, faux);
    printMips(tmp);

    
    sprintf(tmp,"and $t%d, $t%d, $t%d",iRegistre, iRegistre2, iRegistre3);
    printMips(tmp);

    sprintf(tmp,"j %s", fin);
    printMips(tmp);

    sprintf(tmp," %s :",faux);
    printMips(tmp);
    sprintf(tmp,"li $t%d 0",iRegistre);
    printMips(tmp);

    sprintf(tmp ," %s :",fin);

    printMips(tmp);

  } else if(n->u.opExp_.op == non) {
    parcours_exp(n->u.opExp_.op1);

    sprintf(tmp, "$t%d", iRegistre3);
    depile(tmp);

    sprintf(tmp,"not $t%d $t%d",iRegistre,iRegistre3);
    printMips(tmp);
  } else if(n->u.opExp_.op == cond) {
    char tmp[256];
    char faux[256];
    char empile[256];
    new_tag(faux);
    new_tag(empile);

    parcours_exp(n->u.opExp_.op1);

    sprintf(tmp, "$t%d", iRegistre2);
    depile(tmp);
    sprintf(tmp,"beq $t%d, $zero %s",iRegistre2, faux);
    printMips(tmp);

    parcours_exp(n->u.opExp_.op2);

    sprintf(tmp, "$t%d", iRegistre);
    depile(tmp);
    sprintf(tmp,"j %s", empile);
    printMips(tmp);

    sprintf(tmp, "%s :", faux);
    printMips(tmp);
    parcours_exp(n->u.opExp_.op3);
    sprintf(tmp, "$t%d", iRegistre);
    depile(tmp);

    sprintf(tmp, "%s :", empile);
    printMips(tmp);
  }  
  sprintf(tmp, "$t%d", iRegistre);
  empile(tmp);
}
Esempio n. 10
0
																/*****Programme principal*****/
int main()
{
	file f;
	pile p;

	p = malloc (sizeof(struct e_pile));		//Allocation de mémoire pour la pile
	f = malloc (sizeof(struct e_file));		//Allocation de mémoire pour la file

	init_pile(&p);		//Initialisation de p
	init_file(&f);		//Initialisation de f

															/*Manipulation des file*/
	printf("\nManipulation des files :\n\n");

		/**Insertion dans la file**/

	enfile(&f,5);		//Insertions de la valeur 5
	affiche_file (f);
	enfile(&f,4);		//Insertions de la valeur 4
	affiche_file (f);
	enfile(&f,3);		//Insertions de la valeur 3
	affiche_file (f);
	enfile(&f,2);		//Insertions de la valeur 2
	affiche_file (f);
	enfile(&f,1);		//Insertions de la valeur 1
	affiche_file (f);
	enfile(&f,0);		//Insertions de la valeur 0

		/**Partie suppression**/

	defile(&f);			//Suppressions dans la file
	affiche_file (f);
	defile(&f);			//Suppressions dans la file
	affiche_file (f);
	defile(&f);			//Suppressions dans la file
	affiche_file (f);
	defile(&f);			//Suppressions dans la file
	affiche_file (f);

		/**Réinsertion dans la file**/

	enfile(&f,6);		//Insertions de la valeur 6
	enfile(&f,7);		//Insertions de la valeur 7
	enfile(&f,8);		//Insertions de la valeur 8

	affiche_file (f);

															/*Manipulation des pile*/
	printf("\nManipulation des piles :\n\n");


	empile(&p,1);		//Insertions de la valeur 0
	affiche_pile(p);
	empile(&p,1);		//Insertions de la valeur 1
	affiche_pile(p);
	empile(&p,2);		//Insertions de la valeur 2
	affiche_pile(p);
	empile(&p,3);		//Insertions de la valeur 3
	affiche_pile(p);
	empile(&p,4);		//Insertions de la valeur 4
	affiche_pile(p);
	empile(&p,5);		//Insertions de la valeur 5
	affiche_pile(p);



	depile(&p);			//Suppressions dans la pile
	affiche_pile (p);
	depile(&p);			//Suppressions dans la pile
	affiche_pile (p);
	depile(&p);			//Suppressions dans la pile
	affiche_pile (p);
	depile(&p);			//Suppressions dans la pile
	affiche_pile (p);	



	free (f);			//Libération de mémoire pour la file f
	free (p);			//Libération de mémoire pour la pile p

	return 0;
}