Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
8th
Янв
Последовательная генерация строк начиная с определённой точки
Posted by Chas under Delphi
Вот мне понадобилось сделать так, чтобы можно было продолжить с определённого места(строки).Какие будут предложения?
BDA
Программа рекурсивно спускается и редактирует строчку. Самым простым способом будет запомнить стек вызовов, но я не знаю, как это сделать.
Нужно модифицировать саму процедуру, т.к. нужно «достроить» конец строки.
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.[/code]
В строке start задается последний сгенерированный пароль, либо символы * ("пустые" символы).
Вроде работает
тема на форуме
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)