Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.25;
Скачать: CL | DM;

Вниз

Последовательный перебор элементов   Найти похожие ветки 

 
Skyhawk   (2008-04-03 16:09) [0]

Есть два массива - один пустой, другой заполненный:

var
a1:array of Char;
a2:array[0..25] of Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
......

как составить алгоритм последовательного перебора элементов массива от A до ZZZZZZ (количество символов в слове не более 9)
типа
A
B
C
AB
AC
BA
BB
BC
CA
CB
CC
AAA
AAB и т.д, а затем определить сколько слов состоит только из согласных, а сколько только из гласных(это конечно проще)
Уважаемые мастера ПОМОГИТЕ!


 
tesseract ©   (2008-04-03 16:12) [1]


> сколько слов состоит только из согласных, а сколько только
> из гласных(это конечно проще)


Заведи массив "согласные" и "гласные"  и проверяй.


 
Skyhawk   (2008-04-03 16:31) [2]


> Заведи массив "согласные" и "гласные"  и проверяй.


На это я и сам умный - не первый год на свете живу. Не катит - мне нужен полностью весь список (хотя это идиотизм - сотни тысяч вариантов) и процентное соотношение.


 
tesseract ©   (2008-04-03 16:39) [3]


> Не катит - мне нужен полностью весь список (хотя это идиотизм
> - сотни тысяч вариантов) и процентное соотношение.


Какие сотни тысяч ? У тебя 1 список вообще должен быть, по которому проверять будешь - согласная это или гласная.

ЗЫ:  Некоторым годы разума не прибавляют.


 
Skyhawk   (2008-04-03 16:50) [4]

Список и есть один. Вопрос в том как его сформировать!
От А до ZZ я все понимаю, даже при дополнительном счетчике до ZZZ но дальше??? Каким образом отрегулировать последовательность если количество символов в слове колеблется от 2 до 9. Как мне осуществить переход например от ACDZZZZ к ACEAAAA как контролировать инкремент индекса следующего символа?

Чтобы обработать результат - его нужно получить.


> Некоторым годы разума не прибавляют.
>

Мы вроде не в детском саду.


 
tesseract ©   (2008-04-03 16:55) [5]


> ACDZZZZ к ACEAAAA как контролировать инкремент индекса следующего
> символа?


Это как я понял элементs массива типа string ?  Там вообще тогда буквы роли не играют.


>  Каким образом отрегулировать последовательность если количество
> символов в слове колеблется от 2 до 9


Массиву вообще говоря то фонаря, что в нём содержиться. Заполняешь массив и всё.


 
MBo ©   (2008-04-03 16:57) [6]

12 093 235 слов из гласных
538 947 368 421 слов из согласных
5 646 683 826 135 слов всего
Ты всё еще хочешь генерировать весь список?


 
Andy BitOff ©   (2008-04-03 17:03) [7]

> Skyhawk   (03.04.08 16:09) [0], [2]

Зачем тебе ВЕСЬ список?
В цикле формирования последовательности (в конце) проверяй есть ли там (в текущей последовательности) гласные. А уж соотношение, это ты уж как-нибудь сам, не бог весть какая задача.


 
Andy BitOff ©   (2008-04-03 17:05) [8]

> MBo ©   (03.04.08 16:57) [6]

Это при длине 9?


 
tesseract ©   (2008-04-03 17:13) [9]


> Это при длине 9?


Энторпия для позиционных чисел расчитываеться как :   (база системы счисления ) ^ (количество значащих позиций). Можешь сам посчитать :-)


 
MBo ©   (2008-04-03 17:33) [10]

>Это при длине 9?
Да, длина от 1 до 9, 6 букв посчитал гласными
Пустое слово учитывалось, так что единицу надо отнимать.


 
Anatoly Podgoretsky ©   (2008-04-03 20:38) [11]

> Skyhawk  (03.04.2008 16:31:02)  [2]

Ты оптимист, не несколько сотен тысяч вариантов, а 5 * 10^15 не лопнешь? Даже если весь список хранить на диске, то это пторебуетсвыш 5000 террабайт, не говоря уже о том, что поседеешь пока список будешь составлять.


 
Skyhawk   (2008-04-04 10:54) [12]


> tesseract
>
> Это как я понял элементs массива типа string ?  Там вообще
> тогда буквы роли не играют.
>


см. вопрос: массив типа Char уже заполненный. Важны не буквы потому что как ты сам сказал "Массиву вообще говоря то фонаря, что в нем содержится".
Так вот важны не буквы, а цифры, не список, а алгоритм.

Начнем сначала: во-первых 9-максимальная а не потенциальная длина слова. То есть я должен просчитать варианты с длиной слова от 2 до 9. Соответственно средняя цифра 5. От нее и отталкиваюсь. Для слова длиной 2 символа можно использовать даже самый корявый алгоритм:

procedure Generate;
var
myWord:array of Char;
charArray:array[0..25] of Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
charIndex,counter:integer;
begin
charIndex:=0;
counter:=0;
repeat
myWord[charIndex]:=charArray[charIndex];
for counter:=0 to 25 do   {образно количество элементов массива букв}
  begin
    myWord[charIndex+1]:=charArray[counter];
  end;
inc(charIndex);
until charIndex<2;
end;


Для трехсимвольного слова можно взять за основу средний индекс и контролировать предыдущий и последующий, но для динамического массива это практически не возможно. Я пытался для 5 символов зациклить последовательное сравнение значений индекса символа создав дополнительную процедуру (типа GetCharIndex) которая по букве выдает ее позицию в массиве. Получается хрень какая-то.

P.S. В среднем через 5-7 секунд в живых остается только диспетчер задач. Прога начинает жрать всю память которую только можно.
Хотя я ставлю длину слова 4 символа. Пробовал массив слова сделать не динамическим, результат еще хуже - прога вылетает, комп виснет намертво, несмотря на то, что саму процедуру я не менял.



Страницы: 1 вся ветка

Текущий архив: 2009.01.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
2-1228999751
9899100
2008-12-11 15:49
2009.01.25
градиент


15-1228255615
demon
2008-12-03 01:06
2009.01.25
как защитить файл


15-1227755542
Slider007
2008-11-27 06:12
2009.01.25
С днем рождения ! 27 ноября 2008 четверг


2-1228467488
Sergey2
2008-12-05 11:58
2009.01.25
отключить включить локальное соединение.


2-1229339493
smartleds
2008-12-15 14:11
2009.01.25
Подскажите плз как массив TrackBar-ов поместить в ScrollBox?