Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/30: Рейтинг темы: голосов - 30, средняя оценка - 4.57
172 / 3 / 1
Регистрация: 06.10.2013
Сообщений: 14

Найти в файле цифру, повторяющуюся наибольшее количество раз

21.11.2013, 21:11. Показов 6662. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста!
Имеется текстовый файл, в котором находятся цифры и слова, отделенные друг от друга пробелами.
Необходимо найти из этого файла цифру, повторяющуюся наибольшее количество раз.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.11.2013, 21:11
Ответы с готовыми решениями:

Удаляет в записи числа цифру, повторяющуюся нечетное количество раз
Написать программу, которая удаляет в записи числа цифры, повторяющиеся нечетное количество раз. #include <iostream> using...

Удалить в записи числа цифру, повторяющуюся максимальное число раз
Удаляет в записи числа цифру, повторяющуюся максимальное число раз, получая новое число;

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

48
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
22.11.2013, 12:32
Студворк — интернет-сервис помощи студентам
Формулировка темы — это же как карточка в библиотеке! Одним словом, тег (тэг).

И вообще, это не раздел «Помощь студентам». Оттачиваем ВБА-коды! Пусть, конечно, смотрят, как это делается.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
22.11.2013, 15:46
Ну если считать, как оказалось, цифры, то можно и не перебирать все символы:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub QWERT()
Dim i, MAX, N
   Dim File As String, CF As String   'объявим пеpеменнyю для имени файла и его cодеpжимого
   File = ЭтаКнига.Path & "\8"   'ycтановим имя файла и пyть
   Open File For Binary As #1   'откpоем файл для чтения
      CF = Input(FileLen(File), 1)   'загpyзить в пеpеменyю CF вcе cодеpжимое файла
   Close #1   'закpыть файл
   For i = 0 To 9
   If MAX < UBound(Split(CF, i)) Then MAX = UBound(Split(CF, i)): N = i
   Next i
   MsgBox "число  " & N & " встретилось " & MAX & " раз", 64, ""
End Sub
Добавлено через 9 минут
цифры и слова, отделенные друг от друга пробелами
Это сбило с толку!
В приложенном файле пробелами отделены именно числа.
Так что вопрос с цифрами-числами надо уточнять:
Надо ли считать цифры в составе чисел или только однозначные числа подлежат учёту?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,774
Записей в блоге: 14
22.11.2013, 15:57
Alex77755, 20 раз "сплитовать" не слишком рационально. Правда, можно обойтись и десятью, если ввести рабочую переменную. Но, мне кажется, проще пройти в цикле один раз... Впрочем, надо замерить время.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
22.11.2013, 16:06
Ну в данном случае не стоял вопрос о рациональности.
Просто как один из вариантов решения.
0
172 / 3 / 1
Регистрация: 06.10.2013
Сообщений: 14
22.11.2013, 19:14  [ТС]
Подскажите еще, пожалуйста, чтобы посчитало цифру, повторяющуюся наибольшее кол-во раз, в каждой строке, как записать цикл? В приведенном коде считает только для последней строки.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub ReadFile(Name As String)
Dim nomFL As Integer, a, i
Dim S
Dim MAX, N
nomFL = FreeFile
Endln = Chr(10) + Chr(13)
Open Application.GetOpenFilename For Input As nomFL
Do Until EOF(nomFL)
Line Input #nomFL, S
For a = 0 To 9
   If MAX < UBound(Split(S, a)) Then MAX = UBound(Split(S, a)): N = a
   Next a
Label1.Caption = "Öèôðà " & N & " âñòðå÷àåòñÿ " & MAX & " ðàç" + Endln
Loop
Close #nomFL
End Sub
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,774
Записей в блоге: 14
22.11.2013, 20:18
Цитата Сообщение от Инна31 Посмотреть сообщение
Подскажите еще, пожалуйста, чтобы посчитало цифру
- вот видите... Я был прав


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub ReadFile(Name As String)
Dim nomFL As Integer, a, i
Dim S
Dim MAX, N
nomFL = FreeFile
Endln = Chr(10) + Chr(13)
Open Application.GetOpenFilename For Input As nomFL
Do Until EOF(nomFL)
Line Input #nomFL, S
For a = 0 To 9
If MAX < UBound(Split(S, a)) Then MAX = UBound(Split(S, a)): N = a
Next a
Label1.Caption = "Öèôðà " & N & " âñòðå÷àåòñÿ " & MAX & " ðàç" + Endln
Loop
Close #nomFL
End Sub
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
22.11.2013, 22:37
Сейчас негде проверить, но что-то мне подсказывает, что в предыдущем посте максимально частой окажется наименьшая цифра из тех, частота которых одинакова (как и в посте #17).

То есть в тексте 8086 59 7722 это будет исключительно 2, так?
Цитата Сообщение от Инна31 Посмотреть сообщение
Необходимо найти из этого файла цифру...
А я даже и не увидел нечёткости, это ж не форум косметики!

Но загвоздка в том, что не хотя бы одну цифру (с максимальной встречаемостью), не любую, не наименьшую (что, если не ошибаюсь, сделано чётко), а без комментариев. (Я в таких случаях ищу все максимумы.)
0
172 / 3 / 1
Регистрация: 06.10.2013
Сообщений: 14
22.11.2013, 22:37  [ТС]
Задача на данный момент не в том, что может оказаться несколько цифр с одинаковым максимальным числом повторений, а в том, чтобы построчно определить цифру, наиболее часто встречающуюся. И пока она не решена.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,774
Записей в блоге: 14
22.11.2013, 22:40
Цитата Сообщение от Инна31 Посмотреть сообщение
И пока она не решена.
- она уже 100 раз решена... Только ты это никак не возьмешь в толк.
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
22.11.2013, 22:47
Инна31, естественно! Потому что вверху темы о построчности нет ни слова. А рыть все посты, искать уточнения...

Catstail, ТС, сдаётся мне, неравнодушна к предложенным вариантам, и по сути я тоже не вижу вывода для каждой строки.


Всё же меня (ещё до "построчной революции") смутили два последних кода:
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
То есть в тексте [на данном этапе — в строке] 8086 59 7722 это будет исключительно 2, так?
Да?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,774
Записей в блоге: 14
22.11.2013, 22:52
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
я тоже не вижу вывода для каждой строки.
- да он и не нужен! Можно весь файл "залить" в буфер и обработать (я это уже выложил раньше).

Но если очень хочется построчно, то вот:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function FreqDig(fname as string) As integer
Dim D(0 to 10) As Long
      fi%=FreeFile
      Open fname For input as #fi%
      Do While(Not EOF(fi%))
          line input #fi%,Stri$
          For i%=1 to Len(Stri$)
              s$=mid$(Stri$,i%,1)
              n%=Asc(s$)
              if n% >= 48 And n% <= 57 then  D(n%-48)=D(n%-48)+1
          Next i%
       Loop
       mi%=0
       For i%=1 to 10
            If D(i%)>D(mi%) then mi%=i%
       Next i%
       FreqDig=mi%
End Function
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.11.2013, 23:00
Что-то я так и не вижу полной ясности в задаче...
"цифру, повторяющуюся наибольшее кол-во раз, в каждой строке" - допустим есть 15 строк, и в каждой по несколько цифр с одинаковым максимальным числом повторений. Да хоть и не в каждой, а через одну. Или только в одной. А может в пятой строке только буквы...
Какой нужен результат?
0
172 / 3 / 1
Регистрация: 06.10.2013
Сообщений: 14
22.11.2013, 23:12  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Чтобы обрабатывалась каждая строка по отдельности, независимо от других.
По каждой строке искалась цифра с макс. числом повторений, если в одной строке таких будет несколько, конечно надо выводить все по идеи (но на данном этапе можно и без этого обойтись). Это учебная программа, и предусмотрено, что в каждой строке есть числа.
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.11.2013, 23:17
Ещё раз - какой нужен результат?
Не можете описать - нарисуйте.
А каждая строка уже обрабатывается, в 31 посте точно:
Visual Basic
1
2
          line input #fi%,Stri$
          For i%=1 to Len(Stri$)
0
172 / 3 / 1
Регистрация: 06.10.2013
Сообщений: 14
22.11.2013, 23:32  [ТС]
Как должно быть в итоге (например):
В 1-ой строке максимальное количество повтор. - 4 - имеет цифра 6.
В 2-ой строке максимальное количество повтор. - 7 - имеет цифра 3.
В 3-ой строке максимальное количество повтор. - 4 - имеет цифра 9 и тд.
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.11.2013, 23:58
Я свой вариант продолжил...
Куда именно выводить - не сказали, поэтому сделал как захотел.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Option Explicit
 
Sub tt()
    Dim a, Name$, el, max_&, n&, i&, ind&, t, col As New Collection
 
    With CreateObject("scripting.dictionary"): .comparemode = 1
        Name = ThisWorkbook.Path & "/8"
 
        a = Split(CreateObject("Scripting.FileSystemObject").Getfile(Name).OpenasTextStream(1).ReadAll, vbNewLine)
 
        For Each el In a
            ind = ind + 1: .RemoveAll
            max_ = 0: n = 0
            For i = 1 To Len(el)
                t = Mid(el, i, 1)
                If IsNumeric(t) Then
                    .Item(t) = .Item(t) + 1
                    If max_ < .Item(t) Then max_ = .Item(t): n = t
                End If
            Next
            col.Add _
            "В " & ind & "-ой строке максимальное количество повтор. - " & max_ & " - имеет цифра " & n
        Next
    End With
 
    '=======================================================
    If col.Count > 0 Then
        i = 0
        ReDim outarr(1 To col.Count + 1, 1 To 1)
 
        For Each el In col
            i = i + 1: outarr(i, 1) = el
        Next
 
        With Workbooks.Add(1)
            With .Sheets(1).[A1].Resize(i, 1)
                .Value = outarr
                .EntireColumn.AutoFit
            End With
        End With
    End If
    '=======================================================
 
End Sub
Добавлено через 6 минут
Вкралась обидная ошибка, исправил.
2
172 / 3 / 1
Регистрация: 06.10.2013
Сообщений: 14
23.11.2013, 00:41  [ТС]
А как вывести результат на форму в текстбокс или label?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
23.11.2013, 01:14
Аналогично.
Только можно не создавать массив, а прямо так в цикле и перекладывать.
Но что будете делать, если попадётся файл в 100 строк? Label думаю не потянет...

Добавлено через 5 минут
Visual Basic
1
2
3
4
5
6
7
    '=======================================================
    If col.Count > 0 Then
        For Each el In col
        Me.TextBox1.Text = Me.TextBox1.Text & el & vbLf 'или vbNewLine
        Next
    End If
    '=======================================================
Добавлено через 2 минуты
Да, в конце один vbNewLine лишний, можно отрезать.
Или сперва собрать строку, потом её подрезать, кинуть в текстбокс.
1
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
23.11.2013, 03:30
Перечитал тему (1-й пост — условие задачи) и повторю, что строки уже позже притянуты за уши, в 25-м посте: https://cyberforum.ru/vba/thre... e3.html#25.

И до сих пор не учтено, что, вообще-то говоря, максимум (это же не парабола) не один.

Кроме того, для "построчной" трактовки, и цифры-то ведь не в каждой строке обязаны быть!

На программерсфоруме на эту тему чуть не разгорелась священная война (холивар то бишь).

Я пока вижу так (это исполняемый файл — запуск щелчком в архиве; код по правой кнопке):
Миниатюры
Найти в файле цифру, повторяющуюся наибольшее количество раз  
Вложения
Тип файла: rar ЧтоЗаЧушь!.rar (1.5 Кб, 4 просмотров)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
23.11.2013, 13:10
Да, строки появились позже, пробелы пропали позже, про цифры уточнили позже, как именно показывать результат - показали позже, то, что возможны несколько максимумов - я уже говорил, но ТС решила это не учитывать. Позже
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.11.2013, 13:10

Найти наиболее повторяющуюся цифру в числе
Имеется число например 333456, найти наиболее повторяющееся число (число тут в данном случае будет 3), как это сделать? Это доп. задание...

Найти самую повторяющуюся цифру в массиве цифр
Дано N чисел и N цифр. Напишите программу которая находит самую повторяющуюся цифру в массиве . Входные данные ...

Найти наиболее часто повторяющуюся цифру в числе
Дано натуральное число. Определить наиболее часто повторяющуюся в нем цифру и указать ее позиции в числе. Помогите, пожалуйста.

В строке символов найти наиболее часто повторяющуюся цифру
В строке символов, введенных в StringGrid(1строка), найти наиболее часто повторяющуюся цифру я неочень понимаю, в стринггриде может...

Дан файл символов. Вывести на экран символ, встречающийся в файле наибольшее количество раз
Помогите пожалуйста, не могу решить задание. Дан файл символов. Вывести на экран символ, встречающийся в файле наибольшее количество...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru