Aide en C

samar27 Messages postés 1 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 30 janvier 2008 - 30 janv. 2008 à 14:24
helorem Messages postés 49 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 3 février 2008 - 30 janv. 2008 à 15:37
bonjours .
j'ai besoin d'aide en c
j'ai un programme conçu en c et il contient boucoups d'erreurs et il manque des truc que je ne sais pas faire.
si vous voulais bien  m'aider, merci d'avance
voici le code:
Fichier : GesResAvion.h
*/

#ifndef GRA_H
#define GRA_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*definition d'une Liste des vols*/
typedef struct avion {
          int Num;
          char Typ;
        int Max;
        char depart[20];
        char arrivee[20];
        char hdepart[6];
        char Harrivee[6];
        struct passager *PS;
        int NR;
        struct passager *PF;
          struct vol *prec;//pointeur sur précédent
        struct vol *suiv;//pointeur sur suivant
}vol;
/*definition d'un ptr liste de vol*/
typedef vol* vol_t;

/*definition d'une liste de passagers*/

typedef struct pass{
          int NPass;
        char NomP[20];
        int NumP;
        struct passager *prec;//pointeur sur précedent
          struct passager *suiv;//pointeur sur suivant
}passager;

typedef struct arbre{
        struct passager *celpas;
          struct arbre *gauche;
        struct arbre *droit;
}arbre;

/*-----------------------
Fonctions utilisees
-----------------------*/
/*--------------------- PArtie I--------------------------*/

/*
Prend en paramètre les données du passager et alloue la place en mémoire en initialisant
Renvoi: adresse de la Cellule passager
*/
struct passager *creer_passager(int NPass,char NomP[20],int NumP, ListVol L, int Num);

/*
Prend en paramètre l'adresse d'une Cellule passager
Renvoi: envoi sur stdout des informations de passager
*/
void affiche_passager(passager *CP);

/*
Insère la Cellule PC en tête de la Liste LP
Renvoi: na
*/
void insere_tete_passager(passager* LP, passager *PC);
/*
Recherche le nom NomPas dans la Liste de passagers
Renvoi:  adresse de la cellule ou NULL
*/
passager* rechercher_passager( passager *LP, char* NomPas);
/*
supprime la cellule PC de la liste de passagers LP
Renvoi:  na
*/
void supprime_passager( passager *PC, passager *LP);

/*
Vide la liste passagers
Renvoi: libere espace alloué pour la liste des passagers
*/
void vider_passager(passager *LP);

/*--------------------- PArtie II--------------------------*/
/*
enfile une cellule dans la liste passagers
Renvoi: na
*/
void enfiler(passager *LP, passager *CP);
/*defile une cellule de la liste passagers
Renvoi: na
*/
passager* defiler(passager *LP, passager *CP);

vol *creer_vol(void);
vol* recherche_vol_num(vol* LV, int NumVol);
void inserer_vol(vol *LV, vol *CV);
void vider_vol(vol *LV);

/*--------------------- PArtie III--------------------------*/

int recherche_vol(vol *LV, char depart[20],char arrivee[20]);
void ajout_vol_passager(vol *CV);
void annule_reservation(vol *LV,char NomP[20],int numvol);

/*--------------partie IV--------------------------*/

arbre* creer_noeud(void);
void inserer_noeud( arbre* arbre_rech , passager* CP );
void construit(arbre* arbre_rech , passager* CP);
vol* reconstruire(arbre* arbre_rech , passager* CP);

#endif

/*
Fichier : GesResAvion.c
*/

#include "GesResAvion.h"

void viderBuffer() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
    return;
}

/*
Prend en paramètre les données du passager et alloue la place en mémoire en initialisant
Renvoi: adresse de la Cellule passager
*/
passager *creer_passager(){
int NPass;
char NomP[20];
int NumP;

        passager *C = (passager *) malloc(sizeof(passager));
    if(C==NULL) {//allocation de la memoire impossible
            fprintf(stderr,"Plus de mémoire!\n");
        return NULL;
    } else {
         fprintf(stdout,"Veuillez entrer le Numero du passeport : \n");
         fscanf(stdin,"\n%d", NPass);
         viderBuffer(); //On vide le buffer
         C->NPass = NPass;
             
         fprintf(stdout,"Veuillez entrer le nom du passager : \n");
         fscanf(stdin,"\n%s", NomP);
         viderBuffer(); //On vide le buffer
         C->NomP = NomP;
         
         fprintf(stdout,"Veuillez entrer le Numero de place : \n");
         fscanf(stdin,"\n%s", NumP);
         viderBuffer(); //On vide le buffer
         C->NumP = NumP;
        return(C);//retourne l'adresse de la cellule nouvellement creee
    }
}

void affiche_passager(passager *LP)
{
    fprintf(stdout,"\n--------- Liste passager (adresse: %p) -----------\n",LP);
    if(LP == NULL) { //pas de pointeurs de liste
        fprintf(stderr,"Liste de passagers inexistante!\n");
        return;
    }
    //On copie la tete de la liste
    passager *pointeur = LP->succ;
    while(pointeur!=NULL) {
        fprintf(stdout,"\n------ Informations sur le passager %d ------\n", pointeur->NPass);
        fprintf(stdout,"Nom du passager %s --- Numero de place ---\n", pointeur->NumP);
        pointeur = pointeur->succ;
    }
    return;   
}

void insere_tete_passager(passager* LP, passager *PC)
{
if(LP==NULL) {
            fprintf(stderr,"Insertion en tête échouée... Pas de liste passager définie!/n");
        return;
    }
    PC->suiv = PL->succ;
    PC->prec = PL;
    PL->suiv = PC;
    if(PL->prec == PL)
        PL->prec = PC;

        fprintf(stdout,"Insertion en tête de liste passager (adresse: %p) réussie...\n",PL);
    return;   
}

passager* rechercher_passager( passager *LP, char* NomPas){

    //On copie la tete de la liste
    passager *pointeur = LP->suiv;
    while(pointeur!=LP || strcmp(NomPas, pointeur->NomP) <= 0) {
        if(strcmp(NomPas, pointeur->NomP) == 0)
            return pointeur;
        pointeur = pointeur->succ;
    }
    return NULL;

}

void supprime_passager( passager *PC, passager *LP){   

    //On copie la tete de la liste
    passager *pointeur = LP->suiv;
   
    while( pointeur != PC ) {
        //On progresse dans la liste
        pointeur = pointeur->suiv;
    }
        //On est au bon endroit, on met à jour la liste et on libère la mémoire
        pointeur->prec->suiv = pointeur->suiv;
        pointeur->suiv->prec = pointeur->prec;
        free(pointeur);
        fprintf(stdout,"---------  suppression Reussie -----------\n");
    return;
}
void vider_passager(passager *LP){
   
    fprintf(stdout,"\n--------- Vidange liste des passagers  ---------\n");
    //On vide
    while(LP->suiv!=NULL)
        supprime_passager( LP->suiv, LP);
    free(LP);
    return;
}
/*--------------------- PArtie II--------------------------*/

void enfiler(passager *LP, passager *CP){
    if(LP==NULL) {
            fprintf(stderr,"enfilement échoué... Pas de cellule définie!/n");
        return;
    }
    insere_tete_passager(passager* LP, passager *PC);
    return;
}
passager* defiler(passager *LP)
{
    if(LP->prec=NULL) {
            fprintf(stderr,"defilement échoué... Pas de cellule a defiler!/n");
        return NULL;
    }else
    supprime_passager( LP->prec, LP);
    return (LP->prec);
}

