Имя: Пароль:
LIFE
 
OFF: Подсчитать количество цифр 2
0 zak555
 
20.02.13
09:51
задачка

пусть дан ряд натуральных чисел 1...n
напишите функцию, которая подсчитает количество цифр 2, используемых в записи данного ряда
1 1Сергей
 
20.02.13
09:52
КоличствоДвоек = 0;
Для Каждого Элемент из Ряд Цикл
   Если Элемент=2 Тогда
       КоличствоДвоек = КоличствоДвоек + 1;
   КонецЕсли;
КонецЦикла;
2 MaxxiMiliSanM
 
20.02.13
09:53
неа - сперва в строку - а потом поиском
3 1Сергей
 
20.02.13
09:53
а... пардон, невнимательно прочёл задачу
4 1Сергей
 
20.02.13
09:53
(2) +1
5 smitru
 
20.02.13
09:53
(0) Ряд дан строковый или массивом натуральных чисел?
6 zak555
 
20.02.13
09:54
(2) хер, используем только числа
всякие СтрЧислоВхождений не годятся
7 1Сергей
 
20.02.13
09:55
КоличствоДвоек = 0;
Для Каждого Элемент из Ряд Цикл
   КоличствоДвоек = КоличствоДвоек + СтрЧислоВхождений("" + Элемент, "2");
КонецЦикла;
8 zak555
 
20.02.13
09:55
(5) массив натуральных чисел

(7) см. в (6)
9 1Сергей
 
20.02.13
09:56
(6) а почему ты об этом не сказал в (0)?
10 Serg_1960
 
20.02.13
09:57
(9) Из вредности
11 Godofsin
 
20.02.13
09:57
по-моему, без преобразования в строку не вариант
12 zak555
 
20.02.13
09:58
(11) да уж
13 1Сергей
 
20.02.13
09:59
рекурсия

Функция КоличествоЦифр(ВЧисле, Цифра)
   Если ВЧисле>9 Тогда
       Возврат ?(ВЧисле%10 = Цифра, 1, 0) + КоличествоЦифр(Цел(ВЧисле/10), Цифра);
   Иначе
       Возврат ?(ВЧисле%10 = Цифра, 1, 0);
   КонецЕсли;
КонецФункции
14 Serg_1960
 
20.02.13
09:59
(10) И вместо "100!" - он вам ещё какое-нибудь уточнение - пакость подбросит.

(11) Что, слабо разобраться из каких цифр состоит число. Подсказываю: делим и выделяем целое:)
15 Godofsin
 
20.02.13
10:02
(14) ну точно! как это будет выглядеть для 2222?
16 zak555
 
20.02.13
10:02
(14) > Подсказываю

главное, чтобы алгоритм был оптимальный, т.е. количество итераций было минимально =)
17 Reset
 
20.02.13
10:05
Массив=Новый Массив;
Массив.Добавить(12);
Массив.Добавить(22);
Массив.Добавить(100);
Массив.Добавить(-200);

Количество=0;
Для каждого Ч из Массив цикл
   Кф=10;
   Пока Ч<>0 цикл
       Цифра=Ч%Кф;
       Количество=Количество+(Цифра=2 или Цифра=-2);
       Ч=Цел(Ч/кф);
   КонецЦикла;
КонецЦикла;
18 1Сергей
 
20.02.13
10:05
(13) + во втором случае "%10" лишнее
19 aka AMIGO
 
20.02.13
10:05
Мое="1234523345345345222";
поз=0;
кол=0;
пока поз<СтрДлина(Мое) Цикл
поз=поз+1;
Если Сред(поз,1)=2 Тогда
кол=кол+1;
КонецЕсли
Сообщить(кол);
20 smitru
 
20.02.13
10:05
(16) Делаем цикл по элементам массива.
В цикле вначале с помощью формат преобразуем число в строку, а затем подсчитываем количество двоек в полученной строке..

И всё
21 rphosts
 
20.02.13
10:06
(13) рекурсия - ЗЛО! в (7) лучше
22 Serg_1960
 
20.02.13
10:06
"А на последок он сказал..."(с) ТС, ты ещё добавь, что задача не по программированию, а - по математике :))
23 Serg_1960
 
20.02.13
10:07
(19) Автор настаивает чтобы задача была решена без строковых преобразований.
24 aka AMIGO
 
