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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2009, 08:19   #11
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Время выполнения программы в значительной степени зависит не от временени вычисления, а от времени вывода. Вывод очень долго делается.
Я как-то делал несколько задач на разные варианты на тему "счастливых билетов". При количестве цифр до 6 разница во времени вычислений между рекурсивным и нерекурсивным вариантами незначительна, а при 20 цифрах(максимально) уже существенна. Но скорость вывода не победил.
А программу на генерацию размещений символов я хорошо помню глазами, там перебирались цифры и малые латинские буквы при n=10; Кто писал, не помню, давно было.
puporev вне форума Ответить с цитированием
Старый 05.08.2009, 12:32   #12
TAVulator
Программист
Форумчанин
 
Аватар для TAVulator
 
Регистрация: 23.07.2009
Сообщений: 101
По умолчанию

вот еще пример на Free Pascal:
Код:
var
f:text;
a,b,j:integer;
str,alf:string;
procedure add(s: string; n: integer);
var i:integer;
begin
  for i :=1 to length(alf) do
  begin
    s[n] := alf[i];
    if n = length(s) then writeln(f,s) else add(s, n + 1);
  end;
end;
begin
  assign(f,'c:\dict.txt');
  rewrite(f);
  str:='';
  alf:='0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM-_=+)([]{}<>,./?!@#$%^&*`~;:';
  a:=3;
  b:=3;
  for j:=1 to a-1 do
  str:=str+' ';
  for j:=a to b do
  begin
    str:=str+' ';
    add(str,1);
  end;
  close(f);
end.
он пишет сразу в файл, так что работает и на больших значениях, все зависит только от размера жесткого диска :-)
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях.

______________________________(С) Г.Форд
TAVulator вне форума Ответить с цитированием
Старый 05.08.2009, 14:51   #13
AquaKlaster
Delphi,Python,PHP
Форумчанин
 
Аватар для AquaKlaster
 
Регистрация: 04.04.2009
Сообщений: 138
По умолчанию

спс всем за ответы тему можно закрыть!
AquaKlaster вне форума Ответить с цитированием
Старый 05.08.2009, 15:31   #14
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
вот еще пример на Free Pascal:
Это и в Турбо Паскале работает. Правда файл даже при трех символах секунд 15 писало. Может у меня комп хреновый.
puporev вне форума Ответить с цитированием
Старый 06.08.2009, 00:14   #15
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Я имел ввиду что в той программе к-рую я упоминал (там немного другое условие было) рекурсией не получалось сделать, там по условию на каждый разряд был свой "алфавит". Хотя может и для такой задачи рекурсия подходит, давно это было, и знаний у меня тогда поменьше было. А задача такая: представьте кодовый замок, разрядность (кол-во "барашков" в замке) задается пользователем, набор символов для каждого разряда свой (может быть разной длины) и тоже задается пользователем. Задача - перебрать все варианты.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 06.08.2009, 00:59   #16
TAVulator
Программист
Форумчанин
 
Аватар для TAVulator
 
Регистрация: 23.07.2009
Сообщений: 101
По умолчанию

Цитата:
А задача такая: представьте кодовый замок, разрядность (кол-во "барашков" в замке) задается пользователем, набор символов для каждого разряда свой (может быть разной длины) и тоже задается пользователем. Задача - перебрать все варианты.
ну что ж - и для такого есть решение.
Немного переделал свой вариант под вашу задачу:
Код:
var
f:text;
a,b,j:integer;
str:string;
const
 alf: array[1..3] of string = ('123','asdfg','789');{тут алфавиты для каждого "барашка"}
procedure add(s: string; n: integer);
var i:integer;
begin
  for i :=1 to length(alf[n]) do
  begin
    s[n] := alf[n][i];
    if n = length(s) then writeln(f,s) else add(s, n + 1);
  end;
end;
begin
  assign(f,'c:\dict.txt');
  rewrite(f);
  str:='';
  {alf:='0123456789';}
  a:=3;
  b:=3;
  for j:=1 to a-1 do
  str:=str+' ';
  for j:=a to b do
  begin
    str:=str+' ';
    add(str,1);
  end;
  close(f);
end.
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях.

______________________________(С) Г.Форд
TAVulator вне форума Ответить с цитированием
Старый 16.09.2011, 02:42   #17
petrovich4734
Пользователь
 
Регистрация: 29.03.2011
Сообщений: 11
По умолчанию

Уважаемые помогите пожалуйста старому человеку.
Представленная здесь пограмка хорошая.
Я наподобие писал,но у меня никак не получается подставлять
к перебору постоянное нужное мне значение.
Например:
i 00 0006 это скажем нужное значение которое должно
подставляться к каждому перебираемому значению.
Более конкретно:
i 00 0006 000
i 00 0006 001
i 00 0006 002 и.т.д
Пожалуйста если вас сильно не затруднит
подскажите как дописать представленную здесь програмку.
Буду очень благодарен.
С Уважением Николай(petrovich4734)
petrovich4734 вне форума Ответить с цитированием
Старый 16.09.2011, 07:53   #18
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
if n = length(s) then writeln(f,'i 00 0006'+s) else add(s, n + 1);
puporev вне форума Ответить с цитированием
Старый 16.09.2011, 16:07   #19
petrovich4734
Пользователь
 
Регистрация: 29.03.2011
Сообщений: 11
По умолчанию

большое спасибо

все получилось

Последний раз редактировалось Serge_Bliznykov; 16.09.2011 в 23:44.
petrovich4734 вне форума Ответить с цитированием
Старый 19.09.2011, 20:19   #20
petrovich4734
Пользователь
 
Регистрация: 29.03.2011
Сообщений: 11
По умолчанию

puporev
Уважаемый не выручите еще раз.
вот написал програмку в ней в MaskEdit происходит постоянный перебор.
Написал уже очень давно, но до сих пор не смог прописать так чтобы,
что происходит в MaskEdit происходило бы и в каком нибудь тхт. файле.
Что я только не пробовал.
С Уважением Николай(petrovich4734).

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Mask;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Timer1: TTimer;
    mEdit: TMaskEdit;
    SaveDialog1: TSaveDialog;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
function RandomPassword(PLen: Integer): string;
 var
   str: string;
begin
   Randomize;
   str    := '0123456789ABCDEF';
   Result := 'I 00 0006 ';
   repeat
     Result := Result + str[Random(Length(str)) + 1];
   until (Length(Result) = PLen)
end;

begin
  mEdit.Text := RandomPassword(32)

end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=False;
 end;

end.

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.09.2011 в 11:23.
petrovich4734 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с++ Перебор всех возможных подмножеств множества целых чисел Modlika17 Помощь студентам 19 10.01.2012 11:09
Реализовать перебор всех возможных IP-адресов (С++) ak74m Помощь студентам 0 09.04.2009 13:59
Перебор всех возможных вариантов [MI_nor] Общие вопросы C/C++ 9 01.04.2009 21:17
Найти значение функций для всех целых значений из диапазона -8..3 Goldberg Паскаль, Turbo Pascal, PascalABC.NET 5 13.11.2008 00:05
перебор всех элементов в TtreeView vitalik007 Общие вопросы Delphi 10 09.04.2008 15:44