Консультация № 180181
06.10.2010, 17:04
45.00 руб.
0 42 2
Здравствуйте.
Имеется набор цифр(64758768455234234576872314248045536456454564575675675567563452125600) в десятичной системе счисления в Edit1. Никаких проверок на наличие других цифр производить не нужно.

Нужно вычислить для каждой цифры количество серий в 1 цифру, в 2 цифры, в 3 цифры и т.д.
а потом вычислить вероятности появления площадок(серий) в 1 , 2, 3 цифры

формула для вычисления вер-ти P=(1/10)L, где L-количество цифр в серии.

Этот код вычисляет вер-ть появления цифры только в 1 серию:[/b]

Приложение:
var
i:integer;
begin
for i:=0 to 9 do a[i]:=0;
for i:=1 to Length(Edit1.Text) do Inc(a[StrToInt(Edit1.Text[i])]);
end;

Обсуждение

Неизвестный
07.10.2010, 12:36
общий
Я извиняюсь, но можно еще и вероятности посчитать.
Можно просто добавить в эту строку.
mmoResult.Lines.Add('Кол-во серий цифры '+ IntToStr(i)+' длинной '+IntToStr(j)+' : '+IntToStr(arr[i, j]+'вероятность'+Р));
Неизвестный
07.10.2010, 13:12
общий
очень нужно вычислить вероятность . Стоимость вопроса изменю до 45 рублей.
формула для вычисления вер-ти P=(1/10)L, где L-количество цифр в серии
давно
Мастер-Эксперт
325460
1469
07.10.2010, 13:18
общий
вам нужно написать программный код ля вычисления вероятности??? или вручную пойдет???
так смотрите для цифр из одной серии вероятность 1/10
из двух цифр 1/100
3х- 1/1000
4х- 1/10000
подставляете вместо L нужное вам значение и получаете вероятность или вопрос я не так понял?
Об авторе:
to live is to die
Неизвестный
07.10.2010, 13:20
общий
нужно дописать программный код.
давно
Мастер-Эксперт
325460
1469
07.10.2010, 13:25
общий
var
i:integer;
begin
for i:=1 to 9 do a[i]:=(1/10)**i;
end;

ну вот типа такого получаете вероятности для цепочек от 1 до 9, только возведение в степень может не так в делфи записывается не помню
можно еще

var
i:integer;
begin
a[i]:=1/10;
for i:=2 to 9 do a[i]:=a[i-1]/10;
end;
ну это если степенной записи нет
Об авторе:
to live is to die
Неизвестный
07.10.2010, 13:40
общий
только там как то не так степень записывается , вроде бы a[i]:=exp(ln(1/10)*i)
сейчас попробую.
Неизвестный
07.10.2010, 13:47
общий
[DCC Error] Unit1.pas(185): E2010 Incompatible types: 'Byte' and 'Extended'
в строчке
for i:=1 to 9 do a[i]:=exp(ln(1/10)*i);
давно
Мастер-Эксперт
325460
1469
07.10.2010, 13:47
общий
второй вариант даже покрасивее чем запись в степень пошустрее работать будет (хотя для данной задачи это и незаметно будет :)).
novij2011 расскажете все ли в норме.
ага надо массив a[i] определить новый и обозвать его не Byte а к примеру Char или Real ну чтобы массив из дробных чисел был, да это не учел :)
Об авторе:
to live is to die
Неизвестный
07.10.2010, 13:59
общий
ошибки про несоответствие типов выдает.
Может как то можно привязать к основной программе к этой строчке mmoResult.Lines.Add('Кол-во серий цифры '+
IntToStr(i)+' длинной '+IntToStr(j)+
' : '+IntToStr(arr[i, j]));
?
Неизвестный
07.10.2010, 14:05
общий
если применить его к программе выше то выдал число 10 = вероятности 0,1 и все
Неизвестный
07.10.2010, 14:21
общий
Cradlea
посмотрите пожалуйста на результат
Кол-во серий цифры 1 длинной 1 : 28 вероятность 0,1
Кол-во серий цифры 1 длинной 2 : 2 вероятность 0,1
Кол-во серий цифры 2 длинной 1 : 19 вероятность 0,01
Кол-во серий цифры 3 длинной 1 : 9 вероятность 0,001
Кол-во серий цифры 3 длинной 3 : 1 вероятность 0,001
Кол-во серий цифры 4 длинной 1 : 14 вероятность 0,0001
Кол-во серий цифры 5 длинной 1 : 14 вероятность 1E-5
Кол-во серий цифры 6 длинной 1 : 19 вероятность 1E-6
Кол-во серий цифры 6 длинной 2 : 2 вероятность 1E-6
Кол-во серий цифры 7 длинной 1 : 11 вероятность 1E-7
Кол-во серий цифры 7 длинной 2 : 1 вероятность 1E-7
Кол-во серий цифры 8 длинной 1 : 14 вероятность 1E-8
Кол-во серий цифры 8 длинной 2 : 1 вероятность 1E-8
Кол-во серий цифры 9 длинной 1 : 9 вероятность 1E-9
Кол-во серий цифры 9 длинной 2 : 1 вероятность 1E-9

очень смущает меня буковка E, или так и должно быть?
давно
Мастер-Эксперт
325460
1469
07.10.2010, 14:26
общий
var arver:array[0..9] of Extended;
i:integer;
begin
arver[i]:=1/10;
for i:=2 to 9 do arver[i]:=arver[i-1]/10;
end;
Вы получили массив вероятностей для чисел от 1 до 9 вернее для последовательностей в 1, 2... 9 цифр
теперь Вам нужно вывести эти вероятности,

