Salut,
Comme on est dans le forum C++, autant essayer de travailler... en C++...
Le plus facile, c'est une fonction potentiellement récursive sous la forme de
Le plus facile est de disposer d'une variable "globale" (ici, nomme taille)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
int** Agrandit(int** depart)
{
int** tempo=new int*[taille+1];
for(int i=0;i<taille;i++)
{
//allocation des colone, puis copie des éléments déjà connus
tempo[i]=new int[taille+1]
for(int j=0;j<taille;j++)
{
tempo[i][j]=depart[i][j];
}
//déclaration de l'élément surnumeraire pour la ligne envisagée
tempo[i][taille]= whatyouwant;
}
delete[] depart;
++taille;
return tempo;
} |
une autre solutions serait de passer la taille sous forme de parametre (en tant que reference,; pour qu'elle soit mise à jour automatiquement)
Le prototype deviendrait
int** Agrandit(int** depart, size_t &taille);
et elle serait appelée sous une forme ressemblant à
1 2 3 4 5 6 7 8 9 10 11 12
|
void mafonct
{
//le début du code de la fonction, dont la déclaration de la matrice et de sa
//taille
int** matrice;
size_t taille;
// <...>
matrice=Agrandit(matrice, taille);
//<...>
} |
Ceci dit, comme je suis particulièrement attaché à l'utilisation des classes définies dans l'espace de nommage std, j'aurais meme t'endance à te conseiller l'utilisation de la classe vector, qui te facilitera grandement la tache...
Comme il s'agit d'une matrice, il s'agira en réaliter de travailler avec un vector de vector du type qui t'intéresse...
Ici, cela prendra la forme d'un
1 2
|
std::vector<std::vector<int> > matrice; |
nota: remarque l'espace entre le premier > et le second: c'est pour éviter que le compilateur ne confonde avec l'operateur >> (de cin, par exemple)...
La fonction qui permettra d'augmenter la taille de ta matrice prendra la forme de
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
void Agrandit(std::vector<std::vector<int> > & ref)
{
size_t taille;
taille=ref.size();
//redimentionnement de la matrice
ref.resize(taille+1);
//et des colones
for(unsigned int i=0;i<ref.size();i++)
{
ref[i].resize(taille+1);
}
//définition des valeurs des colones manquantes
for(unsigned int i=0;i<taille;i++)
{
//il y a une logique à suivre, ici, je décide juste
//de mettre les valeurs à 15 pour l'exemple
ref[i][taille]=15;
}
//définition des valeurs de la derniere ligne
for(unsigned int i=0;i<=taille;i++)
{
//il y a une logique à suivre, ici, je décide juste
//de mettre les valeurs à 30 pour l'exemple
ref[taille][i]=30;
}
} |
et sera appelée sous la forme de
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
void mafonct()
{
//declaration de la matrice
std::vector<std::vector<int> > matrice;
matrice.resize(3);
//allez, remplissons une matrice carree de 3*3, pour l'exemple
for(unsigned int i=0;i<3;i++)
{
matrice[i].resize(3);
for(unsigned int j=0;j<3;j++)
{
std::cout<<"introduisez l'element ["<<i<<"]["<<j<<"] de la matrice"
<<std::endl;
std::cin>>matrice[i][j];
}
}
// l'appel à la fonction
Agrandit(matrice);
} |
Il faudra juste penser à vider correctement la matrice avant de quitter...
Cela se fera sous la forme de
1 2 3 4 5 6 7 8 9 10
|
void VideMatrice(std::vector<std::vector<int> > &ref)
{
for(unsigned int i=0;i<ref.size();i++)
{
ref[i].clear();
}
ref.clear();
} |
Edit: bien que le code précédent compilait, il fournissait des valeurs incohérentes, c'est la raison pour laquelle je l'ai édité... le code actuel fonctionne sans aucun problème...
Partager