vol *creer_vol() {
    int Num;
    char Typ;
    int Max;
    char rep,depart;...................................................erreur
    char arrivee;
    char hdepart;
    char Harrivee;
    struct pass *PS;
    int NR;
    struct pass *PF;
       
    vol *Cvol = (vol *) malloc(sizeof(vol));
    if( Cvol == NULL) {//allocation de la memoire impossible
            fprintf(stderr,"Plus de mémoire!\n");
        return NULL;
    } else {
         fprintf(stdout,"Veuillez entrer le Numero du vol : \n");
         fscanf(stdin,"\n%d", Num);
         viderBuffer(); //On vide le buffer
         Cvol->Num = Num;
             
         fprintf(stdout,"Veuillez entrer le Type du vol : \n");
         fscanf(stdin,"\n%s", Typ);
         viderBuffer(); //On vide le buffer
         Cvol->Typ = Typ;
         
         fprintf(stdout,"Veuillez entrer le nombre max des places : \n");
         fscanf(stdin,"\n%d", Max);
         viderBuffer(); //On vide le buffer
         Cvol->Max = Max;
         
         
         
         fprintf(stdout,"Veuillez entrer la ville de depart : \n");
         fscanf(stdin,"\n%s", depart);
         viderBuffer(); //On vide le buffer
         
Cvol->depart = depart;
         
         fprintf(stdout,"Veuillez entrer la ville de arrivee : \n");
         fscanf(stdin,"\n%s", arrivee);
         viderBuffer(); //On vide le buffer
         Cvol->arrivee = arrivee;
         
         fprintf(stdout,"Veuillez entrer laheure de depart : \n");
         fscanf(stdin,"\n%s", hdepart);
         viderBuffer(); //On vide le buffer
         Cvol->hdepart = hdepart;
         
         fprintf(stdout,"Veuillez entrer la heure de arrivee : \n");
         fscanf(stdin,"\n%s", Harrivee);
         viderBuffer(); //On vide le buffer
         Cvol->Harrivee = Harrivee;
         
         NR = 0;
         Cvol-> NR =  NR;
       
       
        return(Cvol);//retourne l'adresse de la cellule nouvellement creee
    }
}
       
vol* recherche_vol_num(vol* LV, int NumVol)
{
    //On copie la tete de la liste
    vol *pointeur = LV->suiv;
    while(pointeur!=LV || (pointeur->Num == NumVol)) {
        if(pointeur->Num == NumVol)
            return pointeur;
        pointeur = pointeur->succ;
    }
    return NULL;
}
void inserer_vol(vol *LV, vol *CV){

     if(LV==NULL) {
            fprintf(stderr,"\tInsertion en tête échouée... Pas de liste vol définie!/n");
        return;
    } else {
    CV->suiv = LV->suiv;
    CV->prec = LV;
    LV->suiv = CV;
    if(LV->prec == LV) //la sentinelle etait l'unique élément de la ListeVol
        LV->prec = CV;
    return;
    }
}
void vider_vol(vol *LV){
    vol *pointeur = LV->suiv;
   
    while(pointeur!=LV){
        pointeur->prec->suiv = pointeur->suiv;
        pointeur->suiv->prec = pointeur->prec;
        vider_passager(pointeur->PS);
        vider_passager(pointeur->PF);
        free(pointeur);
    }
    free(LV);
}
/*--------------------- PArtie III--------------------------*/

int recherche_vol(vol *LV, char depart[20],char arrivee[20]){
    int num,i=0;
   
    vol *pointeur = LV->suiv;
    while(pointeur!=LV || strcmp(depart, pointeur->depart) == 0) {        if((strcmp(depart, pointeur->depart) 0)&&(strcmp(arrivee, pointeur->arrivee) 0)){
            fprintf(stdout,"%d : \n", pointeur->Num);
            i++;   
        }
        pointeur = pointeur->succ;
    }
    if (i){
        fprintf(stdout,"Veuillez choisir un vol  : \n");
        fscanf(stdin,"%d", num);
        viderBuffer(); //On vide le buffer
        return (num);
    }else
    return(-1);
}
void ajout_vol_passager(vol *CV){
passager * nouveau;
nouveau = creer_passager();

if(Cvol->NR < Cvol->max )
        {
             printf(stdout,"le passager est ajouté dans la liste principale: \n");
             insere_tete_passager(CV->PS,nouveau);
             Cvol->NR--;
        }else{   
             printf(stdout,"le passager est ajouté dans la file d attente: \n");
             enfiler(CV->PF,nouveau);           
        }
   
}
void annule_reservation(vol *LV,char NomP[20],int numvol){
vol* voltemp, pointeur;
passager *passagertemp;
voltemp = recherche_vol_num(LV,numvol);
    if(voltemp==NULL){
        printf(stdout,"le numero de vol est innexistant \n");
        return;
    }else{
        passagertemp = rechercher_passager(voltemp->PS,NomP);
        if(passagertemp==NULL){
            printf(stdout,"le nom de passager est innexistant \n");
            return;
        }else{
            supprime_passager(passagertemp,voltemp->PS);
            pointeur = defiler(voltemp->PF);
            if(pointeur != NULL){
                insere_tete_passager(voltemp->PS,pointeur);   
            }else{
                voltemp->NR++;
            }
        }
    }
}

/*--------------partie IV--------------------------*/

arbre* creer_noeud(void){

arbre *noeud;

noeud  = ( arbre * )malloc( sizeof( arbre ) );
          noeud->celpas = NULL ;
        noeud->gauche = NULL ;
          noeud->droit = NULL ;
        return noeud
}

void inserer_noeud( arbre* arbre_rech , passager* CP )
{
     if( *arbre_rech == NULL )
    {
        arbre_rech = creer_noeud();
        arbre_rech->celpas = CP ;
     }
    else
     {
        if( strcmp(arbre_rech->celpas->NomP, CP->NomP) >= 0)
          {
                inserer_noeud( arbre_rech->gauche , CP) ;
          }
        else
          {
                inserer_noeud( arbre_rech->droit , CP ) ;
          }
    }
}

void construit(arbre* arbre_rech , passager* CP){
    passager *pointeur;
    pointeur = CP->suiv;

    while(pointeur !=NULL){
      inserer_noeud(arbre_rech,pointeur);
      pointeur = CP->suiv;
    }
}

vol* reconstruire(arbre* arbre_rech , passager* CP){
   
    if((CP ==NULL)&& (arbre_rech!=NULL)){
        CP = ( passager * )malloc( sizeof( passager ) );
    }
    if(arbre_rech!=NULL){
        reconstruire(arbre_rech->gauche,CP);
        insere_tete_passager(CP, arbre_rech->celpas);
        reconstruire(arbre_rech->droit,CP);
    }
}

4 réponses

helorem Messages postés 49 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 3 février 2008
30 janv. 2008 à 15:29
Zalut samar27,

Tu peux etre plus precis ? qu'est-ce que tu ne sais pas faire ? ou y a-t-il des erreurs ?

Pour etre honnete, j'ai pas lu ton code, y en a trop !! ca sert a rien de mettre tout ton programme, peu de gens vont le lire, quand on voit la longueur, c'est decourageant.

Cible plus tes questions.
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
30 janv. 2008 à 15:30
Déja là tu es sur phpcs
Ensuite je trouve ça un poils violent de dire : ça marche pas aidez moi (tu es sensé au moins dire ce qui marche pas ...)
Enfin j'te souhaite bonne continuation

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
30 janv. 2008 à 15:33
Ah non tu es dans le bar
N'empeche que

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
helorem Messages postés 49 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 3 février 2008
30 janv. 2008 à 15:37
Et oui Teclis01 je me suis aussi fais avoir quand j'ai commencé a repondre lol !!
0
Rejoignez-nous