Miles--Teg | Voilà), j'ai modifer la fonction qui ajoutais en fin, car c'est elle qui faisait merder le tout !!
Regarder maintenant ce que ca donne :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- struct file {
- int *tableau;
- int debut_file;
- int fin_file;
- int nb_elt_max;
- /* Pour savoir combien de fois on a ajouté et enlevé des éléments
- au tableau */
- int nb_suppr;
- int nb_aj;
- };
- typedef struct file File;
- /* On inclue ici le fichier contenant les entêtes des fonctions */
- #include "tp1.h"
- /* ************************************* */
- /* Déclaration des fonctions elles mêmes */
- /* ************************************* */
- int Init ( File *f , int n ) {
- f->tableau = (int *) malloc ( n*sizeof(int) );
-
- if ( f==NULL ) {
- fprintf(stderr,"\nErreur lors du malloc de l'initialisation du tableau !!\n" );
- return 0;
- }
- f->debut_file = 0;
- f->fin_file = -1;
- f->nb_elt_max = n;
-
- f->nb_suppr = 0;
- f->nb_aj = 0;
- return 1;
- }
- int Ajouter_en_fin ( File *f , int x ) {
- int n_max;
- int test;
- n_max = f->nb_elt_max;
- /* Teste si la file f est pleine */
- if ( (f->nb_aj - f->nb_suppr)>=n_max ) {
-
- /* File Pleine !! */
- printf("\nLa file est pleine !! Erreur NIVEAU 1\n" );
- return 0;
-
- /* ************** */
- /* faire malloc pour recreer une nouvelle file en recopiant
- l'ancienne */
-
- }
-
- /* ********************************************* */
- /* Si on est ici, c'est qu'on a une file où l'on */
- /* peut rajouter des éléments */
- /* ********************************************* */
-
- test = f->nb_aj % n_max;
- if ( f->nb_aj == 0 ) {
- /* On n'a jamais ajouté d'élément auparavant */
- f->tableau[0] = x;
- f->nb_aj++;
- f->fin_file++;
- return 1;
- }
- if (test != 0 ) {
- /* On a la position de dernier élément en position relative */
- /* càd que si % renvoie 1, la position absolue est 0 (1-1) */
- f->tableau[test] = x;
- f->nb_aj++;
- f->fin_file = test;
- return 1;
- }
- else {
-
- if ( f->nb_suppr == 0 ) {
- /* Ereur, la file est pleine !! */
- printf("\nLa file est pleine !! Erreur non détectée au début de la fonctin ajouter_en_fin !! Erreur NIVEAU 2\n" );
- return 0;
- }
- else {
- if ( test == f->debut_file ) {
- /* Ereur, la file est pleine !! */
- printf("\nLa file est pleine !! Erreur non détectée au début de la fonctin ajouter_en_fin !! Erreur NIVEAU 3\n" );
- return 0;
- }
- f->tableau[test] = x;
- f->nb_aj++;
- f->fin_file = test;
- return 1;
- }
- }
- }
- int Tete ( File f , int *nb ) {
- printf("\nf.tableau[f.debut_file]=: %d\n",f.tableau[f.debut_file]);
- if ( f.nb_aj == f.nb_suppr ) {
- /* La file est vide !!!! On ne peut pas récuperer l'elt de tete */
- printf("\nLa file est vide !!!! On ne peut pas récuperer l'elt de tete !!\n" );
- return 0;
- }
- else {
- *nb = f.tableau[f.debut_file];
- return 1;
- }
- }
- int Supprimer_tete ( File *f ) {
- int n_max;
- int test;
- n_max = f->nb_elt_max;
- /* Teste si la file f est vide */
- if ( Est_Vide ( f ) ) {
- printf("\nLa file est vide !! Je ne peut pas supprimer l'élément de tete !\n" );
- return 0; /* La file est déjà vide !! */
- }
- /* ********************************************* */
- /* Si on est ici, c'est qu'on a une file où l'on */
- /* peut supprimer au moins 1 éléments */
- /* ********************************************* */
-
- /* test aura la position relative du dernier élément */
- test = f->nb_aj % n_max;
- /* fonction pas finie !!! */
- return 1;
- }
- int Detruit ( File *f ) {
- return 0;
- }
- int Est_vide ( File *f ) {
- if ( f->nb_aj == f->nb_suppr )
- return 1; /* La file est bien vide !! */
- else
- return 0; /* La file n'est pas vide !! */
- }
- int main () {
- int n, nb, x, i;
- File f;
- nb = -1;
- printf("\nx=%d\n", nb);
- printf("\nOn va initialiser la file !!\n" );
- printf("\nOn Donne n=3 " );
- n=3;
- /* scanf("%d",&n);*/
- Init ( &f , n );
- printf("\nInitialisation terminée\n" );
- for (i=1 ; i<=n+1 ; i++ ) {
- printf("\nDonner x%d à ajouter : ",i);
- scanf("%d",&x);
- Ajouter_en_fin( &f , x );
- }
-
- printf("\non a mis dans la file : %d\n",f.tableau[f.fin_file]);
-
- i = Tete ( f , &nb );
- printf("\ni=%d", i);
- printf("\nnb=%d", nb);
- printf("\n" );
- /* system("PAUSE" );
- */
- return 0;
- }
|
Bon je sais c'est long !
Mais ca marche !!
Il me reste à faire la fonction qui me supprime le 1er elt de la file !
Et ca, ca va pas être de la tarte !!
Je suis en train de plancher dessus, et c'est chiant !!
Si y a des idées dans vos esprits, je suis preneur !!
Merci @+
Miles ---------------
Recherchez la liberté et devenez esclave de vos désirs. Recherchez la discipline et trouvez votre liberté.
|