cadet1401
Messages postés11Date d'inscriptiondimanche 23 mars 2008StatutMembreDernière intervention28 mars 2008
-
23 mars 2008 à 16:03
cadet1401
Messages postés11Date d'inscriptiondimanche 23 mars 2008StatutMembreDernière intervention28 mars 2008
-
24 mars 2008 à 16:36
voila j'essaye de réaliser un programme dans lequel je multiplie 2 vecteurs et dont le resultat doit etre affiché dans une matrice.
voici mon code source .. avec l'erreur bien entendue.
si vous voyez comment remédier a cette erreur , je vous serait tres reconnaissant.
#include
#include <stdlib.h>
void main ()
{
int i,j,m ,n1=0, n2=0;
/* on entre le nombre de hauteurs possible et on verifie si le nombre et bien compris entre 3 et 8*/
cout << "Entrer le nombre de hauteur possible" << endl;
cin >> n1;
while (n1<3 || n1>8)
{
cout << "Entrer le nombre de hauteur possible" << endl;
cin >> n1;
}
cout << "n1 = " << n1<<endl;
/* on entre le nombre de diametre possible et on verifie si le nombre et bien compris entre 2 et 6*/
cout << "Entrer le nombre de diametre possible" << endl;
cin >>n2;
while (n2<2 || n2>6)
{
cout << "Entrer le nombre de diametre possible" << endl;
cin >> n2;
}
cout << "n2 = " << n2<<endl;
/* on declare les vecteurs et la matrice */
int *H, *D, **V;
/* allocation dynamique de la mémoire car on ne sait pas combien de place prend le vecteur */
H= (int*) malloc (sizeof (int)*n1);
D= (int*) malloc (sizeof (int)*n2);
m=n1*n2; /* n1*n2 pour pas le mettre dans le malloc */
V= (int **) malloc (sizeof (int*)*m);
/* on va mettre les hauteurs dans un vecteur qui comporte n1 position */
cout << "Entrer les valeurs des hauteurs " <<endl;
for ( i=0; i<n1; i++)
{
cin>>H[i];
}
/* on va mettre les diametres dans un vecteur qui comporte n2 position */
cout << "Entrer les valeurs des diametres " <<endl;
for ( j=0; j<n2; j++)
{
cin>>D[j];
}
/* on va calculer les volumes et les placer dans une matrice */
for ( i=0; i<n1; i++)
{
for ( j=0; j<n2; j++)
{
V[i][j]=(H[i])*(D[j]);
}
}
/* on va afficher les elements de la matrice */
for ( i=0; i<n1; i++)
{
for ( j=0; j<n2; j++)
{
cout << V[i][j];
}
}
/* on libere l'espece des vecteurs et matrice */
free (H);
free (D);
free (V);
}
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 23 mars 2008 à 17:51
Bonjour,
Il y a un mélange dans ce programme : V est sensé être un pointeur de matrice (pour être utilisé avec des V[i][j]) mais il est dimensionné comme un vecteur (donc utilisé avec des V[k]) ! Voici une rapide réécriture du programme (avec des simplifications) et avec les 2 méthodes d'utilisation de la matrice :
#include
#include
#include <stdlib.h>
void main ()
{
int i,j,m,n1,n2;
/* --- Nombre de hauteurs possibles */
n1 = 0;
while (n1<3 || n1>8)
{
cout << "Nombre de hauteurs possibles (3 à 8) : ";
cin >> n1;
}
cout << "n1 = " << n1 << endl << endl;
/* --- Nombre de diametres possibles */
n2 = 0;
while (n2<2 || n2>6)
{
cout << "Nombre de diametres possibles (2 à 6) : ";
cin >> n2;
}
cout << "n2 = " << n2 << endl << endl;
/* --- Allouer la mémoire pour le vecteur des hauteurs */
int *H;
H = (int*)malloc(sizeof(int) * n1);
/* --- Allouer la mémoire pour le vecteur des diamètres */
int *D;
D = (int*)malloc(sizeof(int) * n2);
/* --- Allouer la mémoire pour la matrice des volumes */
/* --- Version utilisable avec V1[i][j] */
int **V1;
V1 = (int**)malloc(sizeof(int*) * n1); // lignes
for (i=0 ; i<n1 ; i++)
V1[i] = (int*)malloc(sizeof(int) * n2); // colonnes / ligne
/* --- Allouer la mémoire pour la matrice des volumes */
/* --- Version utilisable avec V1[k] */
int *V2;
m = n1 * n2;
V2 = (int*)malloc(sizeof(int) * m);
le setw(3) , il permet de réaliser quoi ?
désolé de poser une question qui peut etre evidente à vos yeux mais je ne comprend pas trop .
sinon pour l'allocation de memoire , je pense avoir compris
je suis pas encore assez experimenté en c++.
d'avance , merci de votre aide
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 23 mars 2008 à 18:17
Pas de quoi !
setw() est un manipulateur (avec l'include iomanip.h) qui permet de fixer la largeur de la sortie sur cout.setw set width fixer largeur.
Ici les nombres seront formatés sur 3 chiffres (pour garder un alignement à la présentation de la matrice).
Voir ici quelques infos sur ces manipulateurs : http://www.ann.jussieu.fr/courscpp/Sections/Sect09-I0.html
Problème de Copier-Coller !!!
Dans le commentaire :
/* --- Allouer la mémoire pour la matrice des volumes */
/* --- Version utilisable avec V1[k] */
Il s'agit bien sûr, dans ce cas là, d'un vecteur V2 utilisé comme une pseudo matrice.
cadet1401
Messages postés11Date d'inscriptiondimanche 23 mars 2008StatutMembreDernière intervention28 mars 2008 23 mars 2008 à 18:28
Ah d'accord , je viens de bidouiller un peu le programme pour regarder à quoi servait cette fonction setw ...
je comprend mieux maintenant , en quelque sorte , il permet d'obtenir une "belle" matrice avec les nombres bien rangé ...
merci beaucoup pour cette aide qui m'a été d'une grande utilitée.
aps facile le c++ , je pense que j'en apprendrais tout les jours.
KD
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 23 mars 2008 à 18:35
Oh que oui ! Il y a tellement de notions différentes ou nouvelles. Ca va faire 20 ans que je le pratique (depuis le premier compilateur C++ sur PC : le Zortech C++ version 1 créé par Bjarne Stroustrup lui-même, inventeur du C++) et j'en apprend encore !