Ejemplo n.º 1
0
void rendreJustice(){
    printf("\x1B[32m[Arthur] : je rends la justice !\n");
    sem_wait(&justiceRendue);
    defiler(attenteJugement);
    sleep(rand()%2);
    defiler(attenteJugement);
    sleep(rand()%2);
    defiler(attenteJugement);
    sleep(rand()%2);
    printf("\x1B[32m[Arthur] : la justice est rendue!\n");
    sem_post(&justiceRendue);
}
Ejemplo n.º 2
0
int main()
{
    File *file = malloc(sizeof(*file));
    enfiler(file, 4);
    enfiler(file, 8);
    enfiler(file, 15);
    enfiler(file, 16);
    enfiler(file, 23);
    enfiler(file, 42);
    afficherFile(file);
    printf("\nJe defile %d\n", defiler(file));
    printf("\nJe defile %d\n", defiler(file));
    afficherFile(file);
    return 0;
}
Ejemplo n.º 3
0
void
detruireFile (File ** f)
{
  while (*f != NULL)
    {
      defiler (f);
    }
}
Ejemplo n.º 4
0
int main(int argc, char *argv[])
{
	
	file * f1 = creer_file();

	printf("Création file 1\n");
	afficher_file(f1);

	enfiler(f1, 50);
	enfiler(f1, 25);
	enfiler(f1, 2);
	enfiler(f1, 7);

	printf("Affichage file 1\n");
	afficher_file(f1);

	printf("Défile file 1\n");
	defiler(f1);

	afficher_file(f1);

	enfiler(f1, 7);
	printf("Enfile file 1\n");
	afficher_file(f1);

	file * f2 = creer_file();

	enfiler(f2, 3);
	enfiler(f2, 4);
	enfiler(f2, 5);

	printf("Création file 2\n");
	afficher_file(f2);

	printf("Concaténation file 1 et 2\n");
	concatener_files(f1, f2);

	afficher_file(f1);
	defiler(f1);
	defiler(f1);
	defiler(f1);
	defiler(f1);
	defiler(f1);
	defiler(f1);

	printf("Défiler file 1\n");
	afficher_file(f1);

	printf("File 1 est vide : ");
	printf("%d\n", file_estVide(f2));

	destruction(f2);

	destruction(f1);

	return 0;
}
Ejemplo n.º 5
0
int main(void)
{
	File *myFile = initialiser();

	remplirFile(myFile, 4);
	remplirFile(myFile, 8);
	remplirFile(myFile, 15);
	remplirFile(myFile, 16);
	remplirFile(myFile, 32);
	remplirFile(myFile, 42);

	afficherFile(myFile);

	defiler(myFile);
	defiler(myFile);

	afficherFile(myFile);

	return 0;
}
Ejemplo n.º 6
0
void file_detruire ( file * f )
{
	if ( NULL == f )
		return;
	
	while( !file_vide(f) )
		defiler(f);

	free( ( *(File**)f ) );
	free( f );
}
Ejemplo n.º 7
0
int bicolore(graphe g){
	char* coule = (char*)calloc(g.nbsom,sizeof(char*));
	file* liste = creer_file();

	int ori, nbSommet=0,courant,nbS=g.nbsom,i,j;
	ori =0;

	for(i=0;i<nbS;i++){
		coule[i]='N';
	}

	enfiler(liste,ori);
	nbSommet++;
	coule[ori] ='B';

	while(nbSommet<nbS){
		while(!(file_estVide(liste))){
			courant = defiler(liste);
			printf("Sommet %d, couleur : %c\n", courant, coule[courant]);
			for(i=0;i<nbS;i++){
				if(g.matrice[courant][i]==1){
					if(coule[i]!=coule[courant]){
						if(coule[i]=='N'){
							if(coule[courant]=='B'){
								coule[i]='J';
							}else{
								coule[i]='B';
							}
							enfiler(liste,i);
							nbSommet++;
						}
					}else{
						return 0;
					}
				}
			}
			coule[courant]=2;
		}
		if(nbSommet!=nbS){
			while(coule[j]!=0){
				j++;
			}
			enfiler(liste,j);
			nbSommet++;
			coule[j]='B';
		}

	}

	free(coule);
	free(liste);
	return 1;
}
Ejemplo n.º 8
0
int pLargeur(graphe g){

	int nbS=g.nbsom, i,ori=0, nbSommet, courant, nscc, booleen =1, ncc=0,j=0;
	file* liste = creer_file();
	int* coule= (int*)calloc(nbS,sizeof(int*));


	ori =0;

	enfiler(liste,ori);
	nbSommet = 0;
	nbSommet++;
	coule[ori] =1;

	while(nbSommet<nbS){
		ncc++;
		nscc=0;
		while(!(file_estVide(liste))){
			courant = defiler(liste);
			printf("Sommet %d\n", courant);
			for(i=0;i<nbS;i++){
				if(g.matrice[courant][i]==1){
					if(coule[i]==0){
						coule[i]=1;
						enfiler(liste,i);
						nbSommet++;
					}
				}
			}
			coule[courant]=2;
			nscc++;
		}
		printf("La %deme composante connexe contient %d sommet(s). Nous avons actuellement %d/%d sommets\n",ncc, nscc, nbSommet,nbS);
		if(nscc != nbS){
			booleen = 0;
			if(nbSommet!=nbS){
				while(coule[j]!=0){
					j++;
				}
				enfiler(liste,j);
				nbSommet++;
			}
			if(nbS == nbSommet){
				printf("La %deme composante connexe contient %d sommet(s). Nous avons actuellement %d/%d sommets\n",ncc+1, 1, nbSommet,nbS);
			}
		}
	}


	free(coule);
	free(liste);
	return booleen;
}
Ejemplo n.º 9
0
Archivo: ABR_TP.c Proyecto: Binoui/TP_C
/* Affiche l'arbre en largeur */
void parcours_largeur(NOEUD * rac)
{
    file * f = creer_file();
    enfiler(f, rac);
        
    NOEUD * p;
    while (! file_estVide(f))
    {
        p = defiler(f);
        printf("%d ", p->valeur);
        if (p->gauche) enfiler(f, p->gauche);
        if (p->droit) enfiler(f, p->droit);
    }
    printf("\n");
}
Ejemplo n.º 10
0
Archivo: lifo.c Proyecto: vlnk/isima
void inversion_pile(lifo_t * p)
{
    /*variables locales*/
    fifo_t *        f = NULL;   /*file*/
    type_t          tmp;        /*valeurs a afficher*/
    int             err;        /*erreur*/

    /*initialisation*/
    f = (fifo_t *)malloc(sizeof(fifo_t));
    err = init_fifo(f,p->t_max);

    if (! err)
    {
        printf("Pile a inverser :\n");
        afficher_lifo(p);

        /*parcours de la pile*/
        while (!lifo_vide(p))
        {
            tmp = depiler(p);   /*passage des valeurs*/
            enfiler(f,tmp);
        }

        printf("Etat de la file :\n");
        afficher_fifo(f);

        while (! fifo_vide(f))
        {
            tmp = defiler(f);   /*passage des valeurs*/
            empiler(p,tmp);
        }

        /*liberation de la file*/
        free_fifo(f);
    }

    printf("Pile inversee :\n");
    afficher_lifo(p);
}
Ejemplo n.º 11
0
Arbre algo_arbreACM(File fileACM, Sommet * tab_sommet, int num_depart)
{

	Arbre arbreACM = NULL;
	Arc* ptr_arc = NULL;

	arbreACM = malloc(sizeof(*arbreACM));

	if (arbreACM == NULL)
		return NULL;

	arbreACM->sommet = &tab_sommet[num_depart];
	tab_sommet[num_depart].noeudArbreACM = arbreACM;


	while (!est_vide_file(fileACM)) {
		ptr_arc = (Arc *) defiler(&fileACM);
		ajouter_arbre(ptr_arc, tab_sommet);
	}

	return arbreACM;
}
Ejemplo n.º 12
0
void completer(ACListe acListe){
	initFile();
	
	int i, suppleant; 
	List l = acListe->trie->transition[0];
	List tmp = NULL;
	
	// Creation d'une liste qui contient toute l'alphabet avec un target qui egale à 0
	List tmpListTransition0 = NULL ;
	for(i = 0; i < alphabet ; i++){
		addListeNode(&tmpListTransition0, (char) i, 0);
	}
	
	while(l != NULL){
		enfiler(l->targetNode);
		acListe->suppleant[l->targetNode] = 0;
		tmp = findNodeByLettre( l, l->letter);
		tmp->targetNode = l->targetNode;
		l = l->next;
	}
	
	l = tmpListTransition0;
	
	while(!isEmpty()){
		int r = defiler();
		l = acListe->trie->transition[r];
		while(l != NULL){
			enfiler(l->targetNode);
			suppleant = acListe->suppleant[r];
			while(findNodeByLettre(acListe->trie->transition[suppleant], l->letter) == NULL){
				suppleant = acListe->suppleant[suppleant];
			}
			acListe->suppleant[l->targetNode] = findNodeByLettre(acListe->trie->transition[suppleant], l->letter)->targetNode;
			acListe->trie->finite[l->targetNode] +=  acListe->trie->finite[acListe->suppleant[l->targetNode]];
			l = l->next;
		}
	}
}
Ejemplo n.º 13
0
void parcourirTouteau(s_grille* g, int x,int y)
{
    liste_element *file = (liste_element*)malloc(sizeof(liste_element));// liste finale des noeuds de la file d'attente
    element *s = (element*)malloc(sizeof(element));
    element *ps = (element*)malloc(sizeof(element));
    element*p = (element*)malloc(sizeof(element)); // noeuds du chemin
    int i,j;
    int ii,jj;
    int compteur=500;/// LIMITE pour le dessalement

    ps=&g->elem[x][y];

    //on met toutes les marques à zero
    for(i=0; i<L; i++)
    {
        for(j=0; j<H; j++)
        {
            if(g->elem[i][j].etatsssol==1)
                g->elem[i][j].marque_eau=0;
        }
    }

    //  on alloue la liste, on enfile le premier noeud dans la liste
    file->queue=file->tete=NULL;
    file->taille=0;
//    enfiler(g,file, ps);
////////////////////////////////////////////////////////////////////////////////////////////
    element* nouveau=(element*)malloc(sizeof(element));
    nouveau->next=NULL;
    nouveau->i=ps->i;
    nouveau->j=ps->j;

    if (file->taille==0)
        file->tete = file->queue = nouveau ;
    else
    {
        file->queue->next = nouveau ;
        file->queue = nouveau ;
    }
    file->taille++ ;
    /////////////////////////////////////////////////////////////////////////////////////////////
    // si le noeud de départ ps n'a pas de voisin, retourner la liste qui ne contient que ce noeud
    /* if (g->[ps->i][ps->j]==NULL)
       return ;
    */
    // marquer le noeud de départ ps
    g->elem[ps->i][ps->j].marque_eau = 1;
    g->elem[ps->i][ps->j].alimeau= 1;//on dit que la canalisation est alimentée en eau

    // tant que la file d'attente n'est pas vide et que le noeud out n'est pas atteint
    while (!estVide(file) && compteur>0)
    {
//printf("passage\n");
        s = defiler(file); // défiler le premier noeud de la liste
        // printf("defiler: %d::%d\n",s->i,s->j);
        //  si le noeud défilé arrive au noeud de sortie out (s'il existe), on sort
//printf("taille:%d\n",g->file_elemeau[s->i][s->j].taille);
        // le noeud défilé n'est pas out, enfiler ses voisins non marqués
        if (&g->elem[s->i][s->j] != NULL && (g->file_elemeau[s->i][s->j].taille!=0))
        {
            //printf("passage\n");

            for(p = g->file_elemeau[s->i][s->j].tete ; p != NULL  ; p = p->next)
            {
                if (g->elem[p->i][p->j].marque_eau==0)
                {
                    // printf("coucou%d::%d",p->i,p->j);
////////////////////////////////////////////////////////////////////////////////////////////////////////
                    element* nouveau=(element*)malloc(sizeof(element));
                    nouveau->next=NULL;
                    nouveau->i=p->i;
                    nouveau->j=p->j;

                    if (file->taille==0)
                        file->tete = file->queue = nouveau ;
                    else
                    {
                        file->queue->next = nouveau ;
                        file->queue = nouveau ;
                    }
                    file->taille++ ; // empiler le noeud voisin dans la liste
/////////////////////////////////////////////////////////////////////////////////////////////////
                    ///VERIFICATION DES MAISONS AUX ALENTOURS DE LA CASE D'EAU
                    if(compteur>0)
                     {
                        int temp=0;
                        for(ii=-5; ii<6; ii++)
                        {
                            for(jj=-temp; jj<temp+1; jj++)
                            {
                                if((g->elem[p->i+jj][p->j+ii].etatsol==3)&&(p->i+jj<L)&&(p->j+ii<H)&&(p->i+jj>0)&&(p->j+ii>0)&&(g->elem[p->i+jj][p->j+ii].alimeau==0))
                                {
                                    g->elem[p->i+jj][p->j+ii].alimeau=1;
                                    compteur=compteur-g->elem[p->i+jj][p->j+ii].habitant; /// On décrémente le compteur
                                    printf("alim_maison eau");
                                }
                            }
                            if(ii<0) temp++;
                            else temp--;



                        }
                    }

                      /*  for(ii=0; ii<5; ii++)
                        {

                            if((g->elem[p->i+ii][p->j].etatsol==3)&&(p->i+ii<40)&&(g->elem[p->i+ii][p->j].alimeau==0))//3 conditions : La case est une maison, blindage i
                            {
                                printf("alim_maison");
                                //Et la maison n'est pas encore alimentée
                                g->elem[p->i+ii][p->j].alimeau=1;/// La maison est connectée à la canalisation
                                compteur=compteur-g->elem[p->i+ii][p->j].habitant; /// On décrémente le compteur


                            }
                            if((g->elem[p->i-ii][p->j].etatsol==3)&&(i-ii>0)&&(g->elem[p->i-ii][p->j].alimeau==0))
                            {
                                printf("alim_maison");
                                g->elem[p->i-ii][p->j].alimeau=1;
                                compteur=compteur-g->elem[p->i-ii][p->j].habitant; /// On décrémente le compteur


                            }
                            if((g->elem[p->i][p->j-ii].etatsol==3)&&(p->j-ii>0)&&(g->elem[p->i][p->j-ii].alimeau==0))
                            {
                                printf("alim_maison");
                                g->elem[p->i][p->j-ii].alimeau=1;
                                compteur=compteur-g->elem[p->i][p->j-ii].habitant; /// On décrémente le compteur


                            }
                            if((g->elem[p->i][p->j+ii].etatsol==3)&&(p->j+ii<40)&&(g->elem[p->i][p->j+ii].alimeau==0))
                            {
                                printf("alim_maison");
                                g->elem[p->i][p->j+ii].alimeau=1;
                                compteur=compteur-g->elem[p->i][p->j+ii].habitant; /// On décrémente le compteur


                            }


                        }*/


                        /// FIN de vérification des maisons autour de la case

                    g->elem[p->i][p->j].marque_eau = 1; // marquer le noeud du noeud voisin

                    g->elem[p->i][p->j].alimeau= 1;//on dit que la canalisation est alimentée en eau

                }
                // printf("coucou\n");
// soprintf("voisinsuiv:%d::%d\n",p->next->i,p->next->j);

            }
        }



    }


}
Ejemplo n.º 14
0
file * trier_monotonie (file * fileSource)
{
  unsigned i        = 0,
      nbMono        = 1,  /* on aura toujours au moins une monotonie */
      nbMonotonies  = 1;  /*  */
  int    comp;
  int *nbelem1,
      *nbelem2;
  file  *f1         = (file *) malloc( sizeof( file* ) ),
        *f2         = (file *) malloc( sizeof( file* ) );

  file_creer(f1, &string_copier, &string_liberer);
  file_creer(f2, &string_copier, &string_liberer);

  /* compte le nb de monotonies */
  while ( i < file_taille( fileSource )-1 )
  {
      comp = string_file_comparer_elements( fileSource, fileSource, (unsigned)i, (unsigned)i+1, &strcmp ); 
      if ( comp > 0 )
      {
        nbMono++;
      }
      i++;
  }

  if (nbMono == 1)
  {
    return fileSource;
  }

  if ( nbMono % 2 )
  {
    nbelem1 = malloc( (( nbMono / 2 ) + 1) * sizeof( int ) );
    nbelem2 = malloc( (( nbMono / 2 ) + 1) * sizeof( int ) );
  }
  else
  {
    nbelem1 = malloc( ( nbMono / 2 ) * sizeof( int ) );
    nbelem2 = malloc( ( nbMono / 2 ) * sizeof( int ) );
  }

  do /* Processus de tri */
  {
    i             = 0;
    while( i < nbMono - 1 )
    {
      nbelem1[i] = 0;
      nbelem2[i] = 0;
      i++;
    }
    nbMono        = 1;
    nbMonotonies  = 1;

    do /* Séparation en deux files */   
    {  
      comp = string_file_comparer_elements( fileSource, fileSource, (unsigned)0, (unsigned)1, &strcmp ); 

      if ( nbMono % 2 )
      {
        enfiler( f2, tete( fileSource ) );
        nbelem2[nbMonotonies-1]++;
        defiler( fileSource );
      }
      else
      {
        enfiler( f1, tete( fileSource ) );
        nbelem1[nbMonotonies-1]++;
        defiler( fileSource );
      }

      if ( comp > 0 )
      {
        nbMono++;
        if ( nbMono % 2 )
          nbMonotonies++;
      }      
    } while ( file_taille( fileSource ) > 1 );

    if ( nbMono % 2 )
    {
      enfiler( f2, tete( fileSource ) );
      nbelem2[nbMonotonies-1]++;
      defiler( fileSource );
    }
    else
    {
      enfiler( f1, tete( fileSource ) );
      nbelem1[nbMonotonies-1]++;
      defiler( fileSource );
    }

    nbMono = 0;
    if (nbMonotonies != 1)
    {
      while( !file_vide( f1 ) || !file_vide( f2 )  )                  /* tant qu'il existe des elements dans une des deux files... */
      {
        if( ! nbelem1[nbMono] && ! nbelem2[nbMono] )    /* Si les deux files sont vides */
        {
          nbMono++;                                                 /* passe a la monotonie suivante */
        }
        else                                                            /* sinon */
        {
          if ( !nbelem1[nbMono] )                                 /* si la monotonie actuelle dans f1 est vide et l'autre dans f2 contient des elements */
          {
            enfiler( fileSource, tete( f2 ) );
            defiler( f2 );
            nbelem2[nbMono]--;
          }
          else if ( !nbelem2[nbMono] )                            /* sinon si la monotonie actuelle dans f2 est vide et l'autre dans f1 contient des elements */
          {
            enfiler( fileSource, tete( f1 ) );
            defiler( f1 );
            nbelem1[nbMono]--;
          }
          else                                                            /* sinon les deux monotonies contiennent des elements : on peut donc les comparer */
          {
            comp = string_file_comparer_elements( f1, f2, (unsigned)0, (unsigned)0, &strcmp ) ; 
            if ( comp <= 0 )
            {
              enfiler( fileSource, tete( f1 ) );
              defiler( f1 );
              nbelem1[nbMono]--;
            }
            else
            {
              enfiler( fileSource, tete( f2 ) );
              defiler( f2 );
              nbelem2[nbMono]--;
            }
          }
        }
      }
    }
    else  /* On a fini : */
    {
      while( !file_vide( f1 ) || !file_vide( f2 ) )             /* Tant que f1 et f2 ne sont pas vide */
      {
        /* on insere la plus petite valeur */
        if ( !nbelem1[nbMonotonies-1] )                                 /* si la monotonie actuelle dans f1 est vide et l'autre dans f2 contient des elements */
        {
          enfiler( fileSource, tete( f2 ) );
          defiler( f2 );
          nbelem2[nbMonotonies-1]--;
        }
        else if ( !nbelem2[nbMonotonies-1] )                            /* sinon si la monotonie actuelle dans f2 est vide et l'autre dans f1 contient des elements */
        {
          enfiler( fileSource, tete( f1 ) );
          defiler( f1 );
          nbelem1[nbMonotonies-1]--;
        }        
        else
        {
          comp = string_file_comparer_elements( f1, f2, (unsigned)0, (unsigned)0, &strcmp ) ;           
          if ( comp <= 0 )
          {
            enfiler( fileSource, tete( f1 ) );
            defiler( f1 );
            nbelem1[nbMonotonies-1]--;
          }
          else
          {
            enfiler( fileSource, tete( f2 ) );
            defiler( f2 );
            nbelem2[nbMonotonies-1]--;
          }  
        }      
      }
    }

    /* compte le nb de monotonies */
    i = 0;
    nbMono = 1;
    while ( i < file_taille( fileSource ) - 1 )
    {
        comp = string_file_comparer_elements( fileSource, fileSource, (unsigned)i, (unsigned)i+1, &strcmp ); 
        if ( comp > 0 )
        {
          nbMono++;
        }
        i++;
    }

  } while (nbMono != 1);

  free(nbelem1);
  free(nbelem2);

  return fileSource;
}
Ejemplo n.º 15
0
void destruction(file * f)
{
	while (defiler(f) >= 0);
	free(f);
}