Формулировка: Построить все последовательности длины n из 0 и 1 такие, чтобы в последовательности не было 2(или больше) подряд идущих единиц. Причем сделать это надо путем написания рекурсивной функции.
Я вообщем написал эту, мать ее, рекурсивную функцию перевода числа(одного) из десятичной системы счислен. в двоичную, а вот как дальше, как сделать чтобы она переводила массив чисел, и организовать отбор я понятия не имею. Помогите пожалуйста если кому не в лом!!! Ато я попал.
16 июля 2008 в 1:01
это?
//+ USE Math;
//сама рекурсивная проверка рядом стоящих единиц
//в рекурсию передаем значение без последнего бита
function Recurse(n:Integer):integer;
begin
if ((n or 3)=n) and (n>0)then Result:=1
else
if (n>0) Then Result:=Recurse(n div 2)
else
Result:=0;
end;
//Переводим число в двоичное представление
//:) между прочим тоже рекурсивно
function Int2BitStr(i:Integer):String;
begin
if (i>0) then
if ((i or 1)=i) then
Result:=Int2BitStr(i div 2)+'1'
else
Result:=Int2BitStr(i div 2)+'0'
else
Result:='';
end;
//Ну и реакция по кнопке….
//забираем из одного поля максимальную длину последовательности
//В другое поле записываем результат….
//Если нужна последовательность только указанной длины – тогда
//очень просто можно добавить необходимое количество нулей перед
//полученной последовательностью
procedure TForm1.Button1Click(Sender: TObject);
var
max:integer;
i:Integer;
b:Extended;
begin
memo1.Lines.Clear;
b:=2;
max:=Floor(IntPower(b, StrToInt(Edit1.Text)))-1;
for i:=0 to max do
if Recurse(i)=0 then Memo1.Lines.Add(Int2BitStr(i));
end;
15 июля 2008 в 23:03
лол
15 июля 2008 в 21:05
да как ленин говорил, чем мы собственно и занимаемся)) а за помощь спасибо огромное!
15 июля 2008 в 21:03
да хз мы ее вдвоем с напарником писали, для первого курса главное работает)
15 июля 2008 в 21:03
учицца вам еще и учицца… =)
15 июля 2008 в 21:02
Вопросы:
1. нафик ты объявляешь нечто под названием "opa" если не используешь его?
2. ты сам то понял что написал? =)особенно интересным и не вполне адекватным выглядит код:
>if n = 0 then
> result:='0'
>else
> result:='1';
>if n = 0 then
> result:=''
>else
>…
в чем смысл первого "if"? следующим if-ом ты его действия перетираешь.
15 июля 2008 в 21:01
functionPerevod(n : integer) : string;
const
opa : array [0..35] of char = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var
apap : integer;
begin
if n = 0 then
result := '0'
else
result := '';
if n=0 then result:=''
else
begin
apap:=n mod 2;
result:= perevod(n div 2)+inttostr(apap);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Perevod(5));
end;
end.
тока там по моему мы лишка нагнали
15 июля 2008 в 21:00
а нафик тебе переводить числа из десятичной в двоичную???
тебе поставлена задача построить все последовательности 0 и 1, так чтобы не было 2-х едениц подряд.
procedure BuildSequence(Sequence:string;Size:byte);
begin
—if length(Sequence) = 0 then
—begin
——BuildSequence('0',Size);
——BuildSequence('1',Size);
——exit;
—end;
—if length(Sequence) = Size then
—begin
——WriteLn(Sequence);
——exit;
—end;
—BuildSequence(Sequence+'0',Size);
—if Sequence[length(Sequence)]='0' then BuildSequence(Sequence+'1',Size);
end;
15 июля 2008 в 21:00
а кстати, как ты написал рекурсивный перевод числа из одной системы в другую? код приведи.