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