Programme en c++

Résolu
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011 - 13 avril 2011 à 14:01
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011 - 14 avril 2011 à 16:25
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 avril 2011 à 15:57
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
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 avril 2011 à 12:26
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
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 avril 2011 à 14:30
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
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 avril 2011 à 14:53
* É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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011
13 avril 2011 à 15:49
Merci
mais le problème comment remplir le tableau sachant chaque réel doit être enregistré dans une case du tableau
0
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011
14 avril 2011 à 12:04
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.
0
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011
14 avril 2011 à 12:46
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
0
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011
14 avril 2011 à 12:53
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
0
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011
14 avril 2011 à 13:11
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 avril 2011 à 14:31
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
0
noussa44 Messages postés 48 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 18 avril 2011
14 avril 2011 à 16:25
ca marche j'ai une bibliothèque qui se manque
0
Rejoignez-nous