begin process at 2012 05 29 13:01:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

multiplication de 2 vecteurs vers marices C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

multiplication de 2 vecteurs vers marices C++

dimanche 23 mars 2008 à 16:03:15 | multiplication de 2 vecteurs vers marices C++

cadet1401

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 <iostream.h>
#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);
}


Merci Beaucoup.

KD

dimanche 23 mars 2008 à 17:51:55 | Re : multiplication de 2 vecteurs vers marices C++

jfrancois

Réponse acceptée !

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 <iostream.h>
#include <iomanip.h>
#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);


   /* --- Saisir les hauteurs */
   for (i=0 ; i<n1 ; i++)
   {
      cout << "Hauteur " << i + 1 << " : ";
      cin >> H[i];
   }
   cout << endl;


   /* --- Saisir les diamètres */
   for (j=0 ; j<n2 ; j++)
   {
      cout << "Diamètre " << j + 1 << " : ";
      cin >> D[j];
   }
   cout << endl;


   /* --- Calcul des volumes dans la matrice */
   for (i=0 ; i<n1 ; i++)
   {
      for (j=0 ; j<n2 ; j++)
      {
         V1[i][j]       = H[i] * D[j];
         V2[i * n1 + j] = H[i] * D[j];
      }
   }


   /* --- Afficher les éléments de la matrice */
   cout << "Volumes avec V[i][j] :" << endl;
   for (i=0 ; i<n1 ; i++)
   {
      for (j=0 ; j<n2 ; j++) cout << setw(3) << V1[i][j] << " ";
      cout << endl;
   }
   cout << endl;

   cout << "Volumes avec V[k] :" << endl;
   for (i=0 ; i<n1 ; i++)
   {
      for (j=0 ; j<n2 ; j++) cout << setw(3) << V2[i * n1 + j] << " ";
      cout << endl;
   }
   cout << endl;


   /* --- Libérer la mémoire allouée */
   free(H);
   free(D);
   free(V1);
   free(V2);
}

Ce qui donne (avec Visual C++ 6.0) :

Nombre de hauteurs possibles (3 à 8) : 4
n1 = 4

Nombre de diametres possibles (2 à 6) : 3
n2 = 3

Hauteur 1 : 10
Hauteur 2 : 11
Hauteur 3 : 12
Hauteur 4 : 13

Diamètre 1 : 4
Diamètre 2 : 5
Diamètre 3 : 6

Volumes avec V[i][j] :
 40  50  60
 44  55  66
 48  60  72
 52  65  78

Volumes avec V[k] :
 40  50  60
 44  55  66
 48  60  72
 52  65  78

Jean-François

dimanche 23 mars 2008 à 18:07:00 | Re : multiplication de 2 vecteurs vers marices C++

cadet1401

merci pour cette rapidité jean françois

je viens de regarer le code ...

j'ai juste une partie que je n'arrive pas bien à comprendre.
il s'agit de :

   cout << "Volumes avec V[i][j] :" << endl;
   for (i=0 ; i<n1 ; i++)
   {
      for (j=0 ; j<n2 ; j++) cout << setw(3) << V1[i][j] << " ";
      cout << endl;
   }
   cout << endl;


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

KD
dimanche 23 mars 2008 à 18:17:59 | Re : multiplication de 2 vecteurs vers marices C++

jfrancois

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 :  [ Lien ]


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.

Jean-François

dimanche 23 mars 2008 à 18:28:48 | Re : multiplication de 2 vecteurs vers marices C++

cadet1401

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

dimanche 23 mars 2008 à 18:35:59 | Re : multiplication de 2 vecteurs vers marices C++

jfrancois

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 !

Jean-François

lundi 24 mars 2008 à 11:10:40 | Re : multiplication de 2 vecteurs vers marices C++

jfrancois

Je viens de m'apercevoir que j'ai oublié de désallouer les colonnes de V1 à la fin !

for (i=0 ; i<n1 ; ++i) free(V1[i]);
puis
free(V1);

Jean-François

lundi 24 mars 2008 à 16:36:13 | Re : multiplication de 2 vecteurs vers marices C++

cadet1401

ah bien merci, je ne m'en etait pas rendu compte non plus.
merci bien

KD


Cette discussion est classée dans : int, cout, cin, n1, n2


Répondre à ce message

Sujets en rapport avec ce message

Bitwise... [ par MeltedMind ] Wise ou not wise là est la question.Je me demandais... sur le fonctionnement primaire de nos petites machines. 1+ 1 = 10, c'est bien connu mais comme besoin d'aide pour corrigé mon exercice [ par darktn ] Salut Tout le monde , j'ai quelque bug dans ce programme besoin d'aide , Le But De faire une deuxième matrice contient les Caractère qui ce trouve dan exercice C++ [ par maina87 ] Bonjour, je suis débutante e C++ et j'ai eu a faire a un exercice, svp corrigez le moi: Voilà l'exercice: Donnez le résultat du code suivant: int verification entrée cin [ par fhoest ] Bonjour, je voudrai faire une vérification sur une entrée std::cin mon problème est que si je met par exemple ll et ensuite je valide par la touche "r c++ [ par yesoun1 ] je serai reconnaissant de votre aide ;) et merci d'avance[^^happy10] quel est le rôle de "*" ?? for(unsigned int i=0; i < hauteur; i++) { for fork et execvp [ par fullpirates ] Bon je vous explique j'ai un travail de mi-session à remettre pour mercredi et j'ai essayer bien comme mal a faire fonctionner la commande execvp ... [clos] bjr, pourriez vous m'aider a terminer ce progmme stp? [ par ley1805 ] #include #include #include #include struct noeud { struct noeud *gauche; int info; struct noeud *droite; }; typedef struct noeud *pnoeud; pno probleme de debug [ par elhajjajireda ] si le vous plait j'ai placé un breakpoint sur ma fonction principale linge22 ou s'est écrit l'instruction " Image2.Load(argv[2]); sur Windows et avec convertir du cpp en VB.net ou VB [ par Taur33 ] bonsoir à tous, j'aurais besoin de convertir le code suivant en vb je précise que j'ai déjà essayé des logiciels qui soit disant le faisait mais cela


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales