C++, fichier xls et matrices

Résolu
hassen62 -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Salut tout le monde,
Je suis un débutant en C++ , je voudrais vous poser une question comment je peu lire un fichier xls à partir de C++. J'ai une question de plus, est ce qu'il y a un bon cours de C++ qui traite les matrices, le calcul matriciel et l'algèbre linéaire. Merci d'avance.
Hassen.
Configuration: Windows XP
Internet Explorer 6.0

10 réponses

  1. hassen62
     
    Merci Mamiemando pour la réponse, mais lorsque nous avons une librairie C++ comment l'inclure et comment l'appeler lorsqu'on commence un programme.
    Je m'excuse pour mes questions basiques mais je suis un débutant en C++.
    Merci,
    Hassen.
    3
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Il faudrait que ce fichier excel soit convertit au format csv ou tsv. Ainsi ça devient un simple fichier texte qu'il est facile de parser en C++. En fait c'est principalement dû au fait que le format xls est un format binaire dont les spécifications ne sont pas données par microsoft. A moins qu'ils fournissent une librairie C++ permettant de les manipuler, ce genre de fichier est donc inexploitable (d'où l'idée de les exporter dans un fichier texte csv ou tsv).

    Le C++ ne fournit pas de base de container pour les matrices et donc pas d'outils pour l'algèbre linéaire. Cependant certaines librairies permettent de les manipuler "facilement", comme par exemple la lib boost (gratuite) :
    https://www.boost.org/doc/libs/1_72_0/libs/numeric/ublas/doc/
    http://www.boost.org/libs/numeric/ublas/doc/matrix.htm
    http://www.boost.org/libs/numeric/ublas/doc/products.htm
    http://www.boost.org/libs/numeric/ublas/doc/blas.htm

    Bonne chance
    1
  3. hassen62
     
    Mamiemando,
    c'est vraiment bien expliqué de votre part. Merci infiniment.
    0
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour Ahmed

    1) Merci de ne pas poster dans un sujet résolu
    2) Merci de ne pas poster un problème différent dans un même sujet
    => ouvre un nouveau sujet sur le forum programmation
    3) Merci de ne pas nous demander de te faire tes exercices à ta place. On peut t'aider si tu as des difficultés, mais il faut au moins que tu nous montre ce que tu as fait et ce qui te bloque.
    => rappelle dans le topic que tu va ouvrir l'énoncé de ton exercice, ce que tu as fait jusqu'ici, et ce qui te bloque.

    Bonne chance
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. anonyme
     
    Bonjour,
    vous ne me connaissez pas, mais je veux juste dire a ahmed

    TU ES FORT MON PETIT!!! je ne sais pas ce qui t'as pris de poster ca ici tu a l'air tellement désespéré!!! :-D :-D

    bon a toute les gas mon amie veut vous dire un mot de même

    si jamais tu trouves quelqu'un qui te resoud tes exos juste poste la reponse sur le site de poly :D on va tous en profiter. attention ta jusqua la fin des conges donc bn grouille toi un peu quoi :-D
    0
  7. miloup_raf Messages postés 3 Date d'inscription   Statut Membre
     
    Bonjour à tous,

    J'ai un programme à écrire en C. Ce programme doit m'afficher 342 valeurs pour 130 variables (matrice de 342x130). La question que j'ai à poser est : Est-ce qu'il y a moyen d'enregistrer mes résultats à partir du C en fichier Excel, vu que je dois dessiner les 130 courbes sur Excel? (instrucion qui permet d'enregistrer les résultats de mon programme en format Excel)

    Merci pour vos réponses.
    0
  8. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Il n'y a pas de soucis. Dans le cas de boost c'est assez simple car à part quelques parties très spécifiques, il n'y a que des .hpp donc il suffit de rajouter au niveau du compilateur l'option indiquant ou trouver les headers. Par exemple sous linux (ici debian) :
    1) J'installe boost
    aptitude install libboost-dev

    2) Ensuite au moment de compiler mon prgramme (le compilateur s'appelle g++ sous linux) je lui dis ou sont les headers (en l'occurrence /usr/include :
    g++ -I/usr/include -o plop.exe plop.cpp

    Cette option permet de dire au compilateur que quand il trouvera un #include <...>, il faudra qu'il aille potentiellement chercher dans ce répertoire pour trouver son bonheur. Par exemple grâce à cette option pour inclure /usr/include/boost/utility.hpp il suffira de taper :
    #include <boost/utility.hpp>

    En l'occurrence comme sous linux /usr/include est le répertoire standard des headers, cette option est en fait superflue.
    Si tu utilises dev-cpp sous windows, vu qu'il repose sur g++ également, le principe est le même. Pour les autres compilateurs, voir la doc.

    Bonne chance
    -1
  9. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Pas de soucis, bon courage et bonne continuation !
    -1
  10. ahmed
     
    Bonjour,

    j'ai un probleme avec ces exercices en langage C++, je suis debutant, pourrez vous mais donner la correction avec detail. je suis sur que ça va ameliorer mon niveau.

    exercice 1 Soit le fichier texte marches.txt dont chaque ligne contient 2 nombres entiers
    compris dans l’intervalle [-9, 9]. Le nombre de ligne du fichier est inconnu.
    Écrire un programme qui lit les valeurs contenues dans le fichier et qui produit
    l’affichage suivant selon les valeurs lues.
    Le premier nombre correspond au nombre de caractères * consécutifs à être
    affichés horizontalement, le second , le nombre de caractères * consécutifs à être
    affichés verticalement. Par exemple, deux lignes contenant respectivement les
    valeurs 7 et 3 et 2 et 5 entraînera l’affichage suivant.
    *******
    *
    *
    ******
    *
    *

    Si une valeur est négative, cela signifie qu’un saut de ligne (le caractère ‘\n’) doit
    être effectué avant d’afficher le nombre de caractères correspondant à la valeur
    absolue de l’entier.

    exercice 2. Écrire un programme de lancer de dé. Soient n (n≤10) le nombre de faces du dé,
    numérotées de 1 à n, et m le nombre de lancés. Les valeurs n et m sont saisies au
    clavier. Un lancé s’effectue grâce à l’instruction suivante :
    p = 1 + rand() % n; // p donne le numéro de la face du dé résultant du lancé
    Lorsque tous les lancés ont été effectués, le programme affiche les résultats sous
    un format similaire à celui-ci (les fréquences données ici sont évidemment
    purement indicatives; leur somme doit toutefois être égale à m) :
    Face Fréquence
    1 25
    2 12
    3 14
    . .
    . .
    n 27

    Remarque 1 : vous veillerez à ajouter l’instruction suivante au début de la section
    void main() de votre programme :
    srand((unsigned)time(NULL));
    Remarque 2 : vous inclurez les librairies <cstdlib> et <ctime> en tête de votre
    programme.

    exercice 3. Écrire un programme qui détermine le nombre moyen de mots par ligne dans un
    fichier texte. Le programme lit tout d'abord le nom du fichier. Par la suite, il lit ce
    fichier en déterminant le nombre de mots et le nombre de lignes. Finalement le
    programme calcule et affiche le nombre de mots par ligne.
    Note: Deux mots sont séparés d'un et un seul espace. Il n'y a aucun caractère de
    ponctuation dans le fichier.
    Pour simplifier le traitement on considère que deux mots liés par une
    apostrophe ne correspondent qu’à un seul mot. Par exemple, « l’un », est
    compté comme un seul mot.
    Le fichier, td3_ex3.txt, peut être utilisé pour tester votre programme.

    exercice 4 . Écrire un programme qui demande et lit la dimension d’une matrice carrée. Cette
    dimension doit être une valeur entière comprise entre 2 et 10. Par la suite, le
    programme lit toutes les valeurs de la matrice ligne par ligne. Le nombre de
    valeurs par ligne doit être égal à la dimension spécifiée. Tous les éléments de la
    matrice sont des entiers.

    A partir de la matrice lue, le programme génère une seconde matrice carrée de
    même dimension dont les valeurs correspondent aux carrés des valeurs de la
    matrice lue. Ensuite, le programme affiche, ligne par ligne, la matrice initiale, la
    matrice initiale transposée et la transposée de la matrice contenant les valeurs
    carrées.
    La matrice B, transposée de la matrice A, est la matrice dont les éléments sont
    définis comme :
    bij = aji pour ∀i , ∀j

    exercice 5. Soit une matrice carrée de dimension n, dont tous les éléments sont des entiers
    compris dans l’intervalle [0, 9]. Pour une telle matrice on définit la l,m-densité
    d’une ligne comme étant le nombre de fois que la somme de l valeurs
    consécutives d’une même ligne vaut m.
    Par exemple, soit la ligne contenant les valeurs
    2 1 6 9 0 7 3 6
    la 3,16-densité de cette ligne est 3 et sa 4,16-densité vaut 2 car
    2 + 1 + 6 = 9 2 + 1 + 6 + 9 = 18
    1 + 6 + 9 = 16 1 + 6 + 9 + 0 = 16
    6 + 9 + 0 = 15 et 6 + 9 + 0 + 7 = 22
    9 + 0 + 7 = 16 9 + 0 + 7 + 3 = 19
    0 + 7 + 3 = 10 0 + 7 + 3 + 6 = 16
    7 + 3 + 6 = 16
    La l,m-densité d’une colonne est définie de façon similaire.
    La l,m-densité d’une matrice est la somme des l,m- densité de chaque ligne et de
    chaque colonne.
    Dans le fichier texte Matrice0_9.txt, on retrouve sur la première ligne les 3
    entiers n, l, m. Les n lignes suivantes contiennent les éléments de la
    matrice.
    Écrire un programme qui demande le nom du fichier, l’ouvre et lit les
    informations qu’il contient. À partir de ces informations, le programme calcule et
    affiche la l,m-densité de chaque ligne, la l,m-densité de chaque colonne et la
    l,m-densité de la matrice

    message evoyeé par L'Étudiant Ahmed
    -1