Esempio n. 1
0
File: prog.c Progetto: dxs/EPFL
int main ( void )
{
  ELEMENT *tete = NULL,
          *elem;

  elem = liste_ajouter ( &tete );

  elem->produit_nb = 34;
  elem->prix       = 10.95;

  liste_afficher ( tete );  

  elem = liste_ajouter ( &tete );

  elem->produit_nb = 12;
  elem->prix       = 9.95;

  liste_afficher ( tete );

  /* Retire un a un les elements de la liste
     et les detruit: */
  vider_liste ( &tete );

  liste_afficher ( tete );

  return 0;
}
Esempio n. 2
0
int 
main( int nb_arg , char * tab_arg[] )
{     

  int cle_piste ;
  piste_t * piste = NULL ;

  int cle_liste ;
  /* liste_t * liste = NULL ; */
  liste_t liste;

  char marque ;

  booleen_t fini = FAUX ;
  piste_id_t deplacement = 0 ;
  piste_id_t depart = 0 ;
  piste_id_t arrivee = 0 ;

  
  cell_t cell_cheval ;


  elem_t elem_cheval ;



  /*-----*/

  if( nb_arg != 4 )
    {
      fprintf( stderr, "usage : %s <cle de piste> <cle de liste> <marque>\n" , tab_arg[0] );
      exit(-1);
    }
  
  if( sscanf( tab_arg[1] , "%d" , &cle_piste) != 1 )
    {
      fprintf( stderr, "%s : erreur , mauvaise cle de piste (%s)\n" , 
	       tab_arg[0]  , tab_arg[1] );
      exit(-2);
    }


  if( sscanf( tab_arg[2] , "%d" , &cle_liste) != 1 )
    {
      fprintf( stderr, "%s : erreur , mauvaise cle de liste (%s)\n" , 
	       tab_arg[0]  , tab_arg[2] );
      exit(-2);
    }

  if( sscanf( tab_arg[3] , "%c" , &marque) != 1 )
    {
      fprintf( stderr, "%s : erreur , mauvaise marque de cheval (%s)\n" , 
	       tab_arg[0]  , tab_arg[3] );
      exit(-2);
    }
     

  /* Init de l'attente */
  commun_initialiser_attentes() ;


  /* Init de la cellule du cheval pour faire la course */
  cell_pid_affecter( &cell_cheval  , getpid());
  cell_marque_affecter( &cell_cheval , marque );

  /* Init de l'element du cheval pour l'enregistrement */
  elem_cell_affecter(&elem_cheval , cell_cheval ) ;
  elem_etat_affecter(&elem_cheval , EN_COURSE ) ;

  /* 
   * Enregistrement du cheval dans la liste
   */
   	cell_pid_affecter( &cell_cheval , getpid() ) ;
	cell_marque_affecter( &cell_cheval , marque ) ;
    elem_cell_affecter( &elem_cheval , cell_cheval ) ;
    elem_etat_affecter( &elem_cheval , EN_COURSE ) ;
	liste_elem_ajouter( &liste, elem_cheval );
    printf("AFFICHAGE LISTE MAGGLE\n" );
	liste_afficher( &liste );
  

  while( ! fini )
    {
      /* Attente entre 2 coup de de */
      commun_attendre_tour() ;

	  /* Verification de letat du cheval  si EN_COURSE on avance sinon NON*/
      if(elem_etat_lire(elem_cheval) == EN_COURSE){   
      /*
       * Avancee sur la piste
       */

      /* Coup de de */
      deplacement = commun_coup_de_de() ;
#ifdef _DEBUG_
      printf(" Lancement du De --> %d\n", deplacement );
#endif

      arrivee = depart+deplacement ;

      if( arrivee > PISTE_LONGUEUR-1 )
	{
	  arrivee = PISTE_LONGUEUR-1 ;
	  fini = VRAI ;
	}

      if( depart != arrivee )
	{

	  /* 
	   * Si case d'arrivee occupee alors on decanille le cheval existant 
	   */
	   if(piste_cell_occupee( piste ,arrivee)){
	   
   	   liste_elem_decaniller(&liste, chevalExistant ) ;
	   }
		//printf(" Etat case d'arrivee %i", etatCase );


	       
	  /* 
	   * Deplacement: effacement case de depart, affectation case d'arrivee 
	   */

#ifdef _DEBUG_
	  printf("Deplacement du cheval \"%c\" de %d a %d\n",
		 marque, depart, arrivee );
#endif

	  
		}
	} 
      /* Affichage de la piste  */
      piste_afficher_lig( piste );
     
      depart = arrivee ;
    }

  printf( "Le cheval \"%c\" A FRANCHIT LA LIGNE D ARRIVEE\n" , marque );

 
     
  /* 
   * Suppression du cheval de la liste 
   */

  
  exit(0);
}