bonjour à tous

il s'agit d'entrer au clavier un nombre n quelconque de bits commencent par 1 ( le bit du plus grand poids doitetre à 1)(exemple si n= 7, 1000100 ou 1101001 etc )
en plus il faut memoriser ces bits entrés au clavier dans un tableau de int et pour chaque groupe de 0 ou de 1 contigues il faut verifier qu'il donne k (entier entré au clavier egalement) barres ( une barre est une juxtaposion de meme bit 1 ou 0 ou tout simplement un seul bit 0 ou 1) et que la largeur de chaque barre doit etre inferieure ou egale à un certain m entré au clavier aussi.

A titre d'exemple.
1000100 se compose de 4 barres : barre 1 barre 000 bare 1 barre 00 la largeur de chaque barre ne depasse pas 3. on dit que 1000100 appartient au groupe BC(n,k,m) qui represente les codes sur n bits composés exactement de k barres dont la largeur de chaque barre est inferieur ou egale a m.


voila ce que j'ai fait.

Code C : Sélectionner tout - Visualiser dans une fenêtre à part
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
 
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
 
 main()
{
    int n,k,m; // nombre de bits du code
     int s[50];// tableau por stocker les bits entrer je sais que sa dimension doit etre exactement n
    int i=0,j=1;
    int mat[50]; // pour calculer la largeur de barres > 1
 
    printf("inserisci n");
    scanf("%d",&n);
    printf("inserisci m");
    scanf("%d",&m);
    printf("inserisci k");
    scanf("%d",&k);
    printf("inserisci la sequenza da verificare");
    // initialisation  du tableau pour compter les barres dont la largeur est > 1
    for(i=0;i<n;i++)
    mat[i]=0;
    //remplissage du tabeau cntenean le code sur n bits
    for (i=0; i<n; i++)
    {
     printf("Elément %d : ", i);
     scanf("%d", &s[i]);
    }
    /* Affichage du tableau */
    printf("Tableau donné :\n");
    for (i=0; i<n; i++)
        printf("%d ", s[i]);
    printf("\n");
    int l=0;// indice pour le tableau mat
    int r=0;// variable d'aide 
    i=0;j=1;// reinitiialisation de i et j
    while(j<=n){
           if(s[i]==s[j]){// verification si s[i] et s[j] sont egaux on incremente seulemetn j
           j++;
           r=1;}
           else{
                if(r==1){
                 mat[l]=j-i; 
                 l++;
                 i=j;
                 j++;
                 r=0;}
                 if(r==0){
                          i=j;
                          j++;
 
                          }
 
                }
                 }
                 //on verifie si la largeur de nos barres ne depassent pas m
                 int unita=1;
    for (i=0; i<l; i++){
         if(mat[i]>m)
             unita=0;
    }
    /* on parcourt le tableau mat de diension l, les elements du tableaux differents de 0 sont le nombre  de barres de taille superieur a 1 et le contenue de chaque case du tableau represente la taille de la barre */
    int barre=0;
    for (i=0; i<l; i++)
        barre+=mat[i];
    /* on sait qu'on a l barres et la variable barre contient la somme des largeurs des barres non unitaires alors les bares unitaires sont de nombres n-bar*/
    int nmbar=1;
    if(l-1+n-barre!=k)
        nmbar=0;
    if(nmbar==1 && unita==1)
        printf(" é un vero codice");
    else 
        printf(" non é un codice");
 
    getch();
}

Le probleme est que le tableau mat ne memorise pas la taille juste des barres non unitaires. j'obtiens pas le nombre de barre exactement.
merci de votre aide.