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 :

Mauvais �l�ve en C++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 13
    Par d�faut Mauvais �l�ve en C++
    Bonjour,

    Je suis nouveau sur ce site, un peu moins en programmation mais presque, mais j'ai appris sur le tas, en m'inspirant des gens qui m'entourent (qui ne sont pas programmeurs � la base).
    En me promenant sur le site, je me rends compte que je fais plein de trucs sales en C++ (#define, char*, FILE*, tableaux multidim, fichier monobloc...).

    Il y a tellement de trucs � changer en m�me temps que je suis perdu, et c'est l� que j'ai besoin de vous!

    J'ai essay� de concentrer ces probl�mes en coupant dans un programme que j'utilise et en le simplifiant. C'est un programme qui lit des tableau dans des fichiers (dans sa version complete pouvant lire diff�rents types de fichiers) et mettant les donn�es dans un tableau de format g�n�rique.

    Voil� 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
     
    #include <fstream>
    #include <stdio.h>
    #include <iostream>
     
    using namespace std;
     
    #define NbAntMax 2		// Nombre de signaux
    #define NbChTimeMax 10001	// Nombre de canaux temporel max absolu
    #define NbChTimeAA 1000		// Nombre max AA (normalement il y a des signaux BB, avec une autre longueur)
    #define NbTypesSignaux 5	// Temps, NS, EW, vertical, autre parametre
     
    // Tableau destines a contenir les signaux
    float signalsAA[NbAntMax][NbTypesSignaux][NbChTimeMax];
     
    // Declaration des fonction de lecture des fichiers
    void Read1FileAA(char* AAdir,char* AAfile,float signals[NbAntMax][NbTypesSignaux][NbChTimeMax],int ant);
    void ReadAllFilesAA(char* AAdir,char* AAfile[NbAntMax],float signals[NbAntMax][NbTypesSignaux][NbChTimeMax]);
     
    // Chemin des fichiers de donnees AA
    char* dirAA="./dataAA/";
    char* fileAA[NbAntMax]={"file1","file2"};
     
    int main()
    {
      ReadAllFilesAA(dirAA,fileAA,signalsAA);
      printf("Last value: %3f\n",signalsAA[1][3][999]);
      return 0;
    }
     
     
    // ReadAllFileAA: Lit les trois composantes du champ de tous les fichiers AA
    void ReadAllFilesAA(char* AAdir,char* AAfile[NbAntMax],float signals[NbAntMax][NbTypesSignaux][NbChTimeMax])
    {
      for(int i=0;i<NbAntMax;i++) {
        Read1FileAA(AAdir,AAfile[i],signals,i);
      }
    }
     
    // Read1FileAA: Lit les trois composantes du champ d un fichier AA a une position
    void Read1FileAA(char* AAdir,char* AAfile,float signals[NbAntMax][NbTypesSignaux][NbChTimeMax],int ant)
    {
      int ii=ant;
     
      char AAdirfile[100];
      sprintf(AAdirfile,"%s%s.dat",AAdir,AAfile);
     
      FILE *fAnt;
      if((fAnt = fopen(AAdirfile,"r"))==NULL) {printf("Cant open AA file: %s\n",AAdirfile);}
     
      for(int jj=0;jj<2012;jj++) {
        fscanf(fAnt,"%f",&signals[ii][0][jj]);	// Time
        fscanf(fAnt,"%f",&signals[ii][1][jj]);	// ns
        fscanf(fAnt,"%f",&signals[ii][2][jj]);	// ew
        fscanf(fAnt,"%f",&signals[ii][3][jj]);	// vert
        signals[ii][4][jj]=999;			// nothing, utilise avec les signaux BB...
      }
    }
    Je vous laisse admirer le style

    Vous pouvez m'aider � am�liorer �a, histoire de repartir sur de bonnes bases?

    Pour commencer, j'ai essay� hier de mettre les fonctions de lectures dans un fichier .cxx s�par�, plus un header (appel� apr�s les #define), mais � la compilation j'ai un message
    undefined reference to ReadAllFilesAA.



    PS: En fichier joint, le code plus les donn�es pour que �a tourne
    PS2: J'ai d�j� �crit des milliers de lignes de C++(?) avec ce style
    Fichiers attach�s Fichiers attach�s

  2. #2
    screetch
    Invit�(e)
    Par d�faut
    Deja ce n'est pas du C++ c'est du C ca ^^

    ensuite je vais manger, je profite juste de cela pour augmenter de maniere artificielle mon nombre de posts.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    124
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 124
    Par d�faut
    si t as ecrit des milliers de lignes en C alors que tu croyais faire du C++, chapeau bas !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 13
    Par d�faut
    Dans les parties zap�es, il y avait pas mal d'utilisations d'objets ROOT, que j'utilise assez intensivement par ailleurs.
    Mais c'est vrai qu'a part �a, j'�cris surtout du C. Comme je gal�re r�guli�rement (avec les appels de tableau multidims dans les fonctions par exemple) comme �a, et que je pense que ce serait plus simple avec des objets(c'est pour aller dans ce sens que je veux mettre les fonctions dans un fichier s�par�), et plein d'autres raisons, que je veux passer au C++.

    edit: C'est vrai que j'aurrais pu faire un effort pour mettre un cout � la place du printf, �a je sais faire (mais j'ai moins l'habitude)

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par d�faut
    Salut,
    effectivement c'est sp�cial pour du c++ ^^

    "Il y a tellement de truc a changer, c'est la que j'ai besoin de vous" : Les gens qui sont sur le forum sont pas la non plus pour te donner un cour particulier :p
    Tu es sur un super site avec plein de tutos, tu devrais trouver pas mal de renseignements pour arriver a tes fins.
    Sinon il y a aussi les librairies... Non je parles des batiments avec des gens qui vendent des livres ^^

  6. #6
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par d�faut
    D�j�, tu peux
    • enlever <stdio.h>
    • remplacer #define var value par static const int var = value;
    • bannir char * et n'utiliser que des strings
    • remplacer printf par cout
    • plus besoin de sprintf : concat�ner les strings (string AAdirfile = AAdir + AAfile + ".dat"
    • Ne pas utiliser FILE mais les fstream
    • Plus de scanf avec les fstream (pr�f�rer fAnt >> signals[ii][0][jj] >> ...)
    • Ne pas oublier de fermer le fichier une fois que tu as termin� avec
    • Mettre les fonctions de lecture dans un fichier � part (r�essaie, �a doit marcher, s�rement une erreur dans ta ligne de commande). En faire une classe ?
    • Le tableau multidimensionnel, bof pourquoi pas, tu peux-etre d�finir une classe qui correspondrait � une ligne du tableau et utiliser un vecteur � la place, c'est toi qui voit ce que tu veux faire.
    • Regarder un livre de C++.


    Bon bah voil�, �a te fait d�j� un paquets de choses � faire pour passer en C++.

    N'h�site pas � nous dire comment se passe ta reconversion.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 13
    Par d�faut
    Merci pour vos r�ponses.

    aoyou a dit:
    • enlever <stdio.h>
    • remplacer printf par cout
    • Ne pas oublier de fermer le fichier une fois que tu as termin� avec
    • Mettre les fonctions de lecture dans un fichier � part (r�essaie, �a doit marcher, s�rement une erreur dans ta ligne de commande). En faire une classe ?
    Les trois premiers points sont fait, et je vais m'attaquer aux autres apr�s avoir regl� le 4�me: quand je divise le code, je n'arrive plus a compiler. J'ai les fichiers:

    lecture2.C
    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
     
    #include <fstream>
    #include <iostream>
     
    using namespace std;
     
    #define NbAntMax 2		// Nombre de signaux
    #define NbChTimeMax 10001	// Nombre de canaux temporel max absolu
    #define NbChTimeAA 1000		// Nombre max AA (normalement il y a des signaux BB, avec une autre longueur)
    #define NbTypesSignaux 5	// Temps, NS, EW, vertical, autre parametre
     
    #include "fonctions.h"
     
    // Tableau destines a contenir les signaux
    float signalsAA[NbAntMax][NbTypesSignaux][NbChTimeMax];
     
     
    // Chemin des fichiers de donnees AA
    char* dirAA="./dataAA/";
    char* fileAA[NbAntMax]={"file1","file2"};
     
    int main()
    {
      ReadAllFilesAA(dirAA,fileAA,signalsAA);
      cout<<"Last value: "<<signalsAA[1][3][999]<<endl;
      return 0;
    }
    fonctions.h:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifndef FONCTIONS_H
    #define FONCTIONS_H
     
     // Declaration des fonction de lecture des fichiers
    void Read1FileAA(char* AAdir,char* AAfile,float signals[NbAntMax][NbTypesSignaux][NbChTimeMax],int ant);
    void ReadAllFilesAA(char* AAdir,char* AAfile[NbAntMax],float signals[NbAntMax][NbTypesSignaux][NbChTimeMax]);
     
    #endif
    et fonctions.cxx:
    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
     
    #include <fstream>
    #include <iostream>
     
    using namespace std;
     
    #include "fonctions.h"
     
    // ReadAllFileAA: Lit les trois composantes du champ de tous les fichiers AA
    void ReadAllFilesAA(char* AAdir,char* AAfile[NbAntMax],float signals[NbAntMax][NbTypesSignaux][NbChTimeMax])
    {
      for(int i=0;i<NbAntMax;i++) {
        Read1FileAA(AAdir,AAfile[i],signals,i);
      }
    }
     
    // Read1FileAA: Lit les trois composantes du champ d un fichier AA a une position
    void Read1FileAA(char* AAdir,char* AAfile,float signals[NbAntMax][NbTypesSignaux][NbChTimeMax],int ant)
    {
      int ii=ant;
     
      char AAdirfile[100];
      sprintf(AAdirfile,"%s%s.dat",AAdir,AAfile);
     
      FILE *fAnt;
      if((fAnt = fopen(AAdirfile,"r"))==NULL) {printf("Cant open AA file: %s\n",AAdirfile);}
     
      for(int jj=0;jj<2012;jj++) {
        fscanf(fAnt,"%f",&signals[ii][0][jj]);	// Time
        fscanf(fAnt,"%f",&signals[ii][1][jj]);	// ns
        fscanf(fAnt,"%f",&signals[ii][2][jj]);	// ew
        fscanf(fAnt,"%f",&signals[ii][3][jj]);	// vert
        signals[ii][4][jj]=999;			// nothing, utilise avec les signaux BB...
      }
      fclose(fAnt);
    }
    mais quand je compile avec
    g++ lecture2.C -o LECT
    , j'obtiens le message d'erreur
    /tmp/ccBkVWLD.o(.text+0x12c): In function `main':
    : undefined reference to `ReadAllFilesAA(char*, char**, float (*) [5][10001])'
    collect2: ld returned 1 exit status
    Qu'est ce qui ne va pas?

    Merci pour votre temps (j'ai pass� toute la journ�e d'hier � essayer de r�soudre ce point tout seul sur ce site et d'autres, sans succ�s)

    Keld.
    Fichiers attach�s Fichiers attach�s

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 01/04/2010, 20h27
  2. Mauvais indicateur de connection
    Par calvin dans le forum Hibernate
    R�ponses: 15
    Dernier message: 24/05/2004, 12h03
  3. [Tomcat][JSP] Mauvais fonctionnement
    Par gandalf_le_blanc dans le forum Tomcat et TomEE
    R�ponses: 47
    Dernier message: 26/04/2004, 13h07
  4. Mauvais noms de colonnes lors d'une requ�te
    Par nmathon dans le forum Bases de donn�es
    R�ponses: 2
    Dernier message: 09/04/2004, 07h27
  5. mauvais code
    Par moumou dans le forum Autres SGBD
    R�ponses: 3
    Dernier message: 17/04/2003, 15h56

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