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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2011, 14:24   #11
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

Цитата:
Сообщение от astecenko
То есть есть строка с каким-от набором символов, и надо получить все возможные 4-ех символьные варианты с символами из исходной строки?
понял. жди...
у тебя ведь так и сделано)

сразу же еще сюда вопрос кину,чтобы не флудить темы. насчет потоков
создаю поток-
юнит самого потока(это из другого проекта)
Код:
unit Unit11;

interface

uses
  Classes,windows;

type
  refresh = class(TThread)
  private
    procedure newrefresh;
    procedure addnewip;
    procedure error;
  protected
    procedure Execute; override;
  end;

implementation
uses unit2,unit7;
{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure refresh.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ refresh }

procedure refresh.newrefresh;
begin
list.IdMessage1.Clear;
list.listbox1.Clear;
end;

procedure refresh.addnewip;
begin
list.listbox1.Items.add('IP: '+list.DecodeStr(list.IdMessage1.Subject));
//чета еще
end;

procedure refresh.error;
begin
list.Visible:=true;
list.Show;
list.Button2.Click;
list.button1.Visible:=true;
end;

procedure refresh.Execute;
var me,ii:integer;
begin
repeat
Synchronize(newrefresh);
Try
if not list.IdPOP31.Connected then list.IdPOP31.Connect();
me:=list.IdPOP31.CheckMessages;
for ii:=1 to me do
  begin
    list.IdPOP31.Retrieve(ii,list.IdMessage1);
      if list.DecodeStr(list.IdMessage1.Subject)='d' then {iiiiiyou = ia <>, iiiaiyou ia unit2.ip} Synchronize(addnewip);
  end;
list.IdPOP31.Disconnect;
Except
Synchronize(error);
end;
sleep(unit2.refr*1000);
if terminated then exit;
until true;
end;

end.
и юнит,откуда я его запускаю
Код:
unit Unit7;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdPOP3, StdCtrls, ExtCtrls, IdMessage, IdCoder,
  IdCoder3to4, IdCoderMIME, CheckLst,unit11;

type
  TList = class(TForm)
    IdPOP31: TIdPOP3;
    IdMessage1: TIdMessage;
    IdDecoderMIME1: TIdDecoderMIME;
    Listbox1: TCheckListBox;
    Button1: TButton;
    Timer1: TTimer;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

  private
    re:refresh;
  public
    function DecodeStr(Text: string): string;
  end;


var
  List: TList;

  stat:integer;



implementation
uses unit2;

{вырезано}

procedure TList.Timer1Timer(Sender: TObject);
begin
re:=REfresh.Create(false);
re.Priority:=tpLower;
timer1.Enabled:=false;
end;
и ошибка на строке re:=REfresh.Create(false); [Error] Unit7.pas(281): Record, object or class type required

в книги которую читал по теме сделано также..

Цитата:
Практическое применение небось: знаешь какие символы (клавиши) входят в пароль и знаешь сколько раз их клацали но не знаешь пароля. Словарик для перебора делаешь?
почти что так)

Последний раз редактировалось Stilet; 19.08.2011 в 20:54.
spydark91 вне форума Ответить с цитированием
Старый 18.08.2011, 14:52   #12
DenNik2006
Пользователь
 
Аватар для DenNik2006
 
Регистрация: 27.07.2011
Сообщений: 71
По умолчанию

вообще-то имена классов принято предварять буквой Т (TRefresh).
а вдруг уже есть функция или переменная с именем refresh? попробуй изменить имя потока
Техника несовершенна: компьютеру, чтобы прийти в себя, нужно три пальца, человеку - всего два!
DenNik2006 вне форума Ответить с цитированием
Старый 18.08.2011, 14:58   #13
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

да,с "T" все работает,спасибо)

делаю так
Код:
var s:string;
a,b,c,d: byte;
arr: array [1..4] of Char;
begin
s:='abc';
for a:= Ord(s[1]) to Ord(s[length(s)]) do
for b:= Ord(s[1]) to Ord(s[length(s)]) do
begin
arr[1]:= Chr(a);
arr[2]:= Chr(b);
Memo1.Lines.Append(arr);
end;
и в мемо получаю

aaw2
abw2
acw2
baw2
bbw2
bcw2
caw2
cbw2
ccw2

разобрался)

а как сделать,если я заранее не знаю из скольки символов должна состоять эта строка?
навпример не из 4 а из 10
тут чтоли просто ифов понадобафлять?
Код:
for a:= Ord('а') to Ord('я') do
  for b:= Ord('а') to Ord('я') do
  for c:= Ord('а') to Ord('я') do
  for d:= Ord('а') to Ord('я') do

Последний раз редактировалось Stilet; 19.08.2011 в 20:56.
spydark91 вне форума Ответить с цитированием
Старый 19.08.2011, 11:34   #14
DenNik2006
Пользователь
 
Аватар для DenNik2006
 
Регистрация: 27.07.2011
Сообщений: 71
По умолчанию

Цитата:
Сообщение от spydark91 Посмотреть сообщение
а как сделать,если я заранее не знаю из скольки символов должна состоять эта строка?
навпример не из 4 а из 10
тут чтоли просто ифов понадобафлять?
Код:
for a:= Ord('а') to Ord('я') do
  for b:= Ord('а') to Ord('я') do
  for c:= Ord('а') to Ord('я') do
  for d:= Ord('а') to Ord('я') do
из 10 и не пытайся. я вот опыт проводил: берем 32 символа русского алфавита, строка из пяти символов. Пребирал все возможные варианты и писал в файл - размер 224 МБ. Рассчитывал для строки из 6 символов, получилось 8 ГБ!. Можешь сам рассчитать:

например для строки из 7 символов
каждая позиция строки может принимать 32 символа, значит
32^7 = 34 359 738 368 варианта. Каждое слово занимает 7 байт минимум, следовательно 34359738368 * 7 = 240518168576 байт = 224 ГБ.

а если символов не 32, а больше. в Пентагоне, и то наверное долго бы перебирали
(перебор строк из 5 символов занял примерно 2 минуты - это с учетом того что я не отображал прогресс выполнения цикла, а если делать с прогрессом, который будет отображаться при каждом найденном варианте, то работа цикла СИЛЬНО замедлится)

вот, для устрашения

все 10-символьные комбинации из 32 символов займут 10 485 760 ГБ!
Техника несовершенна: компьютеру, чтобы прийти в себя, нужно три пальца, человеку - всего два!

Последний раз редактировалось Stilet; 19.08.2011 в 21:03.
DenNik2006 вне форума Ответить с цитированием
Старый 19.08.2011, 11:54   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ничто не ново под луной...

смотрите темы:

Перебор всех доступных значений!

Комбинаторика - нахождение всех возможных комбинаций
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.08.2011, 12:04   #16
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от DenNik2006 Посмотреть сообщение
вот, для устрашения

все 10-символьные комбинации из 32 символов займут 10 485 760 ГБ!
Я пересчитал, у меня получилось 1 048 576 ГБ (=32^10/1024/1024/1024)
учитывая что на 1 симв - 1 байт

Но зачем это где-то хранить, если это можно получить Run-time?
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 19.08.2011 в 12:09.
chertovich вне форума Ответить с цитированием
Старый 19.08.2011, 12:10   #17
DenNik2006
Пользователь
 
Аватар для DenNik2006
 
Регистрация: 27.07.2011
Сообщений: 71
По умолчанию

Цитата:
Сообщение от chertovich Посмотреть сообщение
Я пересчитал, у меня получилось 1 048 576 ГБ (=32^10/1024/1024/1024)
учитывая что на 1 симв - 1 байт
но слова-то по 10 символов значит 1 048 576 * 10.

32^10 = 1 125 899 906 842 624 вариантов.
каждый вариант = 10 байт, значит
всего 11 258 999 068 426 240 байт, дальше сам

(в любом случае - у тебя что, винт на столько гиг есть или ОЗУ ?
Техника несовершенна: компьютеру, чтобы прийти в себя, нужно три пальца, человеку - всего два!
DenNik2006 вне форума Ответить с цитированием
Старый 19.08.2011, 12:12   #18
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Сорри, да, надо было на 10 умножать а не на 1)
Но не в этом суть, зачем это где-то хранить, если можно получить Run-time?
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 19.08.2011, 12:15   #19
DenNik2006
Пользователь
 
Аватар для DenNik2006
 
Регистрация: 27.07.2011
Сообщений: 71
Счастье

Цитата:
Сообщение от chertovich Посмотреть сообщение
Сорри, да, надо было на 10 умножать а не на 1)
Но не в этом суть, зачем это где-то хранить, если можно получить Run-time?
знал, что будет этот вопрос! а ты подумал, сколько времени будет идти перебор? недели? месяцы? а может больше??
Техника несовершенна: компьютеру, чтобы прийти в себя, нужно три пальца, человеку - всего два!
DenNik2006 вне форума Ответить с цитированием
Старый 19.08.2011, 12:17   #20
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

А можно сформулировать цель данного перебора, тогда можно и придумать, как это реализовать
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подстановка Cookies Fizerator Работа с сетью в Delphi 0 21.05.2011 19:13
Подстановка формул metotron Microsoft Office Excel 2 24.11.2010 18:58
Подсчитать количество букв "А" в предложении и общее количество букв.В тексте из файла несколько строк. kvas91 Общие вопросы C/C++ 3 14.11.2010 16:51
Подстановка Ael Microsoft Office Access 3 04.11.2010 19:17
Сравнение и подстановка tsasha1 Microsoft Office Excel 2 08.04.2008 14:47