Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.03.2008, 15:10
XmX XmX вне форума
Прохожий
 
Регистрация: 02.03.2008
Сообщения: 3
Репутация: 10
По умолчанию Нужна помощь!

Доброго дня!
Кто подскажет как реализовать на Delphi 6.0 (другого компилятора нет)

следующее:

Есть 6 цыфр a b c d e f
Каждая из них от 1 до 90
Нужно перебрать все комбинации и записать в файл(.txt или какой лучше), при

условии что 123456 612345 561234 163245 421635 и т.д. одна и таже комбинация.

Зарание спасибо.
Ответить с цитированием
  #2  
Старый 02.03.2008, 16:17
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Возможно, поможет вот это - программа, которая перебирает все комбинации букв/цифр в строке.
Т.е. если строка 123, то результат будет:
123
132
213
231
312
321

Код:
program Reshuffle;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  StrLen  : Integer;

//------------------------------------------------------------------------------
// Обменять местами символы в строке
//------------------------------------------------------------------------------
procedure Swap(var S: String; l, k: Integer);
var
  C: Char;
begin
  C    := S[l];
  S[l] := S[k];
  S[k] := C;
end;

//------------------------------------------------------------------------------
// Сортировка строки
//------------------------------------------------------------------------------
function  SortString(const S: String): String;
var
  i, j   : Integer;
  NoSwap : Boolean;
begin
  Result := S;
  for i := 1 to StrLen - 1 do begin
    NoSwap := True;
    for j := StrLen downto i do
      if Result[j] <=Result[i] then begin
        Swap(Result, i, j);
        NoSwap := False;
      end;
    if NoSwap then Exit;
  end;
end;

//------------------------------------------------------------------------------
// Получить следующую комбинацию символов
//------------------------------------------------------------------------------
function GetNext(var S: String): Boolean;
var
  i, j: Integer;
begin
  i := pred(StrLen);

  while (i > 0) and (S[i] > S[i + 1]) do
    dec(i);

  if i > 0 then begin
    j := i + 1;
     {поиск j}
    while (j < StrLen) and (S[j + 1] > S[i]) do
      inc(j);

    Swap(S, i, j);

    for j := i + 1 to (StrLen + i) div 2 do
      Swap(S, j, StrLen - j + i + 1);

    Result := True
  end else
    Result := False;
end;

var
  Str     : String;
  Stop    : Boolean;
  iCount  : Integer;
  F       : Text;
begin
  Write('String: ');
  Readln(Str);

  StrLen := Length(Str);
  Str    := SortString(Str);

  iCount := 0;  // Это просто счетчик комбинаций для красоты

  // Имя файла для вывода результатов будет таким же,
  // как у исполняемого, расширение '.txt'
  AssignFile(F, ChangeFileExt(ParamStr(0), '.txt'));
  Rewrite(F);
  repeat
    iCount := iCount + 1;
    Writeln(iCount:10, '. ', Str);
    Writeln(F, iCount:10, '. ', Str);

  	Stop := GetNext(Str);
  until not Stop;
  CloseFile(F);

  Writeln;
  Writeln('Press Enter...');
  Readln;
end.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter