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 :

Lire un fichier contenant une matrice et le stocker dans un vecteur


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 13
    Points
    13
    Par défaut Lire un fichier contenant une matrice et le stocker dans un vecteur
    Bonjour,

    Je voudrais lire à partir d'une fichier .txt une matrice triangulaire supérieure et la stocker dans une variable matrice. Est ce que quelqu'un aurait une idée sur la façon de s'y prendre. Je ne suis pas un expert en C++, mais je suis ouvert à toutes vos remarques qui peuvent me faire avancer.

    Le fichier .txt à la configuration suivante :

    Matrice de covariance
    3.08787791981153E-02
    6.5040824508478E-03 0.227357513661848
    -3.30917216603529E-03 -1.79684729334368E-04 0.1
    ect...

    J'ai de mon côté trouver quelque chose qui tient la route mais je ne suis pas ur que ça me stocker ça dans une variable matrice d'autant plus que je ne sais pas si ça peut marcher pour une matrice triangulaire supérieur je vous donne la partie du code que j'ai trouvé:


    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
    74
    75
    #include <vector> //pour std::vector
    #include <string> // pour std::string et std::getline
    #include <sstream> //pour std::istreamstring
    #include <iostream> //pour les std::cout, std::cin....
    #include <fstream> //pour lire les fichiers
     
    std::vector<std::vector<int> > MatriceA;
     
    std::ifstream fichier("toto.txt");
     
     
    if(fichier)
    {
    std::string tmpLine;
     
    while(std::getline(fichier,tmpLine))
    {
    std::vector<int> tmpVector;
    std::istringstream toto(tmpLine);
    std::string mot;
    while ( std::getline(toto, mot, ';' ) )
    {
    std::istringstream mot_nombre(mot);
    int nombre;
    mot_nombre >> nombre;
     
    tmpVector.push_back(nombre);
    }
     
    correlation.push_back(tmpVector);
    }
     
    ////-- Display Matrice:
    //std::vector<std::vector<int> >::iterator ita = MatriceA.begin();
    //std::vector<int>::iterator ita2;
    //while(ita != MatriceA.end())
    //{
    // ita2 = ita->begin();
    // while(ita2 != ita->end())
    // {
    // std::cout<<"\t" <<*ita2;
    // ita2++;
    // }
    // std::cout<<std::endl;
    // ita++;
    //}
     
    ////-- Or display again with []
     
    //-- get indice I and indice j
    std::vector<std::vector<int> >::iterator ita = MatriceA.begin();
    std::vector<int>::iterator ita2;
     
    long xlen =0;
    long ylen =0;
     
    if(ita !=MatriceA.end()) 
    {
    ylen=MatriceA.size(); //Y axis
    xlen =MatriceA[0].size(); //X axis
    }
     
    for(long i =0; i<ylen; i++)
    {
    for(long j=0; j<xlen; j++)
    {
    std::cout<<"\t" <<MatriceA[j];
    }
    std::cout <<std::endl;
    }
     
    }
     
    std::cin.ignore();
    return 0;
      0  0

  2. #2
    Membre du Club Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Points : 66
    Points
    66
    Par défaut
    Salut,

    Ca a pas l'air mal ton code mais ya truc qui m'interpèle :
    quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //-- Display Matrice:
    std::vector<std::vector<int> >::iterator ita = MatriceA.begin();
    std::vector<int>::iterator ita2;
    while(ita != MatriceA.end())
    {
    	ita2 = ita->begin();
    	while(ita2 != ita->end())
    	{
    		std::cout<<"\t" <<*ita2;
    		ita2++;
    	}
    	std::cout<<std::endl;
    	ita++;
    }
    tu ne rentrera pas dans ton while puisque MatriceA est vide, donc "ita = MatriceA.end()"


    correlation correspond à quoi???


    P.S.:

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.
      0  0

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 13
    Points
    13
    Par défaut
    En fait j'ai changé le code, celui là me parait plus approprié pour lire la matrice, mais bien sur il ne marche pas du premier coup. Peut-tu m'aider s'il te plait à deceler ce qu'il ne va pas???
    Merci

    Voilà le code en question :

    Ne fait pas attention aux include, il y a tout ce qu'il faiut,

    #include "essai.h"



    void main ()
    {
    istream fichier("D:\\Documents and Settings\\AMOR\\My Documents\\Visual Studio Projects\\covariance.txt",ios::in)
    char dim[2];
    fichier.getline(dim,2);
    ArrayLengthSpecifier dimension((int)dim[1]);
    SymmetricMatrix& covariance(dimension);
    int i=0;
    int compteur=0;
    do
    {
    i++;
    char ligne[2*i];
    fichier.getline(ligne,2*i);
    for (int j=1;j<=2*i;j++)
    {
    if (!j%2==0)
    {
    compteur = compteur++
    covariance(i,compteur) =ligne[j];
    }
    }

    }
    while (!fichier.eof());
    for (i=1;i<=dim[1];i++)
    {
    for (j>i;j<=dim[1];j++)
    {
    covariance(i,j)=covariance(j,i);
    }
    }
    Matrix C;
    C=chol(covariance);
    cout << "le premier element de la matrice de Cholesky est:" << C(1,1) << "\n";
    }

    Le fichier d'entrée resemble à la configuration suivante :
    4
    1
    5 1.2356
    1 2 3.2589713
    0.9 0.754896321 1 0.3

    Les messages d'erreurs sortis par le code sont :

    ------ Début de la régénération globale*: Projet*: CorrelSimul, Configuration*: Release Win32 ------

    Supprimer des fichiers de sortie et des fichiers intermédiaires du projet 'CorrelSimul', configuration 'Release|Win32'.
    Compilation...
    Stdafx.cpp
    Compilation...
    Submat.cpp
    sort.cpp
    Solution.cpp
    Sl_ex.cpp
    Newmatex.cpp
    Newmat9.cpp
    Newmat8.cpp
    Newmat7.cpp
    Newmat6.cpp
    Newmat5.cpp
    Newmat4.cpp
    Newmat3.cpp
    Newmat2.cpp
    Newmat1.cpp
    Myexcept.cpp
    evalue.cpp
    essai.cpp
    essai.cpp(9) : error C2448: 'fichier'*: l'initialiseur de style fonction semble être une définition de fonction
    essai.cpp(10) : error C2065: 'fichier'*: identificateur non déclaré
    essai.cpp(10) : error C2228: la partie gauche de '.getline' doit avoir un type class/struct/union
    le type est ''unknown-type''
    essai.cpp(10) : error C2065: 'dim'*: identificateur non déclaré
    essai.cpp(11) : error C3861: 'dim': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(12) : error C2440: 'initialisation'*: impossible de convertir de 'ArrayLengthSpecifier' en 'SymmetricMatrix &'
    Une référence qui ne retourne pas à 'const' ne peut pas être liée à une non-lvalue
    essai.cpp(18) : error C2057: expression de constante attendue
    essai.cpp(18) : error C2466: impossible d'allouer un tableau de taille constante 0
    essai.cpp(19) : error C2228: la partie gauche de '.getline' doit avoir un type class/struct/union
    le type est ''unknown-type''
    essai.cpp(19) : error C2065: 'ligne'*: identificateur non déclaré
    essai.cpp(19) : error C3861: 'fichier': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(22) : warning C4804: '%'*: utilisation risquée du type 'bool' dans l'opération
    essai.cpp(25) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'covariance'
    essai.cpp(25) : error C3861: 'ligne': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(30) : error C2228: la partie gauche de '.eof' doit avoir un type class/struct/union
    le type est ''unknown-type''
    essai.cpp(30) : error C3861: 'fichier': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(31) : error C3861: 'dim': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(33) : error C2065: 'j'*: identificateur non déclaré
    essai.cpp(33) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(33) : error C3861: 'dim': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(33) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(35) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(35) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(39) : error C2065: 'C'*: identificateur non déclaré
    essai.cpp(40) : error C2593: 'operator <<' est ambigu
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(434): peut être 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits>::_Mysb *)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(414): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(394): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(long double)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(374): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(double)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(354): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(float)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(333): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(313): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(292): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned long)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(272): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(long)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(252): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned int)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(227): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(int)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(207): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(174): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(short)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(154): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(148): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(142): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits>::_Myios &(__cdecl *)(std::basic_ostream<_Elem,_Traits>::_Myios &))'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(137): ou 'std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits>::_Myt &(__cdecl *)(std::basic_ostream<_Elem,_Traits>::_Myt &))'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    lors de la tentative de mise en correspondance de la liste des arguments '(std::basic_ostream<_Elem,_Traits>::_Myt, 'unknown-type')'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    essai.cpp(40) : error C3861: 'C': identificateur introuvable, même avec une recherche qui dépend de l'argument
    CorrelSimul.cpp
    Cholesky.cpp
    Bandmat.cpp

    Le journal de génération a été enregistré à l'emplacement "file://d:\Documents and Settings\Amor\My Documents\Visual Studio Projects\correlation_c++\Release\BuildLog.htm"
    CorrelSimul - 25 erreur(s), 1 avertissement(s)


    ---------------------- Terminé ----------------------

    Régénération globale*: 0 a réussi, 1 a échoué, 0 a été ignoré
      0  0

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Points : 231
    Points
    231
    Par défaut
    heu... juste un détail, dans ton exemple, la matrice ne serait pas triangulaire inférieure ?
      0  0

  5. #5
    Membre du Club Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Points : 66
    Points
    66
    Par défaut
    Je veux bien t'aider mais s'il te plait met ton code dans des balises [CODE], c'est beaucoup plus lisible

    Pour ce qui est des erreurs :

    1. ici j est inconnu puisqu'il n'est déclarer que dans la boucle for précédente.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      for (j>i;j<=dim[1];j++){
      	covariance(i,j)=covariance(j,i);
      }
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      for (int j=1;j<=2*i;j++){
      	if (!j%2==0){
      		compteur = compteur++
      		covariance(i,compteur) =ligne[j]; 
      	}
      }
    2. j'ai un doute sur la déclaration de "ligne" (je sais que sur mon compilo ca ne passerait pas, il attend une expression constante)
    3. il manque un ";" à la fin de ta 1ere ligne, sauf si c'est une faute de frappe ^^

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.
      0  0

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 13
    Points
    13
    Par défaut
    Oui excuse moi j'ai confondu, le fichier d'entrée est une matrice tringulaire inférieure voici le code un peu trnaformé avec plus que 9 messages d'erreurs :
    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
    #include "essai.h"
     
     
     
    void main ()
    {
    	ifstream fichier("D:\\Documents and Settings\\AMOR\\My Documents\\Visual Studio Projects\\covariance.txt",ios::in);
    	char dim[2];
    	fichier.getline(dim,2);
    	ArrayLengthSpecifier dimension((int)dim[1]);
    	SymmetricMatrix covariance(dimension);
    	int i=0;
    	int compteur=0;
    	do
    	{
    		i++;
    		char ligne[2*i];
    		fichier.getline(ligne,2*i);
    		for (int j=1;j<=2*i;j++)
    		{
    			if (!j%2==0)
    			{
    				compteur = compteur++
    				covariance(i,compteur) =ligne[j]; 
    			}
    		}
     
    	}
    	while (!fichier.eof());
    	for (i=1;i<=dim[1];i++)
    	{
    		for (j>i;j<=dim[1];j++)
    		{
    			covariance(i,j)=covariance(j,i);
    		}
    	}
    	Matrix C;
    	C=chol(covariance);
    	cout << "le premier element de la matrice de Cholesky est:" << C(1,1) << "\n";
    }
    Le fichier de sortie est le suivant :
    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
     
     
    ------ Début de la régénération globale*: Projet*: CorrelSimul, Configuration*: Release Win32 ------
     
    Supprimer des fichiers de sortie et des fichiers intermédiaires du projet 'CorrelSimul', configuration 'Release|Win32'.
    Compilation...
    Stdafx.cpp
    Compilation...
    Submat.cpp
    sort.cpp
    Solution.cpp
    Sl_ex.cpp
    Newmatex.cpp
    Newmat9.cpp
    Newmat8.cpp
    Newmat7.cpp
    Newmat6.cpp
    Newmat5.cpp
    Newmat4.cpp
    Newmat3.cpp
    Newmat2.cpp
    Newmat1.cpp
    Myexcept.cpp
    evalue.cpp
    essai.cpp
    essai.cpp(17) : error C2057: expression de constante attendue
    essai.cpp(17) : error C2466: impossible d'allouer un tableau de taille constante 0
    essai.cpp(17) : error C2133: 'ligne'*: taille inconnue
    essai.cpp(21) : warning C4804: '%'*: utilisation risquée du type 'bool' dans l'opération
    essai.cpp(24) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'covariance'
    essai.cpp(32) : error C2065: 'j'*: identificateur non déclaré
    essai.cpp(32) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(32) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(34) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(34) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    CorrelSimul.cpp
    Cholesky.cpp
    Bandmat.cpp
     
    Le journal de génération a été enregistré à l'emplacement "file://d:\Documents and Settings\Amor\My Documents\Visual Studio Projects\correlation_c++\Release\BuildLog.htm"
    CorrelSimul - 9 erreur(s), 1 avertissement(s)
     
     
    ---------------------- Terminé ----------------------
     
        Régénération globale*: 0 a réussi, 1 a échoué, 0 a été ignoré
      0  0

  7. #7
    Membre du Club Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Points : 66
    Points
    66
    Par défaut
    Corrige les erreurs que je t'ai indiqué et ca ira mieux

    Citation Envoyé par Sachiel31
    Pour ce qui est des erreurs :

    1. ici j est inconnu puisqu'il n'est déclarer que dans la boucle for précédente.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      for (j>i;j<=dim[1];j++){
      	covariance(i,j)=covariance(j,i);
      }
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      for (int j=1;j<=2*i;j++){
      	if (!j%2==0){
      		compteur = compteur++
      		covariance(i,compteur) =ligne[j]; 
      	}
      }
    2. j'ai un doute sur la déclaration de "ligne" (je sais que sur mon compilo ca ne passerait pas, il attend une expression constante)

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.
      0  0

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 13
    Points
    13
    Par défaut
    effectivement, voiçi les transformaions que je réalise mais toujours un problème avec la variable j non défini
    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
     
    #include "essai.h"
     
     
     
    void main ()
    {
    	ifstream fichier("D:\\Documents and Settings\\AMOR\\My Documents\\Visual Studio Projects\\covariance.txt",ios::in);
    	char dim[2];
    	fichier.getline(dim,2);
    	ArrayLengthSpecifier dimension((int)dim[1]);
    	SymmetricMatrix covariance(dimension);
    	int i=0;
    	int compteur=0;
    	do
    	{
    		i++;
    		ligne = new char [2*i];
    		fichier.getline(ligne,2*i);
    		for (int j=1;j<=2*i;j++)
    		{
    			if (!j%2==0)
    			{
    				compteur = compteur++
    				covariance(i,compteur) =ligne[j]; 
    			}
    		}
    		delete ligne;	
    	}
    	while (!fichier.eof());
    	for (i=1;i<=dim[1];i++)
    	{
    		for (j>i;j<=dim[1];j++)
    		{
    			covariance(i,j)=covariance(j,i);
    		}
    	}
    	Matrix C;
    	C=chol(covariance);
    	cout << "le premier element de la matrice de Cholesky est:" << C(1,1) << "\n";
    }
    Le message d'erreur est le suivant :

    ------ Début de la régénération globale*: Projet*: CorrelSimul, Configuration*: Release Win32 ------

    Supprimer des fichiers de sortie et des fichiers intermédiaires du projet 'CorrelSimul', configuration 'Release|Win32'.
    Compilation...
    Stdafx.cpp
    Compilation...
    Submat.cpp
    sort.cpp
    Solution.cpp
    Sl_ex.cpp
    Newmatex.cpp
    Newmat9.cpp
    Newmat8.cpp
    Newmat7.cpp
    Newmat6.cpp
    Newmat5.cpp
    Newmat4.cpp
    Newmat3.cpp
    Newmat2.cpp
    Newmat1.cpp
    Myexcept.cpp
    evalue.cpp
    essai.cpp
    essai.cpp(17) : error C2065: 'ligne'*: identificateur non déclaré
    essai.cpp(18) : error C3861: 'ligne': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(21) : warning C4804: '%'*: utilisation risquée du type 'bool' dans l'opération
    essai.cpp(24) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'covariance'
    essai.cpp(24) : error C3861: 'ligne': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(27) : error C2541: 'delete'*: impossible de détruire des objets qui ne sont pas des pointeurs
    essai.cpp(27) : error C3861: 'ligne': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(32) : error C2065: 'j'*: identificateur non déclaré
    essai.cpp(32) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(32) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(34) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(34) : error C3861: 'j': identificateur introuvable, même avec une recherche qui dépend de l'argument
    CorrelSimul.cpp
    Cholesky.cpp
    Bandmat.cpp

    Le journal de génération a été enregistré à l'emplacement "file://d:\Documents and Settings\Amor\My Documents\Visual Studio Projects\correlation_c++\Release\BuildLog.htm"
    CorrelSimul - 11 erreur(s), 1 avertissement(s)


    ---------------------- Terminé ----------------------

    Régénération globale*: 0 a réussi, 1 a échoué, 0 a été ignoré
      0  0

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 13
    Points
    13
    Par défaut
    Excuse moi c bon j'avais pas mais de int pour la boucle for pour les i et les j que j'ai d'ailleurs remplacé pour éviter un conflis
    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
     
    #include "essai.h"
     
     
     
    void main ()
    {
    	ifstream fichier("D:\\Documents and Settings\\AMOR\\My Documents\\Visual Studio Projects\\covariance.txt",ios::in);
    	char dim[2];
    	fichier.getline(dim,2);
    	ArrayLengthSpecifier dimension((int)dim[1]);
    	SymmetricMatrix covariance(dimension);
    	int i=0;
    	int compteur=0;
    	do
    	{
    		i++;
    		ligne = new char [2*i];
    		fichier.getline(ligne,2*i);
    		for (int j=1;j<=2*i;j++)
    		{
    			if (!j%2==0)
    			{
    				compteur = compteur++
    				covariance(i,compteur) =ligne[j]; 
    			}
    		}
    		delete ligne;	
    	}
    	while (!fichier.eof());
    	for (int u=1;u<=dim[1];u++)
    	{
    		for (int v=u+1;v<=dim[1];v++)
    		{
    			covariance(u,v)=covariance(v,u);
    		}
    	}
    	Matrix C;
    	C=chol(covariance);
    	cout << "le premier element de la matrice de Cholesky est:" << C(1,1) << "\n";
    }
    Les messages d'erreurs dans ce cas sont :

    ------ Début de la régénération globale*: Projet*: CorrelSimul, Configuration*: Release Win32 ------

    Supprimer des fichiers de sortie et des fichiers intermédiaires du projet 'CorrelSimul', configuration 'Release|Win32'.
    Compilation...
    Stdafx.cpp
    Compilation...
    Submat.cpp
    sort.cpp
    Solution.cpp
    Sl_ex.cpp
    Newmatex.cpp
    Newmat9.cpp
    Newmat8.cpp
    Newmat7.cpp
    Newmat6.cpp
    Newmat5.cpp
    Newmat4.cpp
    Newmat3.cpp
    Newmat2.cpp
    Newmat1.cpp
    Myexcept.cpp
    evalue.cpp
    essai.cpp
    essai.cpp(17) : error C2065: 'ligne'*: identificateur non déclaré
    essai.cpp(18) : error C3861: 'ligne': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(21) : warning C4804: '%'*: utilisation risquée du type 'bool' dans l'opération
    essai.cpp(24) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'covariance'
    essai.cpp(24) : error C3861: 'ligne': identificateur introuvable, même avec une recherche qui dépend de l'argument
    essai.cpp(27) : error C2541: 'delete'*: impossible de détruire des objets qui ne sont pas des pointeurs
    essai.cpp(27) : error C3861: 'ligne': identificateur introuvable, même avec une recherche qui dépend de l'argument
    CorrelSimul.cpp
    Cholesky.cpp
    Bandmat.cpp

    Le journal de génération a été enregistré à l'emplacement "file://d:\Documents and Settings\Amor\My Documents\Visual Studio Projects\correlation_c++\Release\BuildLog.htm"
    CorrelSimul - 6 erreur(s), 1 avertissement(s)


    ---------------------- Terminé ----------------------

    Régénération globale*: 0 a réussi, 1 a échoué, 0 a été ignoré
      0  0

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    C'est pourtant assez explicite, la variable ligne n'est pas déclarée.

    PS : tu peux ne donner que les messages d'erreurs, pas la peine de coller la totalité du log de compilation à chaque fois
      0  0

  11. #11
    Membre du Club Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Points : 66
    Points
    66
    Par défaut
    La déclaration de ligne n'est pas bonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    do{
    	i++;
    	char ligne[2*i];
    	fichier.getline(ligne,2*i);
    	for (int j=1;j<=2*i;j++)
    	{
    ....
    	}
    }while (!fichier.eof());
    Le compilateur attend une expression constante dans "char ligne[]" pas un calcul.
    Comme la déclaration ne passe pas, c'est normal que tu aies des erreurs dessus et là où tu utilises ligne.

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.
      0  0

  12. #12
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 13
    Points
    13
    Par défaut
    Oui effectivement pardon pour cette erreur vraiment bête bon là ça a l'air de compiler mais j'ai un message bizarre dans la fenêtre dos que je ne comprend pas

    "This application has requested the runtime to terminate it an unsual way"
    Sais-tu pourquoi ça me fait ça ??

    Est ce que c'est du au fait que j'ai utilisé //Force:Multiple dans les options d'éditions du lien, tu te rapelles j'avais un problème de link avant!!

    Merci
      0  0

  13. #13
    Membre du Club Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Points : 66
    Points
    66
    Par défaut
    Oula ...
    ... je vois pas très bien ce qui pourrait en être la cause.

    Désolée

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.
      0  0

  14. #14
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 13
    Points
    13
    Par défaut
    BOnjour,

    Bon voilà j'ai réussi à faire un truc qui tourne pas mal mais qui bute sur l'extraction des noombres à partir du ligne,
    Si tu veux essayer le code suivant tu fais un copier coller dans un nouveau projet et tu le lance le fichier bloc notes qui va avec est le suivant :

    3
    0.000001
    0.000001 0.000002
    0.000001 0.000002 0.000003

    Le code est le suivant :
    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
     
     
    #include "essai.h"
    #include <iostream>
    #include <fstream>
    #include <iomanip>
    using namespace std;
     
     
    using namespace std;
     
    void main()
    {
      // Ouverture du fichier
    		 ifstream fichierEntree("c:\\test1.txt", ios::in);
     
      // Test d'ouverture du fichier
        if (!fichierEntree) {
            cerr << "Problème d'ouverture de fichier" << endl;
            exit(1);
        }
     
        char* ligne;
        int i = 0;
    	char * err = NULL;
    	//double z; 
     
        ligne = new char[10];
        fichierEntree.getline(ligne, 4);
        int conv1 = strtoul(ligne,0,10);
    	ArrayLengthSpecifier dimension(conv1);
    	cout << conv1 << std::endl;
    	SymmetricMatrix covariance(dimension);
     
        int longueur;
     
        do
    		 {
    		 i = i + 1;
    		 longueur = 9 * i + 1;
    		 ligne = new char [longueur];//format "0.00E+00"
    		 //donc 8 caractères; 9i=8i+ (i-1) espaces + élt nul terminal
    		 fichierEntree.getline(ligne,longueur);
    		 cout << ligne << endl;
     
     
    		 for (int j=1;j<=i;j++)
    		{
    			char temp[8];
    			for (int k=0;k<=7;k++)
    			{
    				temp[k] = ligne[(9*j)+ k - 2];//attention dimension de 0 à n-1
     
    			}
    			const char* caractere=temp;
    			cout << caractere << endl;
    			covariance(i,j) = strtod(caractere, &err); 
     
    		}
    		delete[] ligne;	
     
    		 }
    		 while (!fichierEntree.eof());
     
        fichierEntree.close();
    }
    En sortie j'ai un problème il extrait mal les nombres on dirait qu'il prend pos en compte le premier nombre l'erreur vient surement de mes boucle k et j. Mais je n'arrive pas à voir l'origine t'as une idée la dessus?
      0  0

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Bon, faudrait voir à respecter les règles un de ces quatre... Evite de multiplier les posts dans tous les sens, merci.

    http://www.developpez.net/forums/sho....php?p=1210509
      0  0

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/11/2014, 17h04
  2. Réponses: 8
    Dernier message: 09/12/2011, 18h48
  3. [Débutant] Lire un fichier contenant une matrice
    Par abdousoft dans le forum MATLAB
    Réponses: 5
    Dernier message: 17/05/2011, 12h14
  4. lire et écrire un fiche text contenant une matrice
    Par yuki89 dans le forum MATLAB
    Réponses: 1
    Dernier message: 18/12/2008, 11h58
  5. Lire un fichier contenant une matrice
    Par shmeta dans le forum Débuter
    Réponses: 5
    Dernier message: 01/12/2008, 10h57

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