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

VB.NET Discussion :

Compression d'un binaire


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut Compression d'un binaire
    Nous travaillons sur cet exercice et on a trouvé des difficultés à le résoudre.
    SVP, si vous pouvez nous aider à le resoudre


    Un CODEC est un logiciel compresseur décompresseur de fichiers. En effet, les suite de bits composant un fichier
    comportent des similitudes comme 10000111. Plutôt que de stocker la totalité de cet octet, on gagne de la place en
    écrivant 14031 (qui se lit un quatre zéros trois un). Cet octet (huit bits) retrouva ensuite son format original à la
    décompression.
    Il s'agit alors de saisir une chaîne de huit chiffres formée uniquement 0 et 1 pour désigner un octet puis la compresser
    suivant le principe de compression du CODEC et enfin l'afficher.
    Exemple :
    Si octet = ˝10010111˝ Alors l'octet compressé est : ˝1201031˝


    Voici le code VB:
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Module
    Module1 
    Sub Main() 
    Dim tab() As String 
    Dim ok As Boolean = True 
    Dim i, l, occ As Integer 
    Dim car As String 
    Dim octet As String = "" 
    Dim oct As String 
    Console.WriteLine(
    "Tapez la valeur de l'octet") 
    oct = Console.ReadLine
    l = oct.Length
    ReDim tab(l) 
    For i = 0 To l - 1 
    tab(i) = oct.Substring(i, 1)
    Console.WriteLine(tab(i))
    Next 
     
    Do 
    If tab(i) <> 0 Or tab(i) <> 1 Then 
    i = i + 1
    End If 
    Loop Until (ok = False) Or (i > 8) And l = 8 
    i = 1
    Do 
    occ = 1
    ok = 
    True 
    Do 
    If tab(i) = tab(i + 1) Then 
    occ = occ + 1
    i = i + 1
    Else 
    ok = 
    False 
    End If 
    Loop Until ok = False Or i > 8 
    If occ = 1 Then 
    octet = oct & occ
    Else 
    Console.WriteLine(oct & occ)
    End If 
    i = i + 1
    Loop Until i > 8 
    Console.WriteLine(
    "l'octet compressé est" & octet) 
    Console.ReadKey()
    End Sub 
    End
    Module

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    J'étais habitué à voir le CODEC comme un logiciel qui fait que j'ai de la vidéo et du son sur mon pc ...

    Blague à part, peut de nous seront prêt à faire l'exercice pour toi. Alors dit nous précisément sur quel point tu bloques (qu'est-ce que ton code fait ? qu'est-ce qu'il fait mal ?, etc..).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    je ne reçoit pas message d'erreur.
    Il boucle à l'infinie.

    Je suis débutant en VB et j'ai voulu travailler cet exercice.
    Si vous pouvez m'aider à le réaliser

    merci

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Je hais le vb...
    Bon, quelques remarques :
    Alors que je pensais que ReDim tab(l) créait un tableau de taille l, il crée un tableau de taille (l+1) alors déjà utilise ReDim tab(l-1). (Pourquoi crée un tableau de 9 cases pour stocker 8 éléments ?)

    Apparemment tu te perds avec les Do..While (et moi aussi d'ailleurs, c'est illisible). Essayes de refaire ton programme avec que des boucles For, au moins là tu vois exactement d'où tu pars et où tu arrives alors que là j'ai l'impression que la condition de fin est faite un peut au hasard ...

    Du coup fait attention, ton i doit aller pour un tableau de 8 éléments de 0 à 6 car 6+1=7 est valide mais pas 7+1=8 (on compte à partir de 0, donc l'élément 8 sur un tableau de 8 éléments n'existe pas).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If occ = 1 Then
                    octet = oct & occ
                Else
                    Console.WriteLine(oct & occ)
                End If
    Dans le cas "Else", comment tu rajoutes occ dans oct ? donc finalement le occ tu le laisses dans le néant j'ai l'impression, il faudrait toujours faire octet = oct & occ (quelle abération, utiliser & pour concaténer, l'est bizarre VB )

    C'est tout pour l'instant, essayes de refaire avec les z'indications.

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Cela dit concernant ton algorithme, j'espère que tu vous avez bien analysé les probabilités des séquences de données, car dans le cas le moins favorable, ton fichier compressé fera le double du fichier initial.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  6. #6
    Membre expérimenté Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Cela dit concernant ton algorithme, j'espère que tu vous avez bien analysé les probabilités des séquences de données, car dans le cas le moins favorable, ton fichier compressé fera le double du fichier initial.
    Si tu parles du fait de rencontrer:
    1 0 1 0 1 0

    Et que le CODEC le modifie en:
    11 10 11 10 11 10

    Je crois pas que ça fasse ça selon la description initial de notre ami. Du moins j'espère bien, sinon c'est complètement stupide..héhé

    C'est tout de même intéressant comme compression...
    http://fr.wikipedia.org/wiki/Codec

Discussions similaires

  1. Compression d'une image binaire
    Par faaat dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 07/05/2012, 20h44
  2. Compression et opérateurs binaires
    Par av0gadr0 dans le forum C
    Réponses: 4
    Dernier message: 25/01/2011, 02h41
  3. compression d'une chaine binaire
    Par Nehmé dans le forum Mathématiques
    Réponses: 11
    Dernier message: 29/07/2010, 15h50
  4. compression de données du point de vue algorithmique
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 26/06/2002, 15h51
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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