Aide en C

Signaler
Messages postés
1
Date d'inscription
jeudi 22 février 2007
Statut
Membre
Dernière intervention
30 janvier 2008
-
Messages postés
49
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
3 février 2008
-
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

Messages postés
49
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
3 février 2008

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.
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
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
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
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
Messages postés
49
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
3 février 2008

Et oui Teclis01 je me suis aussi fais avoir quand j'ai commencé a repondre lol !!