Demande d'aide

dolsky Messages postés 18 Date d'inscription vendredi 30 novembre 2007 Statut Membre Dernière intervention 28 janvier 2011 - 1 juin 2008 à 13:35
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 1 juin 2008 à 19:46
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

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 juin 2008 à 19:46
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
0
Rejoignez-nous