20.02.13
10:10
(23) ааа... ну - тогда (не математически, а арифметически) смотрим на число, на каждой двойке загибаем очередной палец..
в конце считаем количество загнутфх пальцев, пишем на бумажке..
другого решения не вижу.. возможно, и не существует :)
25 rphosts
 
20.02.13
10:12
(24) ну почему, ещё 1 вложеный цикл, пока элемент не ноль - делим его в цикле на 10 и если остаток от деления =2 - "загибаем палец"
26 Rie
 
20.02.13
10:12
(0) Так и в чём проблемы? Алгоритм вывода числа в 10-чной системе - он как бы известен (возможно, лишь в узких кругах). Вставляем в него проверку на "2" и увеличение счётчика. После чего - прокручиваем эту хрень по всему ряду.
27 Rie
 
20.02.13
10:13
(24) Другого - не существует.
28 zak555
 
20.02.13
10:13
(17) нет, выбираешь любое натуральное число, пусть будет 64378
строишь ряд

1 2 3 4 .... 100 ... 999 ... 64000 ... 64370 ... 64378

смотришь в каждое число из этого ряда и считаешь количество циферек 2 в этом числе

но это не оптимальная задача
29 Идентификатор
 
20.02.13
10:13
сч=0;    
   кол=0;
   массивЧисел = Новый Массив;
   массивЧисел.Вставить(0,1);
   массивЧисел.Вставить(1,2);
   массивЧисел.Вставить(2,2);
   массивЧисел.Вставить(3,11);
   массивЧисел.Вставить(4,44);
   массивЧисел.Вставить(5,2);
   
   
   Пока 2*2=4 цикл
       
       Попытка
           
           Если Символ(массивЧисел[сч])=Символ(2) тогда
               кол=кол+1;
           КонецЕсли;
       
       Исключение
           
           Прервать
           
       КонецПопытки;
       
       сч=сч+1;
       
   КонецЦикла;
   
   Сообщить(кол);
30 zak555
 
20.02.13
10:14
(20) читаем (6)
31 zak555
 
20.02.13
10:15
(27) т.е. ты считаешь, что только перебором всего ряда можно решить задачу ?
32 zak555
 
20.02.13
10:15
ряд последователен, без пропусков
33 Godofsin
 
20.02.13
10:16
(29) как насчет числа 242? не пройдет
34 Rie
 
20.02.13
10:18
(31) Да. Доказать - лень, но взаимная простота 2 и 5 как бы намекает...
35 aka AMIGO
 
20.02.13
10:18
(31) что за проблема у тебя, та, первоначальная?
может быть ты условие для решения проблемы некорректно формализовал?
36 Godofsin
 
20.02.13
10:19
А можно не 1с использовать?
37 zak555
 
20.02.13
10:22
(34) подсказка...

рассмотрим любое число из 1 ... 99

выберем число 67 ( 7 > 2 )
очевидно, что в каждом десятке 0/10/20/30../60
будет по одной двойке, т.е. 2 * 6 = 12
но есть ещё ряд 20ки, где в каждом разряде десяти присутствует 2, причём 10 раз => ещё 1 * 10 = 10

итого ответ, в ряде 1 ... 67, для задачи из (0) будет равен 10 + 12 = 22
38 zak555
 
20.02.13
10:23
(35) условия достаточные, просто я забыл, что все любят преобразовывать из строки в число и наоборот
39 zak555
 
20.02.13
10:23
(36) всё равно на чём
40 Жан Пердежон
 
20.02.13
10:27
(0)
а = "1233423940234";
Сообщить(СтрДлина(а) - СтрДлина(СтрЗаменить(а,"2","")));
41 aka AMIGO
 
20.02.13
10:29
(37) ну! я-ж говорил, что тут не математика, а арифметика :)
задачка-то для 5-го класса :)
а 1с-ники споткнулись :)
42 SeraFim
 
20.02.13
10:29
(37) число 22 посчитал 2 раза =)
43 1Сергей
 
20.02.13
10:31
(37) а теперь то же самое для десятизначного числа
44 1Сергей
 
20.02.13
10:32
(42) правильно, ведь там две двойки
45 aka AMIGO
 
20.02.13
10:32
победная точка у ТС :)
http://nsc.1september.ru/articlef.php?ID=200700109
46 SeraFim
 
20.02.13
10:33
(44)тьфу, точно) задача же - количество двоек, а не количество чисел с двойкой)
47 Идентификатор
 
20.02.13
10:33
сч=0;    
   кол=0;
   массивЧисел = Новый Массив;
   массивЧисел.Вставить(0,12325);
   массивЧисел.Вставить(1,3242);
   массивЧисел.Вставить(2,253652);
   массивЧисел.Вставить(3,11);
   массивЧисел.Вставить(4,44);
   массивЧисел.Вставить(5,2);
   массивЧисел.Вставить(6,42);
   
   
   Пока 2*2=4 цикл
       
       Попытка
           
           Для ыть=1 по СтрДлина(массивЧисел[сч]) цикл
               
               
                   Попытка
                       Если символ(Сред(МассивЧисел[сч],ыть,1))=символ(2) тогда
                           
                           кол=кол+1;
                           
                       КонецЕсли;
                   Исключение
                       
                       авава="дырка";
                       
                   КонецПопытки;
                   
           КонецЦикла;
           
           
           //Если Символ(массивЧисел[сч])=Символ(2) тогда
           //    кол=кол+1;
           //КонецЕсли;
       
       Исключение
           
           Прервать
           
       КонецПопытки;
       
       сч=сч+1;
       
   КонецЦикла;
   
   Сообщить(кол);
48 goleaff2006
 
20.02.13
10:33
будет по одной двойке, т.е. 2 * 6 = 12 Откуда 2,12,22,32,42,52,62 итого 7Что за арифметика.
49 1Сергей
 
20.02.13
10:34
(47) ты не из Индии?
50 GANR
 
20.02.13
10:35
Каждое число делить на 10 и брать остаток (операции / и %) и, если остаток от деления равен 2, Счетчик = Счетчик + 1
51 Идентификатор
 
20.02.13
10:35
сч=0;    
   вотОно=0;
   массивЧисел = Новый Массив;
   массивЧисел.Вставить(0,12325);
   массивЧисел.Вставить(1,3242);
   массивЧисел.Вставить(2,253652);
   массивЧисел.Вставить(3,11);
   массивЧисел.Вставить(4,44);
   массивЧисел.Вставить(5,2);
   массивЧисел.Вставить(6,42);
   
   
   Пока 2*2=4 цикл
       
       Попытка
           
           Для ыть=1 по СтрДлина(массивЧисел[сч]) цикл
               
               
                   Попытка
                       Если символ(Сред(МассивЧисел[сч],ыть,1))=символ(2) тогда
                           
                           вотОно=вотОно+1;
                           Прервать;
                       КонецЕсли;
                   Исключение
                       
                       авава="дырка";
                       
                   КонецПопытки;
                   
           КонецЦикла;
           
           
           //Если Символ(массивЧисел[сч])=Символ(2) тогда
           //    кол=кол+1;
           //КонецЕсли;
       
       Исключение
           
           Прервать
           
       КонецПопытки;
       
       сч=сч+1;
       
   КонецЦикла;
   
   Сообщить(кол);
52 GANR
 
20.02.13
10:35
+(50) делить пока частное не будет равно 0
53 1Сергей
 
20.02.13
10:36
(21) кстати, почему рекурсия зло-то?
54 1Сергей
 
20.02.13
10:36
(50)см(13)
55 Wern
 
20.02.13
10:42
т.е. просто считаем количество 10-к. их n/10 в каждой по 1 двойке. Количество сотен их n/100 в каждой еще по 10 двоек количество тысяч их n/1000 в каждой по 100 двоек и т.д.?
56 Serg_1960
 
20.02.13
10:45
А теперь уточнение, мелкое замечание для (0)

"ряд натуральных чисел" <> "натуральный ряд чисел".

Неожиданно, да?
57 1Сергей
 
20.02.13
10:46
(56) +100500 всех с толку сбил
58 zak555
 
20.02.13
10:49
в (37) я напутал с про сони, вот вышел из душа и всё встало на свои места

ответ должен быть
цифры 2 единичном разряде всего 7 ( 0,1,..,6)
цифры 2 десятичном разряде всего 10 (20, ... 29)
ответ 10 +7 = 17
59 фобка
 
20.02.13
10:49
(55) в каждом десятке кроме второго, в каждой сотне кроме второй
60 Serg_1960
 
20.02.13
10:51
"с про сони" - это пять! Надо будет запомнить :))
61 фобка
 
20.02.13
10:52
(58) стопэ
2,12,21,22,23,24,25,26,27,28,29,32,42,52,62
16 двоек
62 zak555
 
20.02.13
10:52
(61) где 20 :?
63 Идентификатор
 
20.02.13
10:52
(61) пИтнадцЦать
64 zak555
 
20.02.13
10:53
(60) тебе пробелы мерещатся
65 фобка
 
20.02.13
10:53
(62) точно, с про сони ;)
66 Идентификатор
 
20.02.13
10:54
+(61) ну если я правильно понял, то по условию задачи в зачет идет число, имеющее одну двойку
67 AnKa4
 
20.02.13
10:56
Н = 656564; //граница ряда
Кол100 = Окр(Н/100-0.5);
КолОстаток = Н - Кол100 * 100;
Кол10_От_Остатка = Окр(Кол100/10-0.5);

КолДвоек = Кол100  * 20 + Кол10_От_Остатка;

Если Кол10_От_Остатка > 2 Тогда
КолДвоек = КолДвоек + 10
ИначеЕсли Кол10_От_Остатка = 2 Тогда
КолДвоек = КолДвоек + (КолОстаток - Кол10_От_Остатка*10)
КонецЕсли;
68 zak555
 
20.02.13
10:58
(66) нет, если хотя бы одна
69 Godofsin
 
20.02.13
11:01
(67) не вникал, работает?
70 фобка
 
20.02.13
11:01
(69) не взлетит, только сотни и десятки учел
71 1Сергей
 
20.02.13
11:07
Кол100 = Окр(Н/100-0.5);

Жесть жестяная! Открой для себя функцию Цел()
72 Тролль главный
 
20.02.13
11:12
долго думал, отвлекали:

Функция ЧислоДвоек(Ч)
   
   Если Ч=0 Тогда
       Возврат 0;    
   КонецЕсли;
   Результат = 0;
   
   МладшихРазрядов = Цел(Log10(Ч));
   Если МладшихРазрядов>0 Тогда
       МладшаяСтепень10 = Pow(10,МладшихРазрядов-1);
       Результат = Результат+ МладшихРазрядов*МладшаяСтепень10;            
       Степень10 = МладшаяСтепень10*10;
       Остаток = Ч%Степень10;
       Результат = Результат + ЧислоДвоек(Остаток);
   Иначе
       Степень10 = 1;
   КонецЕсли;
   
   Если Ч>=3*Степень10 Тогда
       Результат = Результат + Степень10;
   ИначеЕсли Ч>=2*Степень10 Тогда
       Результат = Результат + (Ч-2*Степень10+1);
   КонецЕсли;
   
   Возврат Результат;    

КонецФункции
73 Птица
 
20.02.13
11:20
Н = 1487980;
Делимое = Н;
Двоек = 0;
Цифра2 = 2;
Степень10 = 1;

Пока Делимое>=Цифра2  Цикл
 ДвоекВИтерации = Цел(Делимое,10)+
                               ?(Делимое%10>=Цифра2 ,1,0);

 Двоек = Двоек + ДвоекВИтерации*Степень10;
 Степень10 = Степень10*10;
 Делимое = Цел(Делимое,10);
КонецЦикла;
74 Тролль главный
 
20.02.13
11:25
(73) зациклится, не?
75 Godofsin
 
20.02.13
11:27
//n - количество цфр в массиве
//mas - массив

dvoiki:=0;
for i:=1 to n do
Begin    

if mas[i] = 2 then
Dvoiki:=Dvoiki = Dvoiki+1;
end;

int = mas[i];
Repeat

If int mod 10 = 2 then
Dvoiki:=Dvoiki = Dvoiki+1;
end;

int := int div 10;
Until int>0 do
end;
WriteLn(Dvoiki);
 

собссно, перебор
76 фобка
 
20.02.13
11:30
(72) круто выглядит но вычисляет с ошибкой. Для 67 возвращает 12 (вместо 17)
(73) нерабочий код
77 Птица
 
20.02.13
11:31
+(73)
"Цел(Делимое,10)" читать как "Цел(Делимое/10)"
(74) не
78 фобка
 
20.02.13
11:40
(77) у тебя тоже с ошибкой

Сообщить(ЧислоДвоек(67)) = 12
Сообщить(Птица(67)) = 17
Сообщить(ЧислоДвоек(100)) = 20
Сообщить(Птица(100)) = 20
Сообщить(ЧислоДвоек(200)) = 21
Сообщить(Птица(200)) = 140
Сообщить(ЧислоДвоек(201)) = 22
Сообщить(Птица(201)) = 140
79 Тролль главный
 
20.02.13
11:51
(76) спасибо, исправил:

