Tableaux 2D dynamique
emilie790
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
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
- Fusionner deux tableaux excel - 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 ;-)