Calcule de 0 et 1 dans un tableau

Résolu/Fermé
elattarmh Messages postés 8 Date d'inscription lundi 31 décembre 2012 Statut Membre Dernière intervention 7 mars 2013 - 6 janv. 2013 à 17:58
elattarmh Messages postés 8 Date d'inscription lundi 31 décembre 2012 Statut Membre Dernière intervention 7 mars 2013 - 6 janv. 2013 à 22:20
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:
#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

3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 6/01/2013 à 18:39
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
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
6 janv. 2013 à 18:39
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é.
1
elattarmh Messages postés 8 Date d'inscription lundi 31 décembre 2012 Statut Membre Dernière intervention 7 mars 2013 1
6 janv. 2013 à 22:17
merci bien pour les remarques ! effectivement l'idée de KX est trés simple et utile
0
elattarmh Messages postés 8 Date d'inscription lundi 31 décembre 2012 Statut Membre Dernière intervention 7 mars 2013 1
6 janv. 2013 à 22:20
merci KX, je ne sais pas pourquoi j'ai compliqué les choses ! votre idée est plus simple, et c'est ça ce que je veux .
0