Функция ЧислоДвоек(Ч)
   
   Если Ч=0 Тогда
       Возврат 0;    
   КонецЕсли;
   Результат = 0;
   
   МладшихРазрядов = Цел(Log10(Ч));
   Если МладшихРазрядов>0 Тогда
       МладшаяСтепень10 = Pow(10,МладшихРазрядов-1);
       Степень10 = МладшаяСтепень10*10;
       Остаток = Ч%Степень10;
       ПерваяЦифра = (Ч-Остаток)/Степень10;
       Результат = Результат + ЧислоДвоек(Остаток) + ПерваяЦифра*МладшихРазрядов*МладшаяСтепень10;
   Иначе
       Степень10 = 1;
   КонецЕсли;
   
   Если Ч>=3*Степень10 Тогда
       Результат = Результат + Степень10;
   ИначеЕсли Ч>=2*Степень10 Тогда
       Результат = Результат + (Ч-2*Степень10+1);
   КонецЕсли;
   
   Возврат Результат;    

КонецФункции
80 Эмбеддер
 
20.02.13
12:00
МладшихРазрядов = Цел(Log10(Ч)) я бы лучше заменил на
СтрДлина(Формат(Ч, "ЧГ="))-1
81 GANR
 
20.02.13
12:01
(54) ну зачем рекурсия?
82 фобка
 
20.02.13
12:02
(79) да, рабочий код, крут :)
83 1Сергей
 
20.02.13
12:06
(81) рекурсия часто получается более компактной и понятной, чем куча вложенных циклов и использование большого количества переменных
84 Птица
 
20.02.13
12:11
Делимое = ЧислоН;
Двоек = 0;
Цифра2 = 2;
Степень10 = 1;

(78)тогда так:
Пока Делимое>=Цифра2  Цикл
 ОстатокОтДеления = Делимое%10;    
 ДвоекВИтерации = (Цел(Делимое/10)+
                               ?(ОстатокОтДеления>Цифра2 ,1,0))*Степень10+?(ОстатокОтДеления=Цифра2,ЧислоН%Степень10+1,0);

 Двоек = Двоек + ДвоекВИтерации;
 Степень10 = Степень10*10;
 Делимое = Цел(Делимое/10);
КонецЦикла;
85 фобка
 
20.02.13
12:17
(84) да, работает. Кстати оба алгоритма дают какую-то погрешность на больших числах) но это уже неважно. Молодцы, я не смог доделать)

Сообщить(Тролль(60 000 000 000)) = 70 000 000 000
Сообщить(Птица(60 000 000 000)) = 70 000 000 000
Сообщить(Тролль(60 000 000 001)) = 70 000 000 000
Сообщить(Птица(60 000 000 001)) = 70 000 000 000
Сообщить(Тролль(60 000 000 002)) = 70 000 000 001
Сообщить(Птица(60 000 000 002)) = 70 000 000 001
Сообщить(Тролль(60 000 000 010)) = 70 000 000 001
Сообщить(Птица(60 000 000 010)) = 70 000 000 001
86 Simod
 
20.02.13
13:17
Мля, жуть какая-то.....

Процедура Сформировать()

   п_Количество    = 0;
   
   Для СчетчикЦикла = 1 По 23 Цикл
       п_Число    = СчетчикЦикла;
       Пока п_Число > 0 Цикл
           п_Количество    = п_Количество + ?(п_Число - Цел(п_Число/10)*10 = 2, 1, 0);
           п_Число            = Цел(п_Число/10);
       КонецЦикла;
   КонецЦикла;
   
   Сообщить("Количество ""2"": " + п_Количество);
   
КонецПроцедуры
87 zak555
 
20.02.13
20:13
(73) что такое 1487980 :?
88 zak555
 
20.02.13
20:18
(75) перебор неинтересен
89 Птица
 
20.02.13
20:34
(87)число с потолка. но вообще смотри сразу исправленный вариант в (84)
90 zak555
 
20.02.13
20:39
(79)мудрённый код
91 zak555
 
20.02.13
20:43
(86) что такое 23 ?
92 zak555
 
20.02.13
20:45
чт о-то у меня  в табло % не работает
93 zak555
 
20.02.13
22:02
Log10(Ч) и Pow(10,МладшихРазрядов-1) -- это оптимально ?
94 NcSteel
 
20.02.13
22:27
Не проверял:

Перем ОбрабатываемоеЧисло;

