Calcul des 0 et 1 dans une matrice
Bonjours;
dans une matrice de taille m*n qui contient seulement des '0' et des '1', je veux calculer la succession des deux éléments dans chaque ligne.
Exemple:
Si la première ligne de la matrice est : 0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0
la première ligne de la matrice résultat doit être: 5 3 4 2 2
C'est-à-dire: 5 zéro, suivit de 3 un, suivit de 4 zéros, etc.…
et ainsi de suite pour chaque ligne
j'ai dèjà la reponse pour le cas d'un tableau:
Code:
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 28 29 30 31 32 33 34 35 36 37
|
int main(int argc, char * argv[])
{
int k=0;
//declaration & initialisation
int *t=new int[ligne];
int *resultat=new int[ligne];for(k=0; k<ligne; k++){resultat[k]=0;}
// remplir le tableau à partir d'un fichier
t=loadTableau(fff,fichier,ligne);
int current = 0;
int current_pos = 0;
for(k=0; k<ligne*colone; k++){
if(t[k] == current)
resultat[current_pos]++;
else
{
resultat[++current_pos]++;
current = t[k];
}
}
k = 0;
//overture du fichier resultat
finput=fopen(fichier_res,"a");
// ecriture du résultat
while(k < ligne && resultat[k] > 0){
fprintf(finput,"%d ",resultat[k]);
k++;
}fprintf(finput,"\n");
} |
j'ai essayé de généraliser ce code pour le cas d'une matrice comme suit:
Code:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
int main(int argc, char * argv[])
{
int k=0,s=0;
int **t;
t=new int*[ligne ];
for(k=0; k<ligne ; k++){ t[k]=new int[colone];}
int **resultat;
resultat=new int*[ligne ];
for(k=0; k<ligne; k++){ resultat[k]=new int[colone];}
for(k=0; k<ligne; k++){for(s=0; s<colone; s++){resultat[k][s]=0;}}
t=loadMatrice(f,fichier,ligne,colone);
int current = 0;
int current_pos = 0;
for(k=0; k<ligne; k++){
for(s=0; s<colone; s++){
if(t[k][s] == current)
resultat[current_pos][s]++;
else
{
resultat[++current_pos][s]++;
current = t[k][s];
}
}}
k = 0,s=0;
finput=fopen(fichier_res,"a");
while(k<ligne && s<colone && resultat[k][s] > 0){
fprintf(finput,"%d %d %d\n ",k,s,resultat[k][s]);
k++;s++;}fprintf(finput,"\n");
system("pause");
return 0;
} |
malheureusement ça donne pas le bon résultat ! y a-t-il d'autre truc pour faire cette généralisation, ou autre idée qui répond au problème ?
cordialement