IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

code barre sur n bits


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Par défaut code barre sur n bits
    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.

  2. #2
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Je t'avouerais que trouver une solution àa ton problème avec un code aussi est mal organisé est très difficile, la relecture prend beaucoup de temps (10min, et toujours pas compris certaines parties)

    Pour le confort de tout ceux qui code (et toi-même) tu devrais:
    _ creer des fonctions plutot que tout mettre dans le main
    _ donner des noms de variable plus claire
    _ Mieux indenter ton code (surtout les bloc if et for, illisible)

    Dans certaines écoles, une norme drastique existe (25 ligne par fonction, nom de fonction claire, variable exclusivement en anglais, structure for interdite .....), il est évident que c'est exessif mais on s'apperçois plus tard que personne n'as de problème pour nous relire et comprendre notre code même sans commentaire

    En conclusion: qui dit code propre dit agréable à lire et dit facile de trouver une solution à ton problème

  3. #3
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Tu dis "bits" mais il n'y a rien de binaire dans ton code.

    Pour moi binaire c'est travailler avec les opérateurs binaire OU=| et ET=&
    voire aussi décalage de bit << et >>
    Mais aussi les masque avec OU et ET style pour savoir si le dernier bit est à zéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((n & 0xFFFFFFFE) == 0)...

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    La critique de skeud est loin d'être infondée : on ne s'en sort pas avec tes n, m, k, i, j, l, r
    Il est indispensable d'avoir des identificateurs qui décrivent correctement ce que représente l'objet.

    Sur le code :
    Pourquoi ce tableau s ? Une fois que le tableau tab est construit et contient la taille de chaque barre, on peut en déduire, si ça sert à quelque chose (ce dont je doute), le tableau s. tab est un codage condensé de ton tableau s et on peut construire tab à la volée :
    A chaque nouvelle entrée au clavier, on la compare à la précédente. Si c'est la même, on incrémente la largeur de la barre (qui est dans tab) sinon on passe à la case suivante de tab en l'initialisant à 1 et on continue jusqu'à avoir tout lu. On peut facilement en même temps déterminer la largeur maximum des barres et en déduire une fois terminé le nombre de barres.
    Par exemple :
    Code : 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
     
    int LireCode(int * tab, int n, int k, int m)
    {
      int i;
      int bitPrec;
      int bit;
      int nbBar = 0;
      int largMax = 0;
      do  scanf("%d",&bitPrec); while (bitPrec==0); // sauter les 0 en tête
      tab[nbBar] = 1; //la largeur de la barre au départ
      for(i=1;i<n;i++)
      {
        scanf("%d",&bit);
        if(bitPrec==bit) tab[nbBar]++ ;  // incrémenter la largeur de la barre
        else   // la barre est terminée
        {
           if(tab[nbBar]>largMax) largMax = tab[nbBar]; // recherche du maximum de largeur
           tab[++nbBar] = 1;  // barre suivante
           bitPrec = bit;
         }
      }
      if(tab[nbBar]>largMax) largMax = tab[nbBar]; // la dernière barre
      tab[++nbBar] = 0; // pour déterminer la fin de la partie utile du tableau tab
    /*
      //------------- Uniquement pour test--------------------|
         for(i=0; tab[i]!= 0; i++)printf("%d ",tab[i]);     //|
         printf("\nNombre de barres %d\n",nbBar);           //|
         printf("largeur maximum d'une barre %d\n",largMax);//|
      //------------------------------------------------------|
    */
      return nbBar==k && largMax<=m;  //retourne 0 en cas de code mal formé
    }

Discussions similaires

  1. Extraire et reconnaitre un code barre sur une photo
    Par AP dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 28/04/2015, 11h07
  2. [XL-2002] Code Barre sur application Excel
    Par Carlu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/06/2009, 18h02
  3. Affichage du code ascii sur 8 bits
    Par baguinga dans le forum Débuter
    Réponses: 3
    Dernier message: 18/10/2007, 19h01
  4. Réponses: 7
    Dernier message: 30/08/2007, 10h41
  5. Réponses: 21
    Dernier message: 11/06/2007, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo