Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
Землянин
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
1

Посчитать количество уникальных символов (чисел)

17.01.2013, 11:57. Показов 4044. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
10. Дан массив вещественных чисел A[20]. Определить количество различных элементов в массиве, повторяющиеся элементы считать один раз.
Вот никак не могу сообразить как будет правильно, сделал код, но он не работает, я не могу понять как работать с динамическим массивом в моем случае, если не трудно, направьте на путь истины.

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
Sub sortirovka()
Dim g(1 To 20) As Double
Dim i As Integer
Dim d() As Double
Dim j As Integer
Dim count As Integer
 
 
 
'Çàáèâàåì ìàññèâ
For i = 1 To 20
    g(i) = Cells(i, 1)
Next i
 
count = 1
ReDim Preserve d(1 To count)
d(1) = g(1)
 
For i = 1 To 20
    For j = 1 To UBound(d)
        If g(i) <> d(j) Then
            count = count + 1
            d(j) = g(i)
            
        End If
    Next j
Next i
MsgBox (count)
 
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2013, 11:57
Ответы с готовыми решениями:

Посчитать количество уникальных значений в каждой строке, игнорируя текст, 0 и пустые значения
Помогите написать макрос (или формулу) который бы подсчитывал кол-во уникальных значений в каждой...

Заданы 270 целых чисел посчитать количество чисел больше 10 и количество чисел меньше -5
заданы 270 целых чисел. Посчитать количество чисел больше 10 и количество чисел меньше -5

Дана строка символов. Посчитать, какое количество символов содержится в ней
пожалуйста помогите решить задачу!!!очень нужно!!!

Подсчитайте количество уникальных чисел в массиве
Уважаемые программисты помогите решить задачу с массивами! Задача:Подсчитайте количество...

13
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
17.01.2013, 12:06 2
Вообще тут нужно использовать словарь или коллекцию - это если Вы их уже изучали.
А на массивах я бы делал вероятно так - объявляем второй массив сразу размером с первый, в цикле в цикле его заполняем с проверкой - если уже есть, то выход из цикла, если дошли до пустого элемента - то увеличиваем счёт, заполняем.
1
Землянин
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
17.01.2013, 12:27  [ТС] 3
Цитата Сообщение от Hugo121 Посмотреть сообщение
Вообще тут нужно использовать словарь или коллекцию - это если Вы их уже изучали.
А на массивах я бы делал вероятно так - объявляем второй массив сразу размером с первый, в цикле в цикле его заполняем с проверкой - если уже есть, то выход из цикла, если дошли до пустого элемента - то увеличиваем счёт, заполняем.
а можно про коллекции и про словари подробнее?
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
17.01.2013, 12:52 4
Занят, некогда. Поищите на форуме по Scripting.dictionary - примеры есть. Или по Collection.
Я бы использовал словарь - код простой. Цикл по массиву, проверяем наличие в словаре - если нет, то считаем и заносим в словарь. Всё.
Или ещё проще - цикл и заносим. В конце смотрим count словаря. Всё.

Добавлено через 20 минут
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Option Explicit
 
Sub sortirovka()
    Dim g(), el
 
    'Забиваем массив
    g = [a1:a20].Value
 
    With CreateObject("scripting.dictionary")
        'Забиваем словарь
        For Each el In g: .Item(el) = 0&: Next
        MsgBox (.count)
    End With
 
End Sub
1
Землянин
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
17.01.2013, 13:05  [ТС] 5
Огромнейшее спасибо
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
17.01.2013, 13:28 6
Лучший ответ Сообщение было отмечено как решение

Решение

Хотя можно ещё проще:
Visual Basic
1
2
3
4
5
6
7
8
9
Sub uniqcount()
    Dim el
 
    With CreateObject("scripting.dictionary")
        For Each el In [a1:a20].Value: .Item(el) = 0&: Next
        MsgBox (.count)
    End With
 
End Sub
И причём тут сортировка?
1
Землянин
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
17.01.2013, 13:46  [ТС] 7
Название от балды написал.
Можете пояснить
Цитата Сообщение от Hugo121 Посмотреть сообщение
.Item(el) = 0&:
этот момент?
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
17.01.2013, 14:08 8
Где-то в сети было написано так - попытка обращения к Item несуществующего ключа заносит этот ключ в словарь.

Человеческим языком так - Item слова el есть 0 типа лонг
Лонг для скорости, это не важно, можно любое значение поставить.
Соответственно если el ещё не было в словаре - то оно туда занесётся c Item. Если же уже было - то у него поменяется Item.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
17.01.2013, 14:27 9
Лучший ответ Сообщение было отмечено как решение

Решение

Добрый день! to Pjeroo. Со словарями мне очень помогла статья на EE. Вот ссылка, правда, она на английском.
http://www.experts-exchange.co... n-VBA.html.
Сегодня в свободное время, к концу дня ,переведу для знакомого, но, правда, из Engl. на украинский. Если устроит - завтра утром кину.
2
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
17.01.2013, 18:48 10
На основе объекта Collection: Посчитать количество уникальных значений в каждой строке, игнорируя текст, 0 и пустые значения

Как я понял, там ваш массив надо вставить, например, в диапазон A1:A20, а в другую ячейку Excel — функцию.
0
15146 / 6419 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
04.02.2013, 11:09 11
Цитата Сообщение от Igor_Tr Посмотреть сообщение
Со словарями мне очень помогла статья на EE. Вот ссылка, правда, она на английском.
Да, хорошая статья. Узнал про метод .hashval
Добавил коммент про массив в словаре - может, пригодится.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
04.02.2013, 11:26 12
Да что, без словаря уже никак?... Вот простейший код:

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
Sub Counter(A() As double)
Dim uniqA() as Double
      n%=Ubound(A,1)
      cz%=n% \ 10
      cu%=cz%
      Redim uniqA(1 to cz%)
      ptr%=0
      For i%=1 to n%
           Z#=A(i%)
           q%=0
           For j%=1 to ptr%
                if Abs(uniqA(j%)-Z#) <= 1E-15 then
                   q%=-1
                   Exit for
                End if
           Next j%
           if q%=0 then
              if ptr%=cu% then
                 cu%=cu%+cz%
                 Redim Preserve uniqA(1 to cu%) As Double
              End if
              ptr%=ptr%+1
              uniqA(ptr%)=Z#
           End if 
     Next i% 
     Debug.print "Уникальных: "; ptr%; " штук"
End Sub
0
Землянин
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312
04.02.2013, 13:26  [ТС] 13
Цитата Сообщение от Catstail Посмотреть сообщение
Да что, без словаря уже никак?...
Уже не актуально, сам переделал без использования словаря
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
04.02.2013, 14:23 14
To Catstail. Здравствуйте! Конечно можно. Но для моих задач применение словаря (его модификаций) - это нельзя выразиться правильно. Я просто в восторге. Недавно применил с коллекцией и использовал при этом "вставить до...", "вставить после...". Все! У меня без лишних движений упорядоченый массив! Куча кода - в мусор. Вобщем, я перед Hugo121 в безкрайнем долгу!
0
04.02.2013, 14:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2013, 14:23
Помогаю со студенческими работами здесь

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

Необходимо посчитать количество уникальных символов в строке
Передо мной стоит следующая задача: я пишу калькулятор и как вы понимаете в нормальной десятичной...

В текстовом файле посчитать количество слов, чисел, символов
в текстовом файле посчитать количество слов, чисел(не цифр, а именно чисел), символов. вывести в...

Посчитать количество уникальных записей
Добрый день! имеем таблицу: ФИО, тест, результат несколько участников, несколько тестов, у...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru