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

Прошу вас помогите!Нужно написать программу,но только обязательно в Visual Basic!!!!! На вход программе подаются сведения о телефонах всех сотрудников некоторого учреждения. В первой строке сообщается количество сотрудников N, каждая из следующих N строк имеет следующий формат: <Фамилия> <Инициалы> <телефон> где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> - строка, состоящая не более чем из 4-х символов (буква, точка, буква, точка), <телефон> – семизначный номер, 3-я и 4, я, а также 5-я и 6-я цифры которого разделены символом «–». <Фамилия> и <Инициалы>, а также <Инициалы <телефон> разделены одним пробелом. Пример входной строки: Иванов П.С. 555-66-77 Сотрудники одного подразделения имеют один и тот же номер телефона. Номера телефонов в учреждении отличаются только двумя последними цифрами. Требуется написать как можно более эффективную программу, которая будет выводить на экран информацию, сколько в среднем сотрудников работает в одном подразделении данного учреждения.
Гость
Ответ(ы) на вопрос:
Гость
В присоединенном файле работающая программа. Не забудьте установить уровень безопасности макросов Excel в "средний". сам макрос - на листе рабочей книги, вот его текст: Option Explicit Sub CommandButton1_Click()     Dim n As Integer, i As Integer, j As Integer     Dim Sr As Single     Dim Phone As String     'Динамические массивы - неизвестно кол-во подразделений     Dim nPhone() As String, nDep() As Integer     i = 2     Do While Len(Cells(i, 1).Value) <> 0         i = i + 1     Loop     n = i - 2 'Количество сотрудников определено по первой пустой ячейке в 1й колонке     ReDim nPhone(1 To n), nDep(1 To n) 'Определили массивы необходимой размерности     For i = 1 To n         nPhone(i) = Cells(i + 1, 2).Value         nDep(i) = 0     Next i     BubbleSort nPhone     Phone = "***-**-**" ' Можно взять что угодно, кроме реального номера     j = 0     For i = 1 To n         If nPhone(i) = Phone Then             nDep(j) = nDep(j) + 1         Else             Phone = nPhone(i)             j = j + 1             nDep(j) = 1         End If     Next i     Sr = 0     For i = 1 To j         Sr = Sr + nDep(i)     Next i     Sr = Sr / j     MsgBox "Среднее количество сотрудников в отделе равно" & Str(Sr), vbInformation End Sub Public Sub BubbleSort(Arr As Variant)     ' Пузырьковая сортировка одномерного массива     Dim lSorted As Boolean, nI As Long, nJ As Long, nAll As Long, vTemp As Variant     nAll = UBound(Arr)     nI = LBound(Arr) - 1     Do While (nI < nAll) And Not lSorted         lSorted = True         nI = nI + 1         For nJ = 1 To nAll - nI             If Arr(nJ) > Arr(nJ + 1) Then                 vTemp = Arr(nJ): Arr(nJ) = Arr(nJ + 1): Arr(nJ + 1) = vTemp: lSorted = False             End If         Next nJ     Loop End Sub
Гость
Чтобы получить ответ надо число сотрудников (вводится в самом начале) разделить на число отделов. Число отделов определяется различным числом последних цифр телефона: от 00 до 99. Номер отдела связываем с индексом массива А, в который будем ставить 1 если отдел с таким номером есть. Поскольку в задаче не ставится вопрос о проверке входных данных и сохранении их значения, то составляем такой код: Sub z() Dim a(99) As Integer n = InputBox("Введите N") For i = 1 To n  s = InputBox("Введите данные сотрудника")  k = Val(Right(s, 2))  a(k) = 1 Next i k = 0  'считаем число отделов For i = 1 To 100     If a(i) > 0 Then k = k + 1 Next i MsgBox (n / k) End Sub
Не нашли ответ?
Ответить на вопрос
Похожие вопросы