Programme en c++ [Résolu]

Signaler
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
18 avril 2011
-
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
18 avril 2011
-
Bonjour à tous,
Je suis débutant en c++ et j'ai un problème dans un exercice qui demande de lire à partir d'un fichier texte des réels et les stockés dans un tableau sachant que les réels sont séparés par un espace
mais j'ai pas trouvé la solution pour cela je me suis fait recours sur votre aide et j'esper que j 'aurai des reponses svp et merci!!
j'ai fait un code mais je suis bloqué
#include <fstream>
#include 
#include <vector>
using namespace std;
void main() {
int n;
float *tab = new int [n]; 
ifstream fichier("fiche.txt");
if ( !fichier )
        cout << "fichier inexistant";
else
{
bool b=true;
while( !fichier.eof() )
{
getline(fichier, Ligne);
for(i=0;i<=n;i++)
fiche>>tab[i];
}
for(i=0;i<=n;i++){
cout<<tab[i]<<endl;}
fiche_close();			
return 0;
}

Le problème c'est comment remplir le tableau

11 réponses

Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
J'avais bien compris., mais je ne peux répondre à cette question, si tu ne réponds pas d'abord à la mienne.
A quoi ressemble le fichier ? Comment est structuré celui-ci ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Utilise std::getline, il permet de lire des valeurs d'un flux (fichier ou flux de caractères), séparés par un délimiteur choisi.
Tu fais d'abord un std::getline avec un \n pour les sauts de lignes, ce qui te permet de récupérer les lignes une à une.
Puis, sur chacune de ces lignes, tu refais un std::getline avec un ' ' pour avoir chacun des mots.

Au lieu de t'embêter avec un tableau, utilise une liste (std::list) qui gère le redimensionnement et la mémoire pour toi.

#include <fstream>
#include 
#include <sstream>
#include <list>
#include <cstdlib>

/* Convertit un string en n'importe quel type numérique */
template<typename T>
bool fromString(const std::string& str, T& dest)
{
    std::istringstream iss(str);
    return iss >> dest != 0;
}

int main()
{
  std::list<double> tab;
  std::ifstream fichier("fiche.txt");
  if (!fichier)
  {
    std::cout << "fichier inexistant" << std::endl;
    return 1;
  }

  std::string ligne;
  while (std::getline(fichier, ligne))
  {
    std::istringstream buff(ligne);
    std::string mot;
    while (std::getline(buff, mot, ' '))
    {
      if (!mot.empty())
      {
std::cout << """ << mot << """ << std::endl;
double f;
if (fromString(mot, f)) // Ajout uniquement si réussite de la conversion de string vers double
  tab.push_back(f);
      }
    }
  }

  // Lecture du tableau, voir ce qu'est un itérateur
  for (std::list<double>::const_iterator it = tab.begin();
      it != tab.end(); ++it)
    std::cout << *it << std::endl;

  fichier.close();

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
mais je pense le tableau plus simple que une liste car je veux calculer la tang-1
pour chaque float

Qu'est-ce qui t'empêche de le faire ?

for (std::list<double>::const_iterator it = tab.begin();
      it != tab.end(); ++it)
    std::cout << tan(*it) << std::endl;


Si tu veux accéder aux éléments par les [], remplace std::list par std::vector. En C++, il rarement utile d'utiliser les tableaux du C.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
* Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
* int main() et non void main()
* new int[n], ok, mais que vaut n ?

Comment est structuré le tableau ? Si le nombre de colonne est fixe, ça va être très facile.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
18 avril 2011

Merci
mais le problème comment remplir le tableau sachant chaque réel doit être enregistré dans une case du tableau
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
18 avril 2011

Bonjour,
je réponds à ton question mon fichier contient des "float" sont séparés par un espace je veux stocker chaque float dans une case de tab, Merci pour votre aide.
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
18 avril 2011

Merci CptPingu,
j'ai modifié mon code mais j'ai pas comprit cet erreur
Erreur 1 fatal error C1075: fin de fichier rencontrée avant que l'élément accolade '{' gauche de '.\fichier1.cpp(17)' soit équilibré c:\Documents and Settings\acer1\Mes documents\Visual Studio 2008\Projects\fichier1\fichier1\fichier1.cpp 51 fichier1
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
18 avril 2011

ah c'est bon j'ai oublié l'accolade de fermeture
mais je pense le tableau plus simple que une liste car je veux calculer la tang[size=50][size=50]
/size-1/size pour chaque float
Merci pour votre aide
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
18 avril 2011

salut,
je peux pas afficher tous les "float" de mon fichier
voici mon fichier:0.038760 0.238095 -0.206897 0.178571 -0.058824 -0.103448 0.135135 0.250000 -0.095238 0.192308 -0.157895 0.172414 0.089286 -0.067416 0.113636
Il commence par 0.135135 et les autres........... ppfffffff je sais pas où le problème
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
je sais pas où le problème

Aucun problème chez moi, avec le code que je t'ai enovoyé.

Tu as du te tromper dans ton code. N'étant pas devin, il va falloir que tu le postes si tu veux de l'aide.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Statut
Membre
Dernière intervention
18 avril 2011

ca marche j'ai une bibliothèque qui se manque