C++, fichier xls et matrices

Résolu/Fermé
hassen62 - 25 sept. 2007 à 17:10
mamiemando Messages postés 33338 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 novembre 2024 - 4 avril 2009 à 14:29
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.
A voir également:

10 réponses

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
mamiemando Messages postés 33338 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 novembre 2024 7 802
25 sept. 2007 à 18:45
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
Mamiemando,
c'est vraiment bien expliqué de votre part. Merci infiniment.
0
mamiemando Messages postés 33338 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 novembre 2024 7 802
6 oct. 2007 à 14:04
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

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

Posez votre question
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
miloup_raf Messages postés 3 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 10 juin 2009
4 avril 2009 à 00:55
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
mamiemando Messages postés 33338 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 novembre 2024 7 802
4 avril 2009 à 14:29
Pose ta question dans un nouveau fil de discussion :
http://www.commentcamarche.net/forum/forum 3 programmation

Merci
0
mamiemando Messages postés 33338 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 novembre 2024 7 802
26 sept. 2007 à 09:57
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
mamiemando Messages postés 33338 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 novembre 2024 7 802
28 sept. 2007 à 14:13
Pas de soucis, bon courage et bonne continuation !
-1
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