Partage
  • Partager sur Facebook
  • Partager sur Twitter

tableau à 3 colone..

    22 mai 2007 à 11:31:50

    Salut,

    voici une fonction qui me permet la saisie des données issues d'un fichier.


    double * saisietemps(long nbl,long posi,char fileName[80])
    {
    double *temps = new double[nbl];
    double *tension1 = new double[nbl];
    double *tension2 = new double[nbl];

    FILE* fichier;
    fichier=fopen(fileName,"r");
    if (fichier != NULL)
    {
    fseek (fichier,posi,SEEK_SET);

    if (fichier != NULL)
    {
    if (temps==NULL || tension1==NULL ||tension2==NULL)
    {
            exit(0);
    }

    for (int i=0;i<nbl;i++)
    {
            fscanf(fichier,"%lf\t%lf\t%lf\n",&temps[i],&tension1[i],&tension2[i]);
            /*printf("%lf\n",temps[i]);*/
    }

    return temps;
    fclose(fichier);
    }
    }
    }



    j'aimerai pouvoir envoyer à la fonction main les 3 tableaux temps,tension1 et tension2) d'un coup et pas seulement temps comme le fait cette fonction.
    Dois je créer un tableau a plusieur entrees sous cette forme: tableau[nbl][3]?
    merci
    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2007 à 12:40:20

      oui ?
      même si je prefere tableau[3][nbl]
      mais... est-ce que ça ne va pas rendre ton code plus dur a comprendre et donc , à debugguer ?

      personellement je comprends mieux temps[X] que donnees[2][X] ...

      m'enfin c'est toi qui voit ;)
      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2007 à 13:11:57

        Le truc c'est que pour créer ce tableau de trois colonnes (qui sont chacune un tableau), tu va devoir faire des copies de chacune de ces colonnes, ce qui peut être assez lent, ou utiliser un tableau de pointeurs (et là c'est rapide).
        En fait, je crois que tu n'y gagnerai rien. Ca rendrait tes fonctions plus compliquées.

        EDIT :
        Ton code n'est pas 'vraiment' en C++, tu utilises des headers et des fonctions du C, c'est une mauvaise habitude à ne pas prendre.
        Utilise plutôt cin et cout pour les entrées/sorties, déclarés dans le header iostream, c'est tellement plus propre, joli et sécurisé :)
        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2007 à 16:27:53

          pas du tout du C++ même, aucune fonction ne l'est...
          à part le compteur déclaré dans la boucle, je vois rien de propre au C++ :p
          • Partager sur Facebook
          • Partager sur Twitter
            22 mai 2007 à 20:17:25

            Peut être l'opérateur new, non ?

            C'est bien du code mixte. Donc du code pas très bien.
            Certains headers du C peuvent être vitaux (ou simplement très utiles) à certaines applications en C++ - par exemple stdint.h. Ce n'est certainement pas le cas de stdio.h
            • Partager sur Facebook
            • Partager sur Twitter
              24 mai 2007 à 9:53:29

              ok merci pour ces précisions,

              et quesque donneraient les fonctions suivantes en C++?


              fseek (fichier,posi,SEEK_SET);


              et


              for (int i=0;i<nbl;i++)
              {
                      fscanf(fichier,"%lf\t%lf\t%lf\n",&temps[i],&tension1[i],&tension2[i]);
                   
              }

              merci
              • Partager sur Facebook
              • Partager sur Twitter
                24 mai 2007 à 23:38:59

                Il est bof ce lien.

                Forum C++ ?
                -> Hop!

                // donnee.h
                #ifndef DONNEE_H__
                #define DONNEE_H__
                #include <iosfwd>
                struct Donnee {
                    Donnee(double tps, double t1, double t2);
                    double temps;
                    double tension1;
                    double tension2;
                };

                std::istream operator>>(std::istream & is, Donnee & d);
                #endif

                // donnee.cpp
                #include "donnee.h"
                #include <istream>
                // cf le dernier tuto
                std::istream operator>>(std::istream & is, Donnee & d)
                {   double tps, t1, t2;
                    if (is >> tps >> t1 >> t2) // pour ne pas altérer d si rien n'est lisible
                        d = Donnee(tmps, t1, t2); // ou une fonction reset()
                    return is;
                }
                ...

                // ailleurs.cpp
                #include <vector>
                #include <fstream>
                #include <stdexcept>
                #include "donnee.h"
                ...

                {
                    std::ifstream f("donnees.txt"); // les constructeurs sont nos amis
                    if (!f) throw std::runtime_error("ne peut pas ouvrir donnees.txt");
                    std::vector<Donnees> tab;
                    Donnee d;
                    while (f >> d) // tant que l'on peut lire une donnée ..
                        tab.push_back(d); // faire: empiler la donnée dans le tableau de données
                    // f.close() est implicite, RAII powa'
                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                  25 mai 2007 à 11:05:41

                  merci,
                  peux tu me dire ce que fait cette ligne?

                  if (is >> tps >> t1 >> t2)

                  merci
                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 mai 2007 à 23:03:07

                    L'expression extrait 3 champs de doubles, et renvoie si elle peut y parvenir ou pas.

                    http://c.developpez.com/faq/cpp/?page=strings#STRINGS_test_conversion
                    • Partager sur Facebook
                    • Partager sur Twitter
                    C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                    tableau à 3 colone..

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown