Гистограмма распределений серий - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д