Вставить перед каждой серией массива элемент с нулевым значением - VB

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

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

Дан целочисленный массив размера N. Вставить перед каждой его серией элемент с нулевым значением. Назовем

серией

группу подряд идущих одинаковых элементов, а

длинной серии

- количество этих элементов(длинна серии может быть равна 1).

Решение задачи: «Вставить перед каждой серией массива элемент с нулевым значением»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Sub Command1_Click()
  4.     Dim Arr&(): Arr&() = GenerateArraySeries()
  5.     PrintArray Arr&()
  6.    
  7.     'создаем максимально необходимую буфер-зону и смещаем все эл-ты вправо
  8.    Dim UB&: UB = UBound(Arr&())
  9.     Dim diff&: diff = (UB + 1) \ 2
  10.     Dim MaxLen&: MaxLen = UB + diff
  11.     ReDim Preserve Arr&(MaxLen)
  12.     Dim i&
  13.     For i = UB To 0 Step -1
  14.         Arr(i + diff) = Arr(i)
  15.         'Arr(i) = 0
  16.    Next
  17.     'PrintArray Arr&()
  18.    
  19.     Dim flag As Boolean: flag = False
  20.     Dim p&: p = 0
  21.     For i = diff To MaxLen - 1
  22.         If Arr(i) = Arr(i + 1) Then
  23.             If Not flag Then
  24.                 Arr(p) = 0
  25.                 p = p + 1
  26.                 flag = True
  27.             End If
  28.         Else
  29.             flag = False
  30.         End If
  31.         Arr(p) = Arr(i)
  32.         p = p + 1
  33.     Next
  34.    
  35.     Arr(p) = Arr(MaxLen)
  36.     ReDim Preserve Arr&(p)
  37.     PrintArray Arr&()
  38. End Sub
  39.  
  40.  
  41.  
  42. Private Function GenerateArraySeries()
  43.     Dim num&, i&, s&, n&
  44.     Dim Arr&(): ReDim Arr&(19)
  45.    
  46.     Randomize
  47.    
  48.     For i = 1 To 10
  49.         num = Int(Rnd * 10)
  50.         'генерируем серии
  51.        For s = 1 To Int(Rnd * 2) + 1
  52.             Arr(n) = num
  53.             n = n + 1
  54.         Next s
  55.     Next i
  56.    
  57.     ReDim Preserve Arr&(n - 1)
  58.     GenerateArraySeries = Arr&()
  59. End Function
  60.  
  61. Private Sub PrintArray(Arr&())
  62.     Dim el
  63.     For Each el In Arr&()
  64.         Me.Print el; " ";
  65.     Next
  66.     Me.Print vbLf
  67. End Sub

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


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

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

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы