Найти Промежуток времени когда в музее находится наибольшее число людей - VB

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

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

Ежедневно музей посещает N человек. Для каждого из них есть Время прихода и ухода. Найти Промежуток времени когда в музее находится наибольшее число людей

Я не прошу чтобы за меня вы писали код. Прошу лишь помочь мне как вобще это решить. Было у меня несколько вариантов, но они не работают. Из олимпиадчиков ее никто решил.

Решение задачи: «Найти Промежуток времени когда в музее находится наибольшее число людей»

textual
Листинг программы
  1. Option Explicit
  2. Dim S, St As String
  3.  
  4. Private Type typeVisit
  5.     T As Date
  6.     M As Integer
  7. End Type
  8.  
  9. Private Sub Command1_Click()
  10.    Dim i As Integer, j As Integer, V() As typeVisit, n As Integer
  11.    Dim x As Integer, maxx As Integer, t1 As Date, t2 As Date
  12.    For i = 0 To UBound(S) - 1
  13.         n = n + 2: ReDim Preserve V(1 To n)
  14.         V(n - 1).T = Split(S(i))(0): V(n - 1).M = 1
  15.         V(n).T = Split(S(i))(1): V(n).M = -1
  16.     Next i
  17.     SortVisitos V 'Сортируем массив
  18.    For i = 1 To n
  19.         x = x + V(i).M   ' считаем кол-во посетителей
  20.        If maxx < x Then ' определяем максимальное количество посетителей
  21.           maxx = x
  22.            t1 = V(i).T 'время прихода
  23.           For j = i To n
  24.                   'определяем время ухода
  25.                  If V(j).M < 0 Then t2 = V(j).T: Exit For
  26.            Next j
  27.         End If
  28.     Next i
  29.     Cls
  30.     Print Replace(St, " ", vbTab)
  31.     Print "Больше всего посетителей (" & maxx & ")  было в период между  " & t1 & "  и  " & t2
  32. End Sub
  33.  
  34. 'Процедура сортировки массива пользовательского типа по возрастанию по полю Т(по времени)
  35. Private Sub SortVisitos(V() As typeVisit)
  36.     Dim i As Integer, j As Integer, Vis As typeVisit
  37.     For i = 1 To UBound(V)
  38.         For j = 1 To UBound(V) - 1
  39.             If V(j).T > V(j + 1).T Then
  40.                  Vis = V(j)
  41.                  V(j) = V(j + 1)
  42.                  V(j + 1) = Vis
  43.             End If
  44.         Next j
  45.     Next i
  46. End Sub
  47. '
  48. '''''''''''''''''''''''''''''''''''''''''
  49. ' Дальше просто для отладки (и наглядности тоже) получение данных ,
  50. ' лучше, конечно сделать получение данных из файла
  51. Private Sub Form_Load()
  52.     Call GetVisitors
  53.     S = Split(St, vbCrLf)
  54. End Sub
  55.  
  56. Private Sub GetVisitors()
  57.     AddVisitor "8:00 10:28"
  58.     AddVisitor "8:01 8:13"
  59.     AddVisitor "8:02 11:45"
  60.     AddVisitor "8:03 9:44"
  61.     AddVisitor "8:04 17:45"
  62.     AddVisitor "8:05 16:33"
  63.     AddVisitor "8:05 12:36"
  64.     AddVisitor "8:05 11:06"
  65.     AddVisitor "8:05 13:19"
  66.     AddVisitor "8:05 15:02"
  67.     AddVisitor "8:04 12:30"
  68.     AddVisitor "8:03 11:56"
  69.     AddVisitor "8:02 13:22"
  70.     AddVisitor "8:02 14:53"
  71.     AddVisitor "8:01 19:11"
  72.     AddVisitor "8:10 14:01"
  73.     AddVisitor "8:10 11:15"
  74.     AddVisitor "8:00 13:27"
  75.     AddVisitor "8:00 12:46"
  76.     AddVisitor "9:06 9:14"
  77.     AddVisitor "9:06 9:14"
  78.     AddVisitor "9:06 9:14"
  79.     AddVisitor "10:00 10:33"
  80.     AddVisitor "8:00 8:10"
  81.     AddVisitor "8:19 18:22"
  82.     AddVisitor "8:55 10:21"
  83.     AddVisitor "9:55 11:24"
  84.     AddVisitor "9:55 11:24"
  85. End Sub
  86.  
  87. Private Sub AddVisitor(ByRef NewVisitorsTime As String)
  88.     St = St & NewVisitorsTime & vbCrLf
  89. End Sub

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


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

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

11   голосов , оценка 4.273 из 5

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

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

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