| 
| 
 | Вопрос # 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]:Полностью код не могли бы написать?Я так и эдак пробую не вышло пока... |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |