一个数组,要求从可以从任何一个值开始,把这个值跟它后面的数组值放到数组的开始。形成循环
。如:
   array1[0]:='0';
   array1[1]:='1';
   array1[2]:='2';
   array1[3]:='3';
   array1[4]:='4';
   array1[5]:='5';
   array1[6]:='6';假设我要把数组中的值为‘2’向前移动到数组开头。数组结果应该是:'2','3','4','5','6','0','1'
.
如何把以上情况归纳并写成代码?

解决方案 »

  1.   

    var
    temp:string;
    y,x:integer;
    array1:array[1..6]of string;begin
      array1[0]:='0';
      array1[1]:='1';
      array1[2]:='2';
      array1[3]:='3';
      array1[4]:='4';
      array1[5]:='5';
      array1[6]:='6';
    for y:=0 to 2 do
      temp:=array1[0];
      for x:=0 to 6 do
        array1[x]:=array1[x+1]
      array1[6]=temp;//没有试过,不知行不行...
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      temp:string;
      y,x:integer;
      array1:array[0..6]of string;
    begin
      array1[0]:='0';
      array1[1]:='1';
      array1[2]:='2';
      array1[3]:='3';
      array1[4]:='4';
      array1[5]:='5';
      array1[6]:='6';
    for y:=1 to 2 do
      begin
        temp:=array1[0];
        for x:=0 to 6 do
          array1[x]:=array1[x+1];
        array1[6]:=temp;
      end;
    label1.caption:=array1[0];
    label2.caption:=array1[1];
    label3.caption:=array1[2];
    label4.caption:=array1[3];
    label5.caption:=array1[4];
    label6.caption:=array1[5];
    label7.caption:=array1[6];
    end;~~~~~~~~~~~~~~~~~~~~~~~结果是:
    2,3,4,5,6,0,1
      

  3.   

    移动数组的值
    一般的办法:var s1,s2:array[0..4] of integer;
        i:integer;
    begin
      s1[0]:=1;
      s1[1]:=2;
      s1[2]:=3;
      s1[3]:=4;
      s1[4]:=5;  s2[0]:=6;
      s2[1]:=7;
      s2[2]:=8;
      s2[3]:=9;
      s2[4]:=0;
      for a:=0 to 4 do s1[a]:=s2[a];
    end;用movemeory的办法:var s1,s2:array[0..4] of integer;
        i:integer;
    begin
      s1[0]:=1;
      s1[1]:=2;
      s1[2]:=3;
      s1[3]:=4;
      s1[4]:=5;  s2[0]:=6;
      s2[1]:=7;
      s2[2]:=8;
      s2[3]:=9;
      s2[4]:=0;
      for i:=0 to 4 do showmessage('s1的'+inttostr(i)+':'+inttostr(s1[i]));
      showmessage('movemeory1!');
      windows.MoveMemory(@s1,@s2,sizeof(s1));  for i:=0 to 4 do showmessage('s1的'+inttostr(i)+':'+inttostr(s1[i]));
      

  4.   

    我的想法是:
    先弄一个临时变量,然后逐个前移,可以用循环实现,循环次数就是要移到array1[0]的值(比如这里是'2'),当然只针对楼主的例子有效
    上班中,不写代码了(偷笑,呵呵)
      

  5.   

    还是写了吧,又不难
    循环里这样写
    tmpstr:=array1[0];
    array1[i]:=array1[i+1];
    array[6]:=tmpstr;
      

  6.   

    CONST  S:ARRAY [0..6] OF string=('0','1','2','3','4','5','6');procedure sort(value:string);
    VAR
      I,j:INTEGER;
      TEMP:INTEGER;
      Splitpos:integer;
      uplen,downlen:integer;
      Dest:array [0..6] of string;
      FUNCTION POSTION(CONST value:string):iNTEGER;
      BEGIN
        FOR Result:=LOW(S) TO HIGH(S) DO
          if s[Result]=value then Exit;
        Result:=-1;
      END;begin
      uplen:=Postion(value)+1;
      if uplen=0 then Exit;
      Downlen:=length(s)-uplen;  for i:=0 to  downlen do
        dest[i]:=S[uplen+i-1];  for i:=downlen+1 to length(dest)-1 do
        dest[i]:=s[i-downlen-1];  for i:=0 to High(dest) do
        Outputdebugstring(pchar(dest[i]));
    end;
      

  7.   

    非常感谢大家的关注,根据大家的指点,我自己写的如下,请大家指点:
    //参数:ArrVal:就是某个在数组中的值。arrray1:数组
    //返回:-1:数组中没有这个值,1:有。
    function GetArrayByVal(ArrVal:string;Var array1:array of string):integer;
    Var
      temp:string;
      i,y,x:Integer;
      StartPos:integer;
    begin
      Result:=-1;
      StartPos:=0;
      //假设没有重复值,找到值的位置
      for i:=Low(array1) to High(array1) do
      begin
        if array1[i]=ArrVal then
        begin
          StartPos:=i;
          Result:=1;
          Break;
        end;
      end;  if Result=-1 then
      begin
        exit;
      end;
      
      for y:=1 to StartPos do
      begin
        Temp:=array1[0];
        For X:=Low(array1) to High(array1) do
        begin
          array1[x]:=array1[X+1];
        end;
        array1[High(array1)]:=temp;
      end;
    end;根据我的例子的要求:
    arrVal:='2'
    GetArrayByVal(arrVal,array1);
    得到的就是我想要的。然后还可以随便改arrVal,array1的值。这个通用性也是我想要的
    谢谢大家
    谢谢大家。
    新年前一天解决一个问题,太爽了,明年我要发财了!大家也发财!
    Happy New Year!
    Happy New Year!