|
Вопрос # 3 624/ вопрос открыт / |
|
Здравствуйте!Скажите пожалуйста как мне в поле memo1 вывести все комбинации
чисел используя все английские буквы(большие и маленькие) и цифры на 8 символов.
Пример:
AAAAAAAA
AAAAAAAB
...
z7Kh8vFq
...
zzzzzzzz
Примечание #1 (6 января 2010, 16:45): Извиняюсь не чисел,а букв.
 |
Вопрос задал: Гена (статус: Посетитель)
Вопрос отправлен: 6 января 2010, 15:00
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Гена!
Все не то что просто, а очень просто. Весь секрет в том, что делфи (и в паскале тоже) цикл for умеет работать и по символам, и по массивам. То есть, мы в праве написать что то вида
var c:char;
s:string;
begin
s := '';
for c := 'a' to 'f' do
s := s + c;
end;
и по окончанию этого кода строка s будет равна abcdef
Но в данном случае лучше использовать другой метод.
const
sym:string = '0123456789abc.......xyz';//вписываем все буквы и цифры, которые нам нужны.
var
len:integer;
i:array [1..8] of integer;
j:integer;
s:string;
begin
memo1.clear;
len := length(sym);
for i[1] := 1 to len do
for i[2] := 1 to len do
for i[3] := 1 to len do
for i[4] := 1 to len do
for i[5] := 1 to len do
for i[6] := 1 to len do
for i[7] := 1 to len do
for i[8] := 1 to len do
begin
s := '';
for j:= 1 to length(i) do
s := s + sym[i[j]];
memo1.lines.add(s);
end;
end;
Логично, что если захочется что бы к примеру в генерируемых последовательностях не было 0, то просто убираем с исходной строки. Если же первый символ генерируемой строки должен быть немного другой, то просто надо либо поправить цикл (не с 1 начать, а к примеру с 10 и будут буквы), либо просто сформировать ещё одну строку символов.
Я думаю, это просто опечатка в вопросе, потому что при данных исходных условиях первая генерируемая строка будет не AAAAAAAA, а 00000000.
Также надо понимать, что при данных условиях колво строк в мемо будет 2821109907456 (10 цифр и 26 букв в 8 степень). Это порядка 2 в 42 степени и в мемо не влезет:) Даже если в файл писать, получается 25 с половинной терабайт (если я не ошибся в расчетах) или я отстал от жизни и такие винты - норма жизни?
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 6 января 2010, 18:09
Оценка за ответ: 5
Комментарий к оценке: Спасибо огромное за помощь!
С уважением Гена!
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 9 января 2010, 14:41; участников в обсуждении: 4.
6 января 2010, 15:10: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Алгоритмы, преобразования модератором Ерёмин А.А.
|
Жикльор (статус: 5-ый класс), 6 января 2010, 16:17 [#1]:
Цитата (Гена):
вывести все комбинации
чисел используя все английские буквы
А как это можно числа представлять в виде букв? Поподробнее вопрос опишите!
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
Ерёмин А.А. (статус: *Администратор), 6 января 2010, 18:51 [#2]:
Мы тут с ребятами в IRC посчитали - выходит 218 триллионов строк. Думаете Memo такое потянет?
|
|
Гена (статус: Посетитель), 6 января 2010, 19:34 [#3]:
Незнаю, думаю не потянет. Но всё равно спасибо за помощью.
|
|
Гена (статус: Посетитель), 6 января 2010, 19:43 [#4]:
Дополнение к вопросу
ругается на эту строку - for i[1] := 1 to len do и все последующие данного типа.
Текст ошибки - [Error] Unit1.pas(38): For loop control variable must be simple local variable
Не можете подсказать в чём проблема?
|
|
Вадим К (статус: Академик), 6 января 2010, 20:01 [#5]:
Странно, не должен так ругаться. Раньше не ругался. придется видимо писать "неоптимально" - то есть завести переменные вида
i1, i2, i3, i4 .... i8 :integer; ну и так далее по накатанной. и понятно внутренний цикл придется развернуть.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Гена (статус: Посетитель), 9 января 2010, 14:41 [#6]:
Полностью код не могли бы написать?Я так и эдак пробую не вышло пока...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|