Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2012, 13:28   #1
vlad.md
Пользователь
 
Аватар для vlad.md
 
Регистрация: 27.05.2010
Сообщений: 50
Вопрос Последовательная генерация строк(с началом из определённой точки)

Доброго времени суток, дорогие коллеги!
И сразу от слов к делу:
У меня есть код который последовательно генерирует строку:

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
     line = 'qwertyuioplkjhgfdsazxcvbnm0123456789';

procedure generate(S: string; n: integer);
var
 i: integer;
begin
 for i := 1 to Length(line) do
   begin
    s[n] := line[i];
    if n = 1 then
     writeln(s)
    else
     generate(s, n - 1);
  end;
end;

begin
  generate('qwer', Length('qwer'));
end.
Строки генерируются последовательно(как мне и надо), но вот мне понадобилось сделать так, чтобы можно было продолжить с определённого места(строки).Какие будут предложения?
Заранее благодарен!
vlad.md вне форума Ответить с цитированием
Старый 10.12.2012, 11:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
procedure generate(S: string; n: integer);
запомнить строку S и шаг итерации n.
при следующем запуске вызвать процедуру generate,
передав в процедуру запомненные значения.
всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.12.2012, 11:38   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,342
По умолчанию

Serge_Bliznykov, не соглашусь. Программа рекурсивно спускается и редактирует строчку. Самым простым способом будет запомнить стек вызовов, но я не знаю, как это сделать.

Нужно модифицировать саму процедуру, т.к. нужно «достроить» конец строки.

Приду домой - подумаю еще.

Код:
program Project1;
{$APPTYPE CONSOLE}

uses
  SysUtils, windows;

const
  line = 'qwertyuioplkjhgfdsazxcvbnm0123456789';

var
  start: string;

function KeyPressed: Boolean;
var
  lpNumberOfEvents: DWORD;
  lpBuffer: TInputRecord;
  lpNumberOfEventsRead: DWORD;
  nStdHandle: THandle;
begin
  Result := false;
  // get the console handle 
  nStdHandle := GetStdHandle(STD_INPUT_HANDLE);
  lpNumberOfEvents := 0;
  // get the number of events 
  GetNumberOfConsoleInputEvents(nStdHandle, lpNumberOfEvents);
  if lpNumberOfEvents <> 0 then
  begin
    // retrieve the event 
    PeekConsoleInput(nStdHandle, lpBuffer, 1, lpNumberOfEventsRead);
    if lpNumberOfEventsRead <> 0 then
    begin
      if lpBuffer.EventType = KEY_EVENT then // is a Keyboard event? 
      begin
        if lpBuffer.Event.KeyEvent.bKeyDown then // the key was pressed? 
          Result := true
        else
          FlushConsoleInputBuffer(nStdHandle); // flush the buffer 
      end
      else
        FlushConsoleInputBuffer(nStdHandle); // flush the buffer 
    end;
  end;
end;

procedure generate(S: string; n: integer; var start: string);
var
  i, k: integer;
begin
  if KeyPressed then
    exit;
  k := pos(start[n], line);
  if k < 1 then
    k := 1;
  for i := k to Length(line) do
  begin
    S[n] := line[i];
    start[n] := '*';
    if n = 1 then
      writeln(S)
    else
      generate(S, n - 1, start);
  end;
end;

begin
  start := '12321';
  generate('*****', Length('*****'), start);
  readln;
end.
В строке start задается последний сгенерированный пароль, либо символы * ("пустые" символы).
Вроде работает
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 10.12.2012 в 18:22.
BDA вне форума Ответить с цитированием
Старый 11.12.2012, 18:09   #4
vlad.md
Пользователь
 
Аватар для vlad.md
 
Регистрация: 27.05.2010
Сообщений: 50
По умолчанию

BDA, спасибо большое!)
P.S. тему можно закрывать.
vlad.md вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько вопросов перед началом пути lavka Помощь студентам 3 11.10.2012 10:09
Удаление всех строк из RichEdit, начиная с определённой строки ondar Компоненты Delphi 5 07.06.2011 06:48
слова с одинаковым началом и концом shelest Помощь студентам 2 28.02.2010 15:07
отсчёт с определённой точки. blackstersl Общие вопросы Delphi 11 16.08.2009 11:02
Много компонентов с общим началом delphin100 Общие вопросы Delphi 6 26.03.2009 15:52