Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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]:

Полностью код не могли бы написать?Я так и эдак пробую не вышло пока...

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:48
Выполнено за 0.02 сек.