IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

projet: trajets d'avions


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    d'autre part je ne sais pas où tu vois plein d'erreurs mais n'as tu pas l'impression d'exagerer un peu ?? !!

    la plupart des lignes du code ci-dessus m'ont été fournies soit par des internautes soit par ma prof d'info...

    et puis si tu vois des erreurs au lieu de dire plein tu pourrais au moins faire l'effort de m'en indiquer une ou deux sans forcément les corriger ( et encore une fois ce ne serait pas le but d'un forum...) mais bon je comprends si le coeur ne t'en dis pas...

    quant à E. Delahaye je ne mets certainement pas en doute ses connaissances... je m'inquiète juste de remarquer qu'il passe plus de temps à me critiquer plutôt qu'à m'aider... : il perd son temps et me fait perdre le mien... maintenant si tu estimes perdre ton temps en lisant mon code : ne le lis pas... merci.

  2. #2
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    fgets sscanf et//ou strstr.
    a regarder sur : http://man.developpez.com/

    regarder aussi le site de Emmanuel ou tu auras un bel exemple d'utilisation de fgets.

    t'aurais passé du temps sur un bon livre de C, tu aurais appris/compris et meme t'aurais pu etre capable de l'adapter a tes besoins ... c'est bete

    ---

    et sinon ton code seg fault a tour de bras, mais a part ça, j'exagere.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par BnY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type avion    categorie         constructeur    distfranch    vitcroisi
    =======================================================================
    A320          Gros porteur      Airbus          2592          350
    Falcon2000    Affaires          Dassault        3100          430
    ...
    je rappelle que le fichier est composé exclusivement de caractères et que les colonnes sont séparées par deux tabulations

    je demande a l'utilisateur d'indiquer l'avion qu'il veut, je le compare aux noms d'avions de mon fichier en le lisant ligne par ligne, dés que j'ai la correspondance je mets en mémoire toutes les caractéristiques qui en découlent...
    Il faut refléchir 2 minutes sur la structure du fichier. C'est elle qui va guider la conception de l'algorithme de lecture.

    En gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ouvrir le fichier
    lire la premiere ligne
    extraire et stocker les tetes de colonnes
    lire la 2ème ligne. 
    ignorer cette ligne
    TANT QUE ce n'est pas la fin de fichier
       lire la ligne courante
       extraire et stocker les données
    FIN TANT QUE
    fermer le fichier
    Maintenant, 2 minutes de reflexion sur les données nécessaires au stockage des informations.

    Etant donné que la largeur des champs est variable, ainsi que le nombre de lignes dans le fichier, une approche souple est nécessaire.

    "Tableau de longueur variable composé d'éléments comprenant 6 champs texte de taille variable."

    En supposant que le nombre de lignes dans le fichier est stable pendant la lecture, on peut éventuellement commencer par évaluer le nombre d'éléments nécessaires en comptant les lignes de données du tableau.

    Cela permettrait de définir la taille du tableau avant la lecture des données.

    Ensuite, il faut extraire les informations des lignes sous la forme d'une chaine de caractère, et la stocker dans les champs des l'élement du taneau correspondant. La taille étant variable, les champs seront composés de pointeurs sur char, que l'on renseignera avec l'adresse de la copie dynamique de la chaine extraite.

    Définition de la structure de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    /* element */
    struct element
    {
       char const *s_type_avion;
       char const *s_categorie;
       char const *s_constructeur;
       char const *s_distfranch;
       char const *s_vitcroisi;
    };
     
    /* tableau */
    struct array
    {
       struct element *p_array;
       size_t number;
    };
    Je te laisse faire la suite.

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    En vrac quelques remarques sur ton code (en commentaire dans le code).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    printf("Entrez le nom de l'avion désiré\n");
    scanf("%s", avion);   /* GL : pas de verification de taille : si la saisie est plus importante que la taille d'avion o a u depassement de buffer, pour recuperer une chaine de caractere utilise plutot fgets()*/
     
    FILE*pfcav=fopen("FicCarAv.txt", "r"); 
    if(pfcav!=NULL)
    { 
       while(fgets(chaine, sizeof chaine, pfcav)!=NULL)
       {
          fgets(chaine, sizeof chaine, pfcav); 
    /* GL : le fgets n'st a faire qu'une fois, lorsqu'on appelle une fonction, elle execute ce qu'elle est cense faire et retourne, on ne l'appelle pas une fois pour avoir le resultat de l'operation et une fois pour effectuer le traitement */
     
          i=0;
          while(chaine[i]!='\t')
    /* GL : il n'y a pas de verification sur la taille d'avion temp, la encore on peu avoir un debordement de buffer */
          { 
             aviontemp[i]=chaine[i]; 
             i++; 
          } 
     
          if (strcmp(aviontemp,avion)==0)
             /* je compare le nom donné par l'utilisateur et celui de la ligne du fichier*/
          {
    /* GL : pourquoi introduire une variable "a" ? Il est possible d'utiliser directement sizeof avion */
             a=sizeof avion;
             i= a+3;
    /* GL : Pourquoi ce decaler de sizeof avion (qui est la taille du tableau avion et non la longueur de la chaine), il serait plus judicieux de ce deplacer de la longueur lue dans le fichier, d'autant plus qu'elle est deja contenue dans i. Et pourquoi "+3" */
             /*pour sauter les 2 tab*/
     
             while(chaine[i]!='\t')
             {
    /* GL : toujours pas de verification de la taille */
                categorie[i]=chaine[i];
                i++;
             }
             /*mise en mémoire de la catégorie*/
     
             i=i+3;
             /* re saut des 2 tab*/
     
             while(chaine[i]!='\t')
             {
    /* GL : toujours pas de verification de la taille */
                constructeur[i]=chaine[i];
                i++;
             }
     
             i=i+3;
             while(chaine[i]!='\t')
             {
    /* GL : toujours pas de verification de la taille */
                distf[i]=chaine[i];
                i++;
             }
     
    /* GL : atoi est deprecie, utilise plutot strtol() ca te permettra en plus de verifier que la conversion s'est bien passe */
             DistF=atoi(distf);
             /* conversion en entier pour la distance c'est mieux*/
     
             i=i+3;
             while(chaine[i]!='\t')
             {
    /* GL : toujours pas de verification de la taille */
                vitc[i]=chaine[i];
                i++;
             }
     
    /* GL : Idem atoi precedent */
             VitC=atoi(vitc);
          }
       }
    /* GL : le fichier n'est pas ferme */
    }
    En outre n'ayant pas tout le code, je ne sais pas si les declarations de variables sont correctes.

    Concernant le decoupage en fonctions "elementaires" c'est effectivement une bonne pratique qui ameliore grandement la lisibilite et la maintenabilite d'un programme.
    Par contre, en C, les parametres sont passes aux fonctions par valeur, dans la fonction tu travailles donc sur une copie locale de ce parametres et les modifications apportees a un parametre ne sont valables qu'a l'interieur de cette fonction. Ainsi, dans ton code, la valeur de i n'est pas modifiee a l'exterieur de la fonction.

    Pour que la valeur d'une variable soit modifier par une fonction, il faut passer en parametre de la fonction l'adresse de cette variable et travaille par pointeur a l'interieur de la fonction ou faire retourner la valeur modifiee par la fonction et la recuperer dans l'appelant (i=fonction(chaine, i).

  5. #5
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    wouah !! merci bien à tous les trois... je me rends compte que j'ai du pain sur la planche... du coup je pense aller acheter un livre de C dans la semaine: une référence à me conseiller ??

    sinon pour les erreurs dans mon code bon je vais essayer de corriger tout ca par contre en ce qui concerne le

    " i+3"

    je dis peut etre une betise mais en fait : je veux décaler le i de 3 pour sauter les 2 tabulations, afin d'aller se positionner sur le premier caractère intéressant à rentrer dans ma chaîne, et d'utiliser le while(chaine[i]!='\t').

    ->le '\t' qui correspondrait alors a la premiere tabulation se trouvant dans la chaine apres ce que je viens de lire...

    euh je crois que c'est pas clair:

    je lis une ligne de mon fichier et je la retranscris dans chaine[].
    ensuite je commence la lecture de mon tableau jusqu'au premier '\t' rencontré et je met tous les caracteres concernés dans un tableau categorie[] par exemple.
    la je veux sauter les 2 caractères '\t' séparant les colonnes avec mon i=i+3, et comme ca je continue la lecture du tableau chaine a partir de i=i+3 ( premier caractere different de '\t'. jusqu'à nouvelle obtention de ce caractere: '\t' afin de ranger ces caracteres dans un autre tableau distfranc[] par exemple ...

    c'est mieux ?? et est-ce que je fais bien de faire ca ?? a priori je n'y voyais pas d'inconvénient majeur ^^ ...

    bon je continue de travailler ca, en vous remerciant encore de me permettre de ne pas stagner au meme endroit en attendant de pouvoir m'aider d'un livre de C

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par BnY
    du coup je pense aller acheter un livre de C dans la semaine: une référence à me conseiller ??
    http://emmanuel-delahaye.developpez.com/index.htm

    En attendant :

    http://www-clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C.html

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    En parlant de "livre de C", je viens de finir de lire le livre "Programmer en langage C" de CLaude Delannoy et il est pas terrible, j'aurais du acheter le K&R.

    Mais j'ai moyennement envie de dépenser 33€, donc je me demandais si une "un livre de C" sur internet suffisait ?

    Merci d'avance

    Kr00pS

  8. #8
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Citation Envoyé par BnY
    non je n'ai jamais eu de cours d'algo je suis élève dans une école d'ingénieurs en méca et l'info c'est pas notre fort... j'ai pas le temps d'acheter un bouquin de C, on a des polys de cours et ils comportent la base. C'est tout.
    Ah c'est facheux ça commande le
    Ne me dis pas que tu n'as pas le tps d'aller relever ta boite aux lettres tout de même

  9. #9
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Citation Envoyé par Kr00pS
    En parlant de "livre de C", je viens de finir de lire le livre "Programmer en langage C" de CLaude Delannoy et il est pas terrible, j'aurais du acheter le K&R.

    Mais j'ai moyennement envie de dépenser 33€, donc je me demandais si une "un livre de C" sur internet suffisait ?

    Merci d'avance

    Kr00pS
    J'avais le même souci je l'ai trouvé d'occasion en américain sur amazon pour 20€ frais de port compris. Il était devenu prenable 8)
    Sur Amazon ils ont de bons livres en occasion et pas cher...dernièrement j'ai commandé Accelerated C++ que j'ai reçu au bout de 15 jours en provenance de...Suède pour 25€ comme neuf j'étais ravi

  10. #10
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par BnY
    " i+3"

    je dis peut etre une betise mais en fait : je veux décaler le i de 3 pour sauter les 2 tabulations, afin d'aller se positionner sur le premier caractère intéressant à rentrer dans ma chaîne, et d'utiliser le while(chaine[i]!='\t').

    ->le '\t' qui correspondrait alors a la premiere tabulation se trouvant dans la chaine apres ce que je viens de lire...

    euh je crois que c'est pas clair:

    je lis une ligne de mon fichier et je la retranscris dans chaine[].
    ensuite je commence la lecture de mon tableau jusqu'au premier '\t' rencontré et je met tous les caracteres concernés dans un tableau categorie[] par exemple.
    la je veux sauter les 2 caractères '\t' séparant les colonnes avec mon i=i+3, et comme ca je continue la lecture du tableau chaine a partir de i=i+3 ( premier caractere different de '\t'. jusqu'à nouvelle obtention de ce caractere: '\t' afin de ranger ces caracteres dans un autre tableau distfranc[] par exemple ...

    c'est mieux ?? et est-ce que je fais bien de faire ca ?? a priori je n'y voyais pas d'inconvénient majeur ^^ ...
    Tu veux "sauter" 2 tabulations tu fais i+3, il n'y rien qui te choque ?

    En effet tu parcoures tant que tu ne trouves pas de \t, donc au moment ou tu arretes, i est tel que chaine[i] == '\t'. Ensuite si tu l'incremente de 1 tu recuperes le second \t et en ncrementant encore de un tu pointes sur le caractere suivant les tabulations, donc +2 suffit

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    Citation Envoyé par Gnux
    Citation Envoyé par Kr00pS
    En parlant de "livre de C", je viens de finir de lire le livre "Programmer en langage C" de CLaude Delannoy et il est pas terrible, j'aurais du acheter le K&R.

    Mais j'ai moyennement envie de dépenser 33€, donc je me demandais si une "un livre de C" sur internet suffisait ?

    Merci d'avance

    Kr00pS
    J'avais le même souci je l'ai trouvé d'occasion en américain sur amazon pour 20€ frais de port compris. Il était devenu prenable 8)
    Sur Amazon ils ont de bons livres en occasion et pas cher...dernièrement j'ai commandé Accelerated C++ que j'ai reçu au bout de 15 jours en provenance de...Suède pour 25€ comme neuf j'étais ravi
    L'état était correct ? J'ai regardé et malheuresement je n'économise rien, je vais attendre un peu.

  12. #12
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Citation Envoyé par Kr00pS
    Citation Envoyé par Gnux
    Citation Envoyé par Kr00pS
    En parlant de "livre de C", je viens de finir de lire le livre "Programmer en langage C" de CLaude Delannoy et il est pas terrible, j'aurais du acheter le K&R.

    Mais j'ai moyennement envie de dépenser 33€, donc je me demandais si une "un livre de C" sur internet suffisait ?

    Merci d'avance

    Kr00pS
    J'avais le même souci je l'ai trouvé d'occasion en américain sur amazon pour 20€ frais de port compris. Il était devenu prenable 8)
    Sur Amazon ils ont de bons livres en occasion et pas cher...dernièrement j'ai commandé Accelerated C++ que j'ai reçu au bout de 15 jours en provenance de...Suède pour 25€ comme neuf j'étais ravi
    L'état était correct ? J'ai regardé et malheuresement je n'économise rien, je vais attendre un peu.
    Pour Accelerated il était comme neuf pour le K&R il venait d'une bibliothèque (il était encore coté...) mais il était en très bon état (pas de surlignage ni pages déchirées etc...)

  13. #13
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    12 minutes de lecture
    Là je suis foutu pour la soirée!!
    Donc, comme dit précédemment, les fonctions sont indispensables!

    P.S. une phrase de 5 lignes sans la moindre ponctuation c'est dur a suivre...
    Moi c'est l'inverse, faut que j'me avec les virgules... Pas facile de trouver un compromi...
    Donc pour les bouquins(je sais pas si le lien a déjà été donné, mais je tente):
    http://c.developpez.com/livres/

    Je conseille au posteur de départ de créer un nouveau post, dans lequel les informations données précédemment seront prises en compte, afin d'accroître les chances que qqun lui réponde, car là, il faut du courage pour tout lire!! et qu'on bloque celui-ci... Non?

  14. #14
    Invité de passage
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1
    Par défaut
    tout l'estaca compte faire (faire faire ?) son projet ici ? :')

    si on me fait mon projet solidworks je veux bien faire votre projet d'info haha

  15. #15
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    pour ton information je ne fais pas faire mon projet ici, si j'avais voulu le faire faire j'aurai payé un mec pour qu'il me le fasse de A à Z... il n'est pas interdit de demander de l'aide sur internet.... et je ne compte pas faire le projet d'un autre pour qu'il me fasse le mien... je veux faire mon projet, et je pose des questions sur un forum la ou j'ai des difficultés... ca te pose un problème ??? merci...

    bon et merci à tous les autres pour leurs multiples références sur les livres C et pdf...

    je vais faire un tour de tout ca

Discussions similaires

  1. Qu'est ce qu'un grand projet ?
    Par Geronimo dans le forum Débats sur le développement - Le Best Of
    Réponses: 62
    Dernier message: 04/04/2013, 14h52
  2. [Delphi] Association composants-projet
    Par Pierre Castelain dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/07/2002, 16h20
  3. Parametrage des options de projet
    Par ares7 dans le forum EDI
    Réponses: 7
    Dernier message: 22/07/2002, 15h33
  4. Réponses: 6
    Dernier message: 21/06/2002, 14h48
  5. Les fichiers d'un projet
    Par Manolo dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/05/2002, 17h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo