Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
2-1229021735
ivak
2008-12-11 21:55
2009.01.25
Как работать с компонентом на который я нажал


3-1213780942
stas
2008-06-18 13:22
2009.01.25
Закачать большой файл в Blob


2-1229007872
9899100
2008-12-11 18:04
2009.01.25
ClipRect в TCanvas


2-1229085959
Pavel
2008-12-12 15:45
2009.01.25
Работа с STream


15-1227691000
Jeer
2008-11-26 12:16
2009.01.25
Проверка на сисадминность





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский