Calcule de 0 et 1 dans un tableau
Résolu
elattarmh
Messages postés
10
Statut
Membre
-
elattarmh Messages postés 10 Statut Membre -
elattarmh Messages postés 10 Statut Membre -
Bonjour,
dans un tableau qui contient seulement des '0' et des '1', je veux calculer la succession des deux éléments. Exemple:
Si le tableau de départ est : 0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0
Le tableau de 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....
Le résultat que j'ai obtenu est: 5 3 4 2 Ce qui veut dire que les deux derniers zéros ne sont pas comptés !
Ma question est: comment faire pour avoir le bon résultat ?
Le code utilisé est le suivant:
cordialement
dans un tableau qui contient seulement des '0' et des '1', je veux calculer la succession des deux éléments. Exemple:
Si le tableau de départ est : 0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0
Le tableau de 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....
Le résultat que j'ai obtenu est: 5 3 4 2 Ce qui veut dire que les deux derniers zéros ne sont pas comptés !
Ma question est: comment faire pour avoir le bon résultat ?
Le code utilisé est le suivant:
#include <stdlib.h>
#include <stdio.h>
void main(){
int k,indice=0,couleur=0,noire=0,blanc=0;
int t[16]={0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0};
int *resultat; resultat=(int *)malloc(20*sizeof(int*));
// calcule de noire et blanc
for(k=0;k<16;k++){
if(t[k]==couleur)
{
noire++;resultat[indice]=blanc;indice++;blanc=0;
}else{
blanc++;resultat[indice]=noire;indice++;noire=0;
}
}
// affichage de resultat
for(k=0;k<16;k++){
if(resultat[k]==0) continue; else
printf("%d\t",resultat[k]);
}
system("pause");
}
cordialement
A voir également:
- Calcule de 0 et 1 dans un tableau
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
3 réponses
Je me perds pas mal dans ton code, avec tes couleurs, tes indices, blanc, noir... à quoi tout cela sert-il ?
#include <stdlib.h>
#include <stdio.h>
#define max 16
int main()
{
int t[max]={0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0};
int resultat[max];
int k;
int index = 0;// indice du tableau resultat
resultat[0]=1;
for(k=1; k<max; k++)
{
if (t[k]==t[k-1])
resultat[index]++; // on ajoute 1 à la case courante
else
resultat[++index]=1; // on passe à la case suivante
}
for(k=0; k<=index; k++)
printf("%d ",resultat[k]);
system("PAUSE");
return 0;
}La confiance n'exclut pas le contrôle
Quelques remarques sur ton code :
resultat=(int *)malloc(20*sizeof(int*));
Attention, ce n'est pas sizeof(int*) mais sizeof(int). Le tableau contient des int, pas des int*.
Correction : resultat=malloc(20*sizeof(int));
Le cast est inutile.
Et pourquoi pas simplement : int resultat[20] ? Voire même int resultat[max]; ?
Pourquoi commencer la comparaison avec couleur=0 ? Si ton tableau commence par 1, ça risque de foirer. Il faut plutôt faire couleur=t[0];
et commencer la boucle k à 1;
Sinon, regarde celui de KX, plus optimisé.
resultat=(int *)malloc(20*sizeof(int*));
Attention, ce n'est pas sizeof(int*) mais sizeof(int). Le tableau contient des int, pas des int*.
Correction : resultat=malloc(20*sizeof(int));
Le cast est inutile.
Et pourquoi pas simplement : int resultat[20] ? Voire même int resultat[max]; ?
Pourquoi commencer la comparaison avec couleur=0 ? Si ton tableau commence par 1, ça risque de foirer. Il faut plutôt faire couleur=t[0];
et commencer la boucle k à 1;
Sinon, regarde celui de KX, plus optimisé.