Имя: Пароль:
1C
 
Найти количество различных элементов в массиве.
,
0 Нач программист
 
05.09.16
14:38
Найти количество различных элементов в массиве.
    
    МассивЧиселВСтроку="";
    КоличествоСхожихЭлементов=0;
    а=0;
        
    МассивЧисел=Новый Массив(20);
    ГСЧ=Новый ГенераторСлучайныхЧисел(20);
    
    Для Счетчик=0 По 19 Цикл
        
        СлучайноеЧисло=ГСЧ.СлучайноеЧисло(1,40);
        МассивЧисел[Счетчик]=СлучайноеЧисло;
        МассивЧиселВСтроку=МассивЧиселВСтроку+МассивЧисел[Счетчик]+" ";
        
    КонецЦикла;
    
    Сообщить("Массив Чисел: "+МассивЧиселВСтроку);
    
    Для Счетчик=0 По 19 Цикл
                
        Для СчетчикПроверкиКаждогоЭлемента=0 По 19 Цикл
            
            Если Счетчик<>СчетчикПроверкиКаждогоЭлемента И МассивЧисел[Счетчик]=МассивЧисел[СчетчикПроверкиКаждогоЭлемента] Тогда
                КоличествоСхожихЭлементов=КоличествоСхожихЭлементов+1;      
            КонецЕсли;                            
            
        КонецЦикла;
        
    КонецЦикла;
    
    Сообщить("Количество схожих элементов: "+КоличествоСхожихЭлементов);
    Сообщить("Количество различных элементов: "+(20-КоличествоСхожихЭлементов));
1 Нач программист
 
05.09.16
14:40
Неправильно считает цикл когда в массиве схожие элементы 3, 4, 5,. . . . .
2 DTX 4th
 
05.09.16
14:42
КолРазличных = 0;
Соответствие = Новый Соответсвие;
Для Счетчик=0 По 19 Цикл
        Число = МассивЧисел[Счетчик];
        Если Соответсвие[Число] = Неопределено Тогда
            КолРазличных = КолРазличных + 1;
            Соответсвие[Число] = КолРазличных;
        КонецЕсли;
КонецЦикла;
Сообщить(КолРазличных);
3 orefkov
 
05.09.16
14:45
Соответствие = Новый Соответсвие;
Для Счетчик=0 По 19 Цикл
    Соответсвие[Число] = 1;
КонецЦикла;
Сообщить(Соответствие.Количество());
4 Нач программист
 
05.09.16
14:45
Соответствие - это массив да?
5 PR
 
05.09.16
14:47
(4) Нет
Массив да — это

МассивДа = Новый Массив;
МассивДа.Добавить(Истина);
МассивДа.Добавить(Истина);
МассивДа.Добавить(Истина);
6 DTX 4th
 
05.09.16
14:47
(3) Так и знал, что нужно в СП заглянуть)
7 orefkov
 
05.09.16
14:48
числа = Новый Массив;
...
Ключи = Новый Соответствие;
Для Каждого э Из числа Цикл
    Ключи[э] = 1;
КонецЦикла;
Сообщить(Ключи.Количество());
8 Нач программист
 
05.09.16
14:52
(2) Выдает такую ошибку

{Форма.Форма.Форма(105,15)}: Переменная не определена (Соответсвие)
            Если <<?>>Соответсвие[Число] = Неопределено Тогда (Проверка: Тонкий клиент)
{Форма.Форма.Форма(107,14)}: Переменная не определена (Соответсвие)
                <<?>>Соответсвие[Число] = КолРазличных; (Проверка: Тонкий клиент)
9 orefkov
 
05.09.16
14:52
Вот так точно будет
числа = Новый Массив;
Ключи = Новый Соответствие;
Для Каждого э Из числа Цикл
    Ключи.Вставить(э, 1);
КонецЦикла;
Сообщить(Ключи.Количество());
10 palpetrovich
 
05.09.16
14:53
вставлю 5 копеек :)

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Числа");
ТЗ.ЗагрузитьКолонку(МассивЧисел, "Числа");
ТЗ.Свернуть("Числа",);
сообщить("разных "+ТЗ.КоличествоСтрок());
11 PR
 
05.09.16
14:54
(8) Один безграмотный, другой слепой