static unsigned int ParcoursRecursif (Noeud_t arbre, FILE *mfile) { static unsigned int nodenumber; unsigned int fg, fd, node; node = ++nodenumber; if (EstVide(arbre)) { fprintf(mfile, "N%d [style=invis]\n", nodenumber); return nodenumber; } fprintf(mfile, "N%d [label=\"%d\"]\n", nodenumber, (int)ValeurDuNoeud(arbre)); fg = ParcoursRecursif(arbre->filsgauche, mfile); fd = ParcoursRecursif(arbre->filsdroit, mfile); if (!EstVide(arbre->filsgauche)) fprintf(mfile, "N%d -> N%d\n", node, fg); else fprintf(mfile, "N%d -> N%d [style=invis]\n", node, fg); if (!EstVide(arbre->filsdroit)) fprintf(mfile, "N%d -> N%d\n", node, fd); else fprintf(mfile, "N%d -> N%d [style=invis]\n", node, fd); return node; }
int EstFeuille(Noeud_t a) { if (EstVide(a)) { printf("Error: Le noeud est vide\n"); exit(ARBREVIDE); } return (EstVide(Descendre(a, 'g')) && EstVide(Descendre(a, 'd'))); }
void Inserer (unsigned int x, unsigned int p) { File tete = fileRequete; File nouveau = (File)malloc(sizeof(struct Req)); nouveau->requete = x; nouveau->imprimante = p; nouveau->suivant = NULL; if (!EstVide()) { while (tete->suivant!=NULL) { tete = tete->suivant; } tete->suivant = nouveau; } else { fileRequete = nouveau; } }
/* ajoute en fils droit au noeud premier argumentle noeud second argument. CU: le fils droit doit être vide Si il existe deja un noeud non vide a droite, produit une erreur. */ void AjouterFilsDroit(Noeud_t pere, Noeud_t fils) { if (!EstVide(pere->filsdroit)) { printf("Error: Il y a un fils droit\n"); exit(FILSEXISTANT); } AjouterAuNoeud(pere, fils, 'd'); }
/* ajoute en fils gauche au noeud premier argumentle noeud second argument. CU: le fils gauche doit être vide Si il existe deja un noeud non vide a gauche, produit une erreur */ void AjouterFilsGauche(Noeud_t pere, Noeud_t fils) { if (!EstVide(pere->filsgauche)) { printf("Error: Il y a un fils gauche\n"); exit(FILSEXISTANT); } AjouterAuNoeud(pere, fils, 'g'); }
int main() { unsigned int germe ; /* pour le generateur aleatoire */ unsigned int nb_evenements ; unsigned int ratio ; unsigned int x ; /* valeur aleatoire */ unsigned int i ; /* compteur d'evenements */ unsigned int r, s ; /* numeros de requete */ unsigned int p ; /* numero d'imprimante */ /* initialisation du generateur aleatoire */ printf (" germe : ") ; scanf ("%d", &germe) ; init_alea(germe, 99) ; /* valeurs aleatoires entre 0 et 99 */ /* lecture des parametres de la simulation */ printf("\n nombre d'evenements a generer : ") ; scanf("%d", &nb_evenements) ; printf("\n Pourcentage de \"Requete d'impression\" (entre 0 et 100) : ") ; scanf("%d", &ratio) ; printf("\n") ; /* simulation */ Initialiser() ; r = 0 ; for (i=0 ; i<nb_evenements ; i++) { x = suivant_alea() ; if (x+1>ratio) { if (! EstVide()) { p = suivant_alea() % P ; Extraire (&s, p) ; if (s!=-1) printf("traitement de la requete %d par l'imprimante %d\n", s, p) ; } else printf("\t file vide !\n") ; } else { if (! EstPlein()) { p = suivant_alea() % P ; printf("insertion de la requete %d pour l'imprimante %d\n", r, p) ; Inserer (r, p) ; r = r+1 ; } else printf("\t file pleine !\n") ; } ; } ; return 0 ; }
void FileAttente::Ajouter(Client clientAMettreEnFile) { ClientEnAttente* client = new ClientEnAttente(clientAMettreEnFile); if (EstVide()) premier_ = client; else { client->SetPrecedent(dernier_); dernier_->SetSuivant(client); } dernier_ = client; nbElements_++; }
int FileAttente::ObtenirNbPersonnes() { int nbPersonnes = 0; if (!EstVide()) { ClientEnAttente* client = premier_; while (client != 0) { nbPersonnes += client->GetNombrePersonnes(); client = client->GetSuivant(); } } return nbPersonnes; }
void Extraire (unsigned int *x, unsigned int p) { File tete = fileRequete; if (!EstVide()) { if (tete->imprimante==p) { *x=tete->requete; fileRequete=fileRequete->suivant; free(tete); } else { while (tete->suivant!=NULL && (tete->suivant->imprimante!=p)) { tete=tete->suivant; } if (tete->suivant!=NULL) { *x = tete->suivant->requete; File copie = tete->suivant; tete->suivant = tete->suivant->suivant; free(copie); } else { *x = -1; } } } else { *x = -1; } }
int main (void) { printf("Lancement du programme des tests du module liste \n"); printf("\n"); TListe l = CreerListe() ; if(EstVide(l)) printf("La liste nouvellement crée est bien vide \n"); else printf("La liste n'est pas vide\n"); AfficheListe(l); l=AjoutDebut(l, 3); printf("Element 3 ajouté \n"); AfficheListe(l); l=AjoutDebut(l, 5); printf("Element 5 ajouté \n"); AfficheListe(l); l=AjoutDebut(l, 1); printf("Element 1 ajouté \n"); AfficheListe(l); l=AjoutFin(l, 11); printf("Element 11 ajouté en fin de liste \n"); AfficheListe(l); l=AjoutFin(l, 14); printf("Element 11 ajouté en fin de liste \n"); AfficheListe(l); printf("Premier de la liste : %d\n",Premier(l)); printf("Premier(Vide) va provoquer une erreur\n"); printf("Premier de la liste : %d\n",Premier(CreerListe())); printf("Dernier de la liste : %d\n",Premier(l)); printf("Dernier(Vide) va provoquer une erreur\n"); printf("Dernier de la liste : %d\n",Premier(CreerListe())); /*l=SupprimerTete(l); printf("Element de tete supprimé\n"); AfficheListe(l);*/ /**************************************************/ /* A vous de completer pour tester les fonctions */ /* SupprimerFin */ /* NbOccurence */ /**************************************************/ return 0; }
bool bateauxNonCoulee(Joueur j) { /*Renvoie True s'il reste des bateaux en jeu au joueur.*/ return !EstVide(j->ensembleBat);//Méthode du type de la liste chainée }