mmoResult.Lines.Add('Кол-во серий цифры '+
IntToStr(i)+' длинной '+IntToStr(j)+
' : '+IntToStr(arr[i, j])+'вероятность ' +FloatToStr(arver[i]) );

ну что-то типа того должно быть
Об авторе:
to live is to die
давно
Мастер-Эксперт
325460
1469
07.10.2010, 14:27
общий
так и должно быть
это показатель того что число очень маленькое
1E-9 означает что число равно 0,0000000001 так оно записывается
сумма всех вероятностей равна единице все верно.
Об авторе:
to live is to die
Неизвестный
07.10.2010, 14:31
общий
спасибо.
Программа работает.
давно
Мастер-Эксперт
325460
1469
07.10.2010, 14:32
общий
красотень, обращайтесь еще кол-ьчего :)
Об авторе:
to live is to die
давно
Мастер-Эксперт
325460
1469
07.10.2010, 14:34
общий
07.10.2010, 23:06
это ответ
Здравствуйте, novij2011.
для подсчета вероятностей встречи числовой последовательности используем следующий код в приложении


Приложение:
var arver:array[0..9] of Extended;
i:integer;
begin
arver[i]:=1/10;
for i:=2 to 9 do arver[i]:=arver[i-1]/10;
end;
Вы получили массив вероятностей для чисел от 1 до 9 вернее для последовательностей в 1, 2... 9 цифр
теперь Вам нужно вывести эти вероятности,

mmoResult.Lines.Add('Кол-во серий цифры '+
IntToStr(i)+' длиной '+IntToStr(j)+
' : '+IntToStr(arr[i, j])+'вероятность ' +FloatToStr(arver[i]) );
5
5
Об авторе:
to live is to die
Неизвестный
07.10.2010, 14:52
общий
хорошо
давно
Мастер-Эксперт
17387
18345
07.10.2010, 16:42
общий
Господа! Слово "длина" пишется с одной буквой "н".
Об авторе:
Facta loquuntur.
давно
Академик
320937
2216
07.10.2010, 20:34
общий
cradlea:
Добрый вечер! Вы пишете
Код:
var arver:array[0..9, 1..MaxDlSerii] of Extended;
i:integer;
begin
arver[i]:=1/10;
и т.д.
У Вас в ответе arver - одновременно и одномерный и двумерный массив. Мистика какая-то.
давно
Мастер-Эксперт
325460
1469
07.10.2010, 21:24
общий
тут же главное чтобы код заработал
ctrl+C ctrl+V - злая штука
var arver:array[0..9] of Extended; так должно быть
Об авторе:
to live is to die
давно
Академик
320937
2216
07.10.2010, 21:34
общий
cradlea:
Проверьте еще раз свой код и попросите модераторов внести исправления в ответ.
давно
Мастер-Эксперт
325460
1469
07.10.2010, 21:47
общий
не ну и лошара ж я.
МОДЕРАТОРЫ!
замянице калиласка код, в минифоруме пральна, а в ответе размерность массива не совподает, спасибо.
Об авторе:
to live is to die
давно
Мастер-Эксперт
17387
18345
07.10.2010, 22:29
общий
cradlea:
Приводите правильный код полностью. Модераторы заменят приложение к Вашему ответу.

Печально то, что Вы не извлекаете уроков из своих ошибок. По-прежнему спешите.
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
17387
18345
07.10.2010, 22:46
общий
cradlea:
Приведите ПОЛНОСТЬЮ исправленный текст приложения, который должен заменить ныне имеющийся.

Если Вы хотите обратиться к кому-то лично в какой-либо ветке, пользуйтесь опцией "Выбрать адресата" под кнопочной панелью в этой ветке.
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
325460
1469
07.10.2010, 22:51
общий
var arver:array[0..9] of Extended;
i:integer;
begin
arver[i]:=1/10;
for i:=2 to 9 do arver[i]:=arver[i-1]/10;
end;
Вы получили массив вероятностей для чисел от 1 до 9 вернее для последовательностей в 1, 2... 9 цифр
теперь Вам нужно вывести эти вероятности,

mmoResult.Lines.Add('Кол-во серий цифры '+
IntToStr(i)+' длиной '+IntToStr(j)+
' : '+IntToStr(arr[i, j])+'вероятность ' +FloatToStr(arver[i]) );


такая тема должна быть! для модераторов.
Об авторе:
to live is to die
давно
Мастер-Эксперт
17387
18345
07.10.2010, 23:08
общий
cradlea:
Вашу просьбу выполнил. Приложение исправил.
Об авторе:
Facta loquuntur.
Неизвестный
08.10.2010, 18:10
общий
о как все получается. Спасибо.
Неизвестный
08.10.2010, 19:50
общий
только я не понял зачем было делать новый массив и в нем считать, я добавил
memo1.Lines.Add('Кол-во серий цифры '+IntToStr(i)+' длинной '+IntToStr(j)+' : '+IntToStr(arr[i, j])+' вероятность '+floattostr(exp(ln(1/10)*i)));
и результат получается одинаковый?
Или я в чем то не прав?
давно
Мастер-Эксперт
325460
1469
09.10.2010, 09:19
общий
да все правильно все работает, но для красоты кода.
один масив за одно отвечает другой за другое, к примеру если нужно что-то хранить и воспользоваться данными.
Об авторе:
to live is to die
Неизвестный
09.10.2010, 11:34
общий
спасибо
Форма ответа