Demande d'aide

Signaler
Messages postés
18
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2011
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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?
 
 
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:
 
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

1 réponse

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut,

je ne pige pas trop ta démarche actuelle mais bon...

voici ce que çà donnerait à peu près en VB6, j'ai aéré pour que tu puisses bien voir le fonctionnement

Sub Main()
    Dim sSerie As String
    sSerie = InputBox("Saisissez votre suite de 8
bits", , "10010111")
    
    If Not IsValidSerie(sSerie) Then
        MsgBox "Valeur incorrecte, FIN"
    
    Else
'       tableau de
bits
        Dim iArr(1 To 8) As Integer
        Dim i As Integer
        Dim j As Integer
       
        For i = 1 To 8
            iArr(i) = Mid(sSerie, i, 1)
            'Debug.Print iArr(i)
        Next i

'       compose le retour
        Dim iSearch As Integer
        Dim iCount As Integer
        Dim sRet As String
        
        
        sRet = vbNullString
        For i = 1 To 7
            iSearch = iArr(i)
            iCount = 1
            For j = i + 1 To 8
                If iArr(j) = iSearch Then
                    iCount = iCount + 1
                Else
                    i = i + iCount - 1
                    Exit For
                End If
            Next j

'          
trace
            Debug.Print iCount & " fois le carac
" & iSearch
            
'           retour
            If iCount = 1 Then
'               1 seul = on met le
carac
                sRet = sRet & CStr(iSearch)
            Else
'               plusieurs =
compte+carac concerné
                sRet = sRet & CStr(iCount) & CStr(iSearch)
            End If

'           fin de
J
            If j = 9 Then Exit For
        Next i

'       résultat
        Debug.Print sRet
        MsgBox "'" & sSerie & "' devient" & vbCrLf & "'" & sRet & "'"
    
    End If
End Sub

Private Function IsValidSerie(ByVal sStr As String) As Boolean
    Dim i%, c$
    
'   8 carac
    If LenB(sStr) = 16 Then
'       que des 0 ou 1
        For i = 1 To 8
            c = Mid$(sStr, i, 1)
            If Not (c = "0" Or c = "1") Then Exit Function
        Next i
        IsValidSerie = True
    End If
End Function

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp