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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2008, 18:40   #1
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
Вопрос Алгоритм перебора (Delphi)

Думал легко, а что-то не выходит.
Нужно построить алгоритм перебора по следующему примеру:

Цитата:
0 1 2 3 .....э ю я
01 02 03 ..... 0э 0ю 0я
11 12 13 ..... 1э 1ю 1я
21 22 23 ..... 2э 2ю 2я
......
я1 я2 я3 ..... яэ яю яя
Другими словами последовательный перебор с добавлением на один символ по окончанию всех символов "chr(48) ... chr(255)"
Вот с чего начал... и на этом застрял


Код:
const
ST = 48;

var
STT:integer = ST;
VP:array[0..42,ST..255] of string;

for i:=1 to 42 do //1
 for j:=STT to 255 do //2
  vp[i,j]:=vp[i-1,j] + chr(j);
Получается что 1, 2(такты 1-го цикла) - как бы правильно, а 3-й(такт) уже нет, алгоритм явно не верный, подскажите, пожалуйста.

Заранее благодарю.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 20.07.2008, 19:18   #2
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию Рекурсия

А если для данной задачи использовать рекурсию, то может удастся сделать перебор. Врорде бы я делал перебор именно рекурсивный и довольно быстрый, если найды выложу исходник.
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 20.07.2008, 19:20   #3
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Посмотри пожалуйста, а я пока помучаюсь в разработке.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 20.07.2008, 19:28   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если первую строчку примера не считать, то получается что-то вроде этого:
Код:
var a:array[1..208,1..208]of string[2];
    i,j:integer;
begin
for i:=1 to 208 do
    begin
      for j:=1 to 208 do
        begin
          a[i,j][1]:=chr(i+47);
          a[i,j][2]:=chr(j+47);
        end;
    end;
Хотя может я и неправ.
puporev вне форума Ответить с цитированием
Старый 20.07.2008, 19:41   #5
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
Const MinPos = 49;
Type TMas = array of string;
var mas : TMas; posinmas : word = 0;i :byte;
function print(startPos, EndPos : byte; Var mas : TMas): boolean;
var
  i : word;
begin
  setlength(mas,posinmas+1);
  for i:= 49 to EndPos do
      mas[posinmas] := mas[posinmas] + chr(startpos)+chr(i)+' ';
  inc(startPos);
  inc(posinmas);
  if startPos < EndPos then
   print(startpos,endpos,mas);
end;

begin
print(49,55,mas);
writeln(posinmas);
readln;
for i := 0 to posinmas-1 do
  writeln(mas[i]);
readln;
end.
Вот сейчас набросал, выдает то, что надо...
p.s А тот алгоритм который был он составлял варианты для переебора и не совсем подходил..
А тут просто вместо 55 написать 255, или указать константу, равную заданному числу.
Все варианты заносятся в строковой массив, хотя можно сделать как угодно...
Страх это слабость и потому, кто испугался уже побежден.

Последний раз редактировалось Mixasik; 20.07.2008 в 19:45. Причина: Не совсем то.. сразу не дочитал задание. Подправил :)
Mixasik вне форума Ответить с цитированием
Старый 20.07.2008, 19:42   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Задание не совсем понятное, в результате должна получиться матрица размером 43 х 43? То есть 10 цифр [0..9] + 33 буквы (а..я)
Цитата:
0 1 2 3 ..... э ю я >>> сюда 43
01 02 03 ..... 0э 0ю 0я
11 12 13 ..... 1э 1ю 1я
21 22 23 ..... 2э 2ю 2я
......
я1 я2 я3 ..... яэ яю яя
\/
и сюда 43
Так или не так?
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 вне форума Ответить с цитированием
Старый 20.07.2008, 19:47   #7
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Вот получается такой вариант, если брать диапозон с 49 по 55:
11 12 13 14 15 16 17
21 22 23 24 25 26 27
31 32 33 34 35 36 37
41 42 43 44 45 46 47
51 52 53 54 55 56 57
61 62 63 64 65 66 67
p.s А если брать диапозон до 255 там будут и строчные, и заглавные, и вроде бы непечатаемые.
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 20.07.2008, 19:58   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Почему-то у меня выводит так:
12 13 14 15 16 17
23 24 25 26 27
34 35 36 37
45 46 47
56 57
67
puporev вне форума Ответить с цитированием
Старый 20.07.2008, 19:59   #9
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

А вот эта строчка
Код:
for i:= 49 to EndPos do
именно начиная с 49? Если нет. то дело в этом... В общем все сейчас подправлю и сделаю код читаемы и верным всмысле осмысления
Страх это слабость и потому, кто испугался уже побежден.

Последний раз редактировалось Mixasik; 20.07.2008 в 20:02.
Mixasik вне форума Ответить с цитированием
Старый 20.07.2008, 20:06   #10
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Код:
Type TMas = array of string;
var mas : TMas; posinmas : word = 0;i :byte;
function print(StartPos{текущая позиция перебора}, EndPos{Конец диапозона} : byte; Var mas : TMas): boolean;
var
  i : word;
begin
  setlength(mas,posinmas+1);
  for i:= 49 to EndPos do
      mas[posinmas] := mas[posinmas] + chr(startpos)+chr(i)+' ';
  inc(startPos);
  inc(posinmas);
  if startPos < EndPos then
   print(startpos,endpos,mas);
end;
Вот проверил еще раз выводи все так. как я написал ранее.
Страх это слабость и потому, кто испугался уже побежден.

Последний раз редактировалось Mixasik; 20.07.2008 в 20:11.
Mixasik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод перебора для нахождения решения "Судоку" ДЖО Помощь студентам 23 04.06.2008 22:29
Алгоритм SunKnight Работа с сетью в Delphi 5 29.04.2008 15:24
Алгоритм "перемешивания" массива в Delphi MusicMan Помощь студентам 4 26.04.2008 21:06
Алгоритм Rifler Паскаль, Turbo Pascal, PascalABC.NET 3 30.03.2008 01:33