如何动态分配数组?

解决方案 »

  1.   

    var
      dnyarr:array of byte;
      i:integer;setlength(dnyarr,100);//get memoryfor i:=0 to 99 do  dnyarr[i]:=i;setlength(dnyarr,0); //free memory
      

  2.   

    {是不是这个意思?}var
      Arr : array of Char; //这只是声明了一个指针,未在堆内存分配空间procedure TForm1.Button1Click(Sender: TObject);
    begin
      SetLength(Arr, 4); //此时已在堆内存分配四个字节的空间,Arr指向它
      //对数组进行操作....
      SetLength(Arr, 1000);//随时可以改变数组的大小
    end;
      

  3.   

    在Edit1.text输入一个N 计算 1+(1+2)+(1+2+3)....+(1+2+3+..+n)
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i,a,sum,n:integer;
    result:string;
    myarray:array of integer;
     begin
    n:=strtoint(edit1.Text);
    SetLength(myarray,n);
    sum:=0;
    a:=0;
    for i:=1 to n do
      begin
        a:=a+1;
        myarray[i]:= a;
        if i=1 then myarray[i]:=1
        else myarray[i]:=myarray[i-1]+i;
        sum:=sum+myarray[i];
      end; result:=inttostr(sum);
     label1.Caption:=result;end;哪里错了?
      

  4.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
    i,a,sum,n:integer;
    result:string;
    myarray:array of integer;
     begin
    n:=strtoint(edit1.Text);
    SetLength(myarray,n);
    sum:=0;
    a:=0;
    for i:=1 to n do
      begin
        a:=a+1;
        myarray[i]:= a;
        sum:=sum+myarray[i];
      end;
     result:=inttostr(sum);
     label1.Caption:=result;end;
      

  5.   

    修正一下(上例不能计两次数):procedure TForm1.Button1Click(Sender: TObject);
    var
    i,a,sum,n:integer;
    result:string;
    myarray:array of integer;
     begin
    n:=strtoint(edit1.Text);
    SetLength(myarray,n+1);
    sum:=0;
    a:=0;
    for i:=1 to High(myarray) do
      begin
        a:=a+1;
        myarray[i]:= a;
        sum:=sum+myarray[i];
      end;
     result:=inttostr(sum);
     label1.Caption:=result;
     myarray:=nil;
    end;
      

  6.   

    楼主:
    你的意思是不是在EDIT1.TEXT输入10,就得于(1+2+3+4+5+6+7+8+9+10)????
      

  7.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
    i,a,sum,n,v:integer;
    result:string;
    myarray:array of integer;
     begin
    n:=strtoint(edit1.Text);
    SetLength(myarray,n+1);
    sum:=0;
    a:=0;
    for i:=1 to High(myarray) do
      begin
        a:=a+1;
        myarray[i]:= a;
        if i>1 then
        for v :=1  to myarray[i] do
         sum:=sum+v
        else
         sum:=sum+1;
      end;
     result:=inttostr(sum);
     label1.Caption:=result;
     myarray:=nil;
    end;
    {当输入10时,结果等于220,楼主你看主否正确}
    {当输入3时,即:1+(1+2)+(1+2+3)=10}
      

  8.   

    如果以上的算法是正确,岂不是以下方法更为简洁?procedure TForm1.BitBtn2Click(Sender: TObject);
    var
    i,j,sum:integer;
    begin
     sum:=0;
    for i:=1 to strtoint(edit1.Text)+1 do
      begin
        for j :=1  to i-1 do
        sum:=sum+j;
      end;
     label1.Caption:=inttostr(sum);
    end;
      

  9.   

    兄弟,不知道你两个程序有没有跑过,第一个还好,不过也有点小问题 我要算N=10000的时候就算不出来了(我已经把变量类型改过再试的int64)第二个程序根本就跑不了 么   我自己原来那个程序有点小问题,就是FOR循环有点越界了for i:=0 to n-1 其他都好的,已经跑过了,虽然你给的答案不对,但分还是给你了,希望一起切磋,我是初学者,多指教