Tableaux 2D dynamique
emilie790
Messages postés
7
Statut
Membre
-
Dalfab Messages postés 720 Statut Membre -
Dalfab Messages postés 720 Statut Membre -
Bonjour,
Voici mon programme :
J'ai beau hercher je ne vois pas où peut bien se trouver mon erreur.
A l'exécution j'initialise mes tableaux puis ils s'affichent mais à la permutation il y a un problème.
Le programme est sensé permuter les minimums des deux tableaux.
J'ai voulu faire une fonction qui recherche le minimum mais je débute à peine avec les "vector" donc...
Je sais qu'il y a des lignes que j'aurais dû coder autrement mais bon ce qui m'importe pour le moment c'est que le programme marche
Si quelqu'un a une idée...
Merci d'avance
PS : les "cout << "salut"; c'est pour repérer l'erreur
Voici mon programme :
#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;
void lire_Matrice(vector<vector<int> > &C, int nbL, int nbC)
{
for(int i=0; i<nbL; i++)
{
vector <int> vecTemp;
for(int j=0; j<nbC; j++)
{
cout << "Case [" << i << "][" << j << "] = " << endl;
int valeur;
cin >> valeur;
vecTemp.push_back(valeur);
}
C.push_back(vecTemp);
}
}
void affichage(vector<vector<int> > C)
{
for (int i = 0; i < C.size(); i++)
{
for (int j = 0; j < C[i].size(); j++)
{
cout << "Case [" << i << "][" << j << "] = " << C[i][j] << endl;
}
}
}
void permute(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
vector<vector<int> > A;
vector<vector<int> > B;
int nbL1, nbC1;
int nbL2, nbC2;
int choix = 1;
while(choix == 1)
{
cout << "quelle est le nbr de lignes de la matrtice 1" << endl;
cin >> nbL1;
cout << "quelle est le nbr de colonnes de la matrtice 1" << endl;
cin >> nbC1;
cout << endl;
cout << "quelle est le nbr de lignes de la matrtice 2" << endl;
cin >> nbL2;
cout << "quelle est le nbr de colonnes de la matrtice 2" << endl;
cin >> nbC2;
cout << endl;
//LECTURE DES DEUX MATRICES
cout << "Remplissez la matrice 1" << endl;
lire_Matrice(A, nbL1, nbC1);
//AFFICHAGE DE LA MATRICE 1
cout << "Voici la matrice 1 avant la permutation" << endl;
affichage(A);
cout << "Remplissez la matrice 2" << endl;
lire_Matrice(B, nbL2, nbC2);
//AFFICHAGE DE LA MATRICE 2
cout << "Voici la matrice 2 avant la permutation" << endl;
affichage(B);
//RECHERCHE MIN
cout << "Salut" << endl;
int indLmin1 = 10, indCmin1 = 10;
int indLmin2 = 10, indCmin2= 10;
int i = 0;
int j = 0;
int min1 = A[0][0]; // min1 est le minimum de la matrice 1
int min2 = B[0][0]; // min1 est le minimum de la matrice 2
for(i=0; i<A.size(); i++)
{
for(j=1; j<A[i].size(); j++)
{
if(A[i][i]<A[i][j])
{
min1 = A[i][j];
indLmin1 = i;
indCmin1 = j;
}
}
}
cout << indLmin1 << endl;
//
int tailleB1 = B.size();
i = 0;
j = 0;
for(i=0; i<tailleB1; i++)
{
for(j=1; j<B[i].size(); j++)
{
if(B[i][i]<B[i][j])
{
min2 = B[i][j];
indLmin2 = i;
indCmin2 = j;
}
}
}
//APPEL DE LA FONCTION "permute"
cout << "Salut" << endl;
permute(&A[indLmin1][indCmin1], &B[indLmin2][indCmin2]);
cout << "Salut" << endl;
cout << "Voici la matrice 1 apres la permutation" << endl;
//AFFICHAGE DES DEUX MATRICES
affichage(A);
cout << "Voici la matrice 2 apres la permutation" << endl;
affichage(B);
cout << "Que voulez-vous faire a present ?" << endl << endl;
cout << "Pour reinitialiser les matrices Tapez 1" << endl;
cout << "Pour quitter le programme Tapez 2" << endl;
cin >> choix;
while((choix != 1) && (choix != 2))
{
cout << "ERREUR, veuillez ne saisie que \"1\" ou bien `\"2\"" << endl;
cin >> choix;
}
}
return 0;
}
J'ai beau hercher je ne vois pas où peut bien se trouver mon erreur.
A l'exécution j'initialise mes tableaux puis ils s'affichent mais à la permutation il y a un problème.
Le programme est sensé permuter les minimums des deux tableaux.
J'ai voulu faire une fonction qui recherche le minimum mais je débute à peine avec les "vector" donc...
Je sais qu'il y a des lignes que j'aurais dû coder autrement mais bon ce qui m'importe pour le moment c'est que le programme marche
Si quelqu'un a une idée...
Merci d'avance
PS : les "cout << "salut"; c'est pour repérer l'erreur
A voir également:
- Tableaux 2D dynamique
- Tableau croisé dynamique - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Logiciel plan 2d gratuit - Télécharger - Architecture & Déco
- Liste déroulante dynamique excel - Guide
- 34 2d 3f 3d 31 - Guide
1 réponse
Bonjour,
ligne 22 :
ligne 83 :
ligne 85 :
ligne 100:
ligne 102:
Pour permuter des éléments d'une collection, il faut toujours éviter les pointeurs. Cela peut marcher ici mais s'est une très mauvaise habitude car les collections sont sujettes à des réorganisations internes et les pointeurs peuvent être destructeurs.
On peut utiliser les objets prévus pour :
Il est vrai qu'il existe aussi un algorithm qui trouve le min, mais cela détourne peut-être l'objectif de l'exercice ;-)
ligne 22 :
void affichage(vector<vector<int> > const& C ) // ne pas passer des 'gros' objets en copie
ligne 83 :
for( j = 0 ; j < A[i].size() ; j++ ) //ne pas oublier la première colonne
ligne 85 :
if ( A[i][j] < min1 ) // élément plus petit que le min
ligne 100:
for ( j = 0 ; j < B[i].size() ; j++ )
ligne 102:
if ( B[i][j] < min2 )
Pour permuter des éléments d'une collection, il faut toujours éviter les pointeurs. Cela peut marcher ici mais s'est une très mauvaise habitude car les collections sont sujettes à des réorganisations internes et les pointeurs peuvent être destructeurs.
On peut utiliser les objets prévus pour :
std::swap( A[indLmin1][indCmin1] , B[indLmin2][indCmin2] );
Il est vrai qu'il existe aussi un algorithm qui trouve le min, mais cela détourne peut-être l'objectif de l'exercice ;-)