Гистограмма распределений серий - VB

Узнай цену своей работы

Формулировка задачи:

Всем привет, прошу совета по решению следующей задачи. есть серия в таком виде 1100011101101010100000000000111111001. нужно разбить ее на отдельные части типа: 11 000 111 0 11 0 1 0 1 и т.д., а после подсчитать сколько одинаковых серии было и их длину. т. е. 11 - её длина 2, 000-3 и т.д. , подсчитать количество серий различной длины и полярности.буду признателен ,если скажете куда копать и чем пользоваться.

Решение задачи: «Гистограмма распределений серий»

textual
Листинг программы
Option Explicit
Private Sub btnStart_Click()
     Dim Dict, st As String, s As String, s1 As String, s2 As String
     Dim i As Integer, j As Integer, k As Integer, n As Integer
     Dim tmp As String, tmp1 As Integer, arr() As String, v() As Integer, max As Integer
     Set Dict = CreateObject("Scripting.Dictionary")
     st = T.Text
     For i = 1 To Len(st) - 1
         s = ""
         Do
                k = k + 1: s1 = Mid$(st, k, 1): s2 = Mid$(st, k + 1, 1): s = s & s1
         Loop Until s1 <> s2 Or s2 = ""
         If Not Dict.Exists(s) And s <> "" Then
             ReDim Preserve arr(n), v(n)
             Dict.Add s, n: arr(n) = s: v(n) = 1: n = n + 1
         Else
              v(Dict.Item(s)) = v(Dict.Item(s)) + 1
         End If
         If k >= Len(st) Then Exit For
     Next i
     For i = 0 To UBound(arr)
         For j = 0 To UBound(arr) - 1
             If Len(arr(j)) > Len(arr(j + 1)) Then
                 tmp = arr(j): arr(j) = arr(j + 1): arr(j + 1) = tmp
                 tmp1 = v(j): v(j) = v(j + 1): v(j + 1) = tmp1
             End If
         Next j
     Next i
     max = v(0)
     For i = 1 To UBound(v)
       If max < v(i) Then max = v(i)
     Next i
     P.AutoRedraw = True: P.Cls: P1.AutoRedraw = True: P1.Cls
     P.Scale (0, max + 1)-(UBound(v) + 1, 0)
     P1.Scale (0, 1)-(UBound(v) + 1, 0)
     For i = 1 To UBound(v)
        P.Line (i + 0.5, 0)-(i - 0.5, v(i)), QBColor(i), BF
        P.CurrentX = P.CurrentX + 0.5: P.CurrentY = P.CurrentY + 0.4
        P1.CurrentX = P.CurrentX - Len(arr(i)) / 25: P1.CurrentY = 0.8: P1.Print arr(i): P.Print v(i)
     Next i
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.429 из 5
Похожие ответы