ArrayArrayArrayArrayArray
CODE: CODE: Statistics: Posted by drakh — 13 Jan 2015, 16:15 Statistics: Posted by sephult — 12 Jan 2015, 13:59
lazarus codeprogram test;var pattern:array of integer;var counts:array of integer;var remainders:array of integer;var c:integer;procedure build(l:integer);var i:integer;begin if((l>-1))then begin for i:=0 to (counts[l]-1) do begin build(l-1); end; if(remainders[l]<>0) then begin build(l-2); end; end else if (l=-1)then begin pattern[c]:=0; c:=c+1; end else if (l=-2) then begin pattern[c]:=1; c:=c+1; end;end;procedure bjorklund(steps:integer;pulses:integer);var level:integer;var st:boolean;var divisor:integer;var i:integer;begin divisor:=steps-pulses; level:=0; st:=true; SetLength(pattern,steps); SetLength(remainders,level+1); remainders[level]:=pulses; while(st=true) do begin SetLength(counts,level+1);//in usine this should be SetArrayLength counts[level]:= divisor div remainders[level]; SetLength(remainders,level+2); remainders[level+1]:=divisor mod remainders[level]; divisor:=remainders[level]; level:=level+1; if(remainders[level]<=1) then begin st:=false; end; end; SetLength(counts,level+1); counts[level]:=divisor; c:=0; build(level); for i:=0 to steps-1 do begin write(pattern[(steps-1)-i]); end;end;beginbjorklund(5,5);readln;//you should removend.//////////////////////////// /////////////////////////// parameters declarationvar o_arr:tParameter;var i_steps:tParameter; var i_pulses:tParameter; var counts: array of integer; var pattern: array of integer; var remainders: array of integer;var c:integer;var steps:integer;var pulses:integer;var has_changed:boolean; procedure get_steps;begin steps:=round(GetValue(i_steps)); has_changed:=true;end; procedure get_pulses;begin pulses:=round(GetValue(i_pulses)); has_changed:=true; end;procedure build(l:integer);var i:integer;begin if((l>-1))then begin for i:=0 to (counts[l]-1) do begin build(l-1); end; if(remainders[l]<>0) then begin build(l-2); end; end else if (l=-1)then begin pattern[c]:=0; c:=c+1; end else if (l=-2) then begin pattern[c]:=1; c:=c+1; end;end; procedure bjorklund(s:integer;p:integer);var level:integer;var st:boolean;var divisor:integer;var i:integer;begin divisor:=s-p; level:=0; st:=true; SetArrayLength(remainders,level+1); remainders[level]:=p; while(st=true) do begin SetArrayLength(counts,level+1); counts[level]:= divisor div remainders[level]; SetArrayLength(remainders,level+2); remainders[level+1]:=divisor mod remainders[level]; divisor:=remainders[level]; level:=level+1; if(remainders[level]<=1) then begin st:=false; end; end; SetArrayLength(counts,level+1); counts[level]:=divisor; c:=0; build(level); end; // initialisation : create parametersprocedure init;begin o_arr := CreateParam('cells out', ptArray); SetIsInput(o_arr,false); i_steps:=CreateParam('steps', ptDataField); SetIsOutPut(i_steps,false); i_pulses:=CreateParam('pulses', ptDataField); SetIsOutPut(i_pulses,false); get_steps(); get_pulses();end; // Callback procedureProcedure Callback(n:integer); begin CASE n OF i_steps:get_steps(); i_pulses:get_pulses(); END;end; //////////////////////////////// main proc //////////////////////////////Procedure Process; var arr_l:integer;var i:integer;begin arr_l:=0; if(has_changed=true) then begin SetArrayLength(pattern,steps); get_steps(); get_pulses(); bjorklund(steps,pulses); for i:=0 to steps-1 do begin SetDataArrayValue(o_arr,i,pattern[(steps-1)-i]); //SetDataArrayValue(o_arr,i,1); end; arr_l:=steps; has_changed:=false; end; SetLength(o_arr,arr_l);end;
]]>
-S
]]>
Statistics: Posted by drakh — 12 Jan 2015, 10:00
CODE:
program test;var pattern:array of integer;var counts:array of integer;var remainders:array of integer;var c:integer;procedure build(l:integer);var i:integer;begin if((l>-1))then begin for i:=0 to (counts[l]-1) do begin build(l-1); end; if(remainders[l]<>0) then begin build(l-2); end; end else if (l=-1)then begin pattern[c]:=0; c:=c+1; end else if (l=-2) then begin pattern[c]:=1; c:=c+1; end;end;procedure bjorklund(steps:integer;pulses:integer);var level:integer;var st:boolean;var divisor:integer;var i:integer;begin divisor:=steps-pulses; level:=0; st:=true; SetLength(pattern,steps); SetLength(remainders,level+1); remainders[level]:=pulses; while(st=true) do begin SetLength(counts,level+1);//in usine this should be SetArrayLength counts[level]:= divisor div remainders[level]; SetLength(remainders,level+2); remainders[level+1]:=divisor mod remainders[level]; divisor:=remainders[level]; level:=level+1; if(remainders[level]<=1) then begin st:=false; end; end; SetLength(counts,level+1); counts[level]:=divisor; c:=0; build(level); for i:=0 to steps-1 do begin write(pattern[(steps-1)-i]); end;end;beginbjorklund(5,5);readln;//you should removend.CODE:
//////////////////////////// /////////////////////////// parameters declarationvar o_arr:tParameter;var i_steps:tParameter; var i_pulses:tParameter; var counts: array of integer; var pattern: array of integer; var remainders: array of integer;var c:integer;var steps:integer;var pulses:integer;var has_changed:boolean; procedure get_steps;begin steps:=round(GetValue(i_steps)); has_changed:=true;end; procedure get_pulses;begin pulses:=round(GetValue(i_pulses)); has_changed:=true; end;procedure build(l:integer);var i:integer;begin if((l>-1))then begin for i:=0 to (counts[l]-1) do begin build(l-1); end; if(remainders[l]<>0) then begin build(l-2); end; end else if (l=-1)then begin pattern[c]:=0; c:=c+1; end else if (l=-2) then begin pattern[c]:=1; c:=c+1; end;end; procedure bjorklund(s:integer;p:integer);var level:integer;var st:boolean;var divisor:integer;var i:integer;begin divisor:=s-p; level:=0; st:=true; SetArrayLength(remainders,level+1); remainders[level]:=p; while(st=true) do begin SetArrayLength(counts,level+1); counts[level]:= divisor div remainders[level]; SetArrayLength(remainders,level+2); remainders[level+1]:=divisor mod remainders[level]; divisor:=remainders[level]; level:=level+1; if(remainders[level]<=1) then begin st:=false; end; end; SetArrayLength(counts,level+1); counts[level]:=divisor; c:=0; build(level); end; // initialisation : create parametersprocedure init;begin o_arr := CreateParam('cells out', ptArray); SetIsInput(o_arr,false); i_steps:=CreateParam('steps', ptDataField); SetIsOutPut(i_steps,false); i_pulses:=CreateParam('pulses', ptDataField); SetIsOutPut(i_pulses,false); get_steps(); get_pulses();end; // Callback procedureProcedure Callback(n:integer); begin CASE n OF i_steps:get_steps(); i_pulses:get_pulses(); END;end; //////////////////////////////// main proc //////////////////////////////Procedure Process; var arr_l:integer;var i:integer;begin arr_l:=0; if(has_changed=true) then begin SetArrayLength(pattern,steps); get_steps(); get_pulses(); bjorklund(steps,pulses); for i:=0 to steps-1 do begin SetDataArrayValue(o_arr,i,pattern[(steps-1)-i]); //SetDataArrayValue(o_arr,i,1); end; arr_l:=steps; has_changed:=false; end; SetLength(o_arr,arr_l);end;Statistics: Posted by drakh — 13 Jan 2015, 16:15
Statistics: Posted by sephult — 12 Jan 2015, 13:59
Statistics: Posted by drakh — 12 Jan 2015, 10:00