Функция Сформировать(ОбрабатываемоеЧисло)
   
   ЦифраПоиска = Неопределено;
   
   Для i = 0 По 9 Цикл
       
       Режим = РежимДиалогаВопрос.ДаНет;
       Текст = "Искать цифру " + i + "?";
       Ответ = Вопрос(Текст, Режим, 0);
       Если Ответ = КодВозвратаДиалога.Да Тогда
           ЦифраПоиска = Формат(i, "ЧН=0");
       КонецЕсли;
       
   КонецЦикла;
       
   ЧислоСтрокой = Формат(ОбрабатываемоеЧисло, "ЧН=0");
   
   ТаблицаЦифр = Новый ТаблицаЗначений;
   ТаблицаЦифр.Колонки.Добавить("Цифра", Тип("Строка"));
   
   Для i = 1 По СтрДлина(ЧислоСтрокой) Цикл
       
       НоваяСтрокаЦифр = ТаблицаЦифр.Добавить();    
       НоваяСтрокаЦифр.Цифра = Сред(ЧислоСтрокой, i, 1);
       
   КонецЦикла;
   
   Запрос = Новый Запрос;
   Запрос.Текст =    "ВЫБРАТЬ
                     |    ВнешняяТаблица.Цифра
                     |ПОМЕСТИТЬ ВТТаблицаЦифр
                     |ИЗ
                     |    ТаблицаЦифр КАК ВнешняяТаблица
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |ВЫБРАТЬ
                     |    КОЛИЧЕСТВО(ВТТаблицаЦифр.Цифра) КАК КоличествоЦифр
                     |ИЗ
                     |    ВТТаблицаЦифр КАК ВТТаблицаЦифр
                     |ГДЕ
                     |    ВТТаблицаЦифр.Цифра = &Цифра";
                   
   Запрос.УстановитьПараметр("Цифра",ЦифраПоиска);
   Выборка = Запрос.Выполнить().Выбрать();
   Если Выборка.Следующий() Тогда
       Возврат Выборка.КоличествоЦифр;
   Иначе
       Возврат 0;
   КонецЕсли;
   
КонецФункции
95 zak555
 
20.02.13
22:35
Тролль главный сливает =)

Тролль главный: ПолеЧисло = 113 функция = 22
Тролль главный: ПолеЧисло = 114 функция = 22
Тролль главный: ПолеЧисло = 115 функция = 22
Тролль главный: ПолеЧисло = 116 функция = 22
Тролль главный: ПолеЧисло = 117 функция = 22
Тролль главный: ПолеЧисло = 118 функция = 22
Тролль главный: ПолеЧисло = 119 функция = 22
Тролль главный: ПолеЧисло = 120 функция = 23
Тролль главный: ПолеЧисло = 121 функция = 24
Тролль главный: ПолеЧисло = 122 функция = 26
96 zak555
 
20.02.13
22:36
(95) это про Птица
97 HeroShima
 
20.02.13
22:55
Двоек в числе: в цикле делить на 100, остаток проверять по таблице, или кейсом. Без рекурсий.
98 HeroShima
 
20.02.13
23:07
(97) "базу" можно варьировать в зависимости от предполагаемых порядков чисел
99 Тролль главный
 
21.02.13
07:11
(95) не надо грязи!
100 Гобсек
 
21.02.13
07:12
(100)
101 Simod
 
21.02.13
08:20
(91) Совсем тупой? Тогда разжую:


//******************************************************************************
// КоличествоЗаданныхЦифрВЧисле(п_Число, п_Цифра)
//
// Параметры:
//  п_Число    - число, которое необходимо проверить на наличие заданых цифр;
//  п_Цифра    - число, цифра (0..9), количество которой необходимо подсчитать.
//
// Возвращаемое значение:
//  Число.
//
// Описание:
//  Подсчитывает количество вхождений цифры в число.
//
Функция КоличествоЗаданныхЦифрВЧисле(Знач п_Число, п_Цифра = 2)
   
   п_Количество    = 0;
   
   Пока п_Число > 0 Цикл
       п_Количество    = п_Количество + ?(п_Число - Цел(п_Число/10)*10 = п_Цифра, 1, 0);
       п_Число            = Цел(п_Число/10);
   КонецЦикла;
   
   Возврат п_Количество;
   
КонецФункции // КоличествоЗаданныхЦифрВЧисле()
102 Тролль главный
 
21.02.13
15:04
(101) неверно считает
103 Тролль главный
 
21.02.13
15:05
+(102) точнее она считает совсем другую задачу
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший