Зацикливание.Не знаю как исправить(

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by mari00, 21 Feb 2007.

  1. mari00

    mari00 Elder - Старейшина

    Joined:
    27 Oct 2006
    Messages:
    93
    Likes Received:
    40
    Reputations:
    16
    Значит написал программу в консоль апликейшен с "юнитом" в котором и сидит почти вся основная часть.При запуске происходит зацикливание на выводе тоесть он пишет одну и ту же фразу много раз.Как исправить?
    Заранее спасибо.Написано все в делфи.Тестировалось на Делфи 7.
    Code:
    program Project2;    
    {$APPTYPE CONSOLE}    uses    SysUtils,   
     Unit1 in 'Unit1.pas';  
       var    m:matr;    a:mas;    
    i,j,r,k:integer;    
    begin      matrgen(m,r);      
    writeln('generated matrix');      
     for i:=1 to r do        
                       begin             for j:=1 to r do                                       write(m[i,j]:4);                 writeln;         end;       matrfil(m,r);        readln;  end.

    а вот и юнит:
    Code:
    unit Unit1;    interface    type      matr=array[1..10,1..10] of integer;      mas=array[1..100] of integer;      function rasm:integer;      procedure matrgen(var mt:matr; var r1:integer);      procedure matrfil(mt:matr; r1:integer);    implementation      function rasm:integer;         begin             randomize;             result:=random(5)+5;             writeln('matrix dimention= ',rasm);         end;         procedure matrgen(var mt:matr; var r1:integer);          var              i1,j1:integer;          begin              r1:=rasm;              randomize;                for i1:=1 to r1 do                  for j1:=1 to r1 do mt[i1,j1]:=random(50)-50;          end;          procedure matrfil(mt:matr; r1:integer);              var                t:textfile;                fi:file of integer;                fm:file of matr;                fname,tname,mname:string[150];                i1,j1:integer;             begin               write('input file name ');               readln(fname);               tname:='c:\work\'+fname+'.txt';               fname:='c:\work\f'+fname+'.dat';               mname:='c:\work\m'+fname+'.dat';                assign(fm,mname);                rewrite(fm);                write(fm,mt);                close(fm);               assign(t,tname);               rewrite(t);               for i1:=1 to r1 do                 begin                    for j1:=1 to r1 do write(t,mt[i1,j1]:4);                    writeln;                    end;               close(t);              assign(fi,fname);              rewrite(fi);              for i1:=1 to r1 do                 for j1:=1 to r1 do write(fi,mt[i1,j1]);              close(fi);            end;    end.   
    Ток вы просто скоприруйте и запустите в делфи.
     
    #1 mari00, 21 Feb 2007
    Last edited: 21 Feb 2007
  2. Friackazoid

    Friackazoid New Member

    Joined:
    6 Feb 2007
    Messages:
    5
    Likes Received:
    4
    Reputations:
    0
    Это ты специально так код отформатировал, чтоб никто не догадался? Хитро - хитро.

    Было бы также неплохо чтобы ты сказал какую фразу пишет прога, чтобы примерно определить положение ошибки.

    Зацикливание происходит в function rasm:integer; из - за writeln убери его и все будет норм.

    ЗЫ: На дельфе не пишу очень давно так что если что не так не обессудьте.
     
    2 people like this.
  3. t04

    t04 Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    137
    Likes Received:
    40
    Reputations:
    8
    точно точно, короче с тебя плюс к репе!

    Code:
    program Project2;
    
    {$APPTYPE CONSOLE}
    
    uses
      Unit2 in 'Unit2.pas';
    
    var
      m     :matr;
      a     :mas;
      i, j,
      r, k  :  integer;
    begin
      matrgen(m,r);
      writeln('generated matrix');
      for i:=1 to r do
        begin
          for j:=1 to r do
            write(m[i,j]:4);
          writeln;
        end;
      matrfil(m,r);
      readln;
    end.
    Code:
    unit Unit2;
    
    interface
    
    type
      matr=array[1..10,1..10] of integer;
      mas=array[1..100] of integer;
    
    function Rasm:Byte;
    procedure MatrGen(var mt:matr; var r1:integer);
    procedure MatrFil(mt:matr; r1:integer);
    
    implementation
          
    function Rasm:Integer;
    begin
      Randomize;
      result:=random(5)+5;
      WriteLn('matrix dimention= ',Rasm);
      (*Ошибка в том что function Rasm:Integer; тут вызывается рекурсивно;
      Я бы ваще на твоем месте написал бы function Rasm:Byte;
      так как резалт не более 255 и не менее 0
      А исправить надо так:
      WriteLn('matrix dimention= ',Result); *)
    end;
    
    procedure matrgen(var mt:matr; var r1:integer);
    var
      i1,j1:integer;
    begin
      r1:=Rasm;
      randomize;
      for i1:=1 to r1 do
        for j1:=1 to r1 do
          mt[i1,j1]:=random(50)-50;
    end;
    
    procedure matrfil(mt:matr; r1:integer);
    var
      t     : TextFile;
      fi    : file of integer;
      fm    : file of matr;
      fname,
      tname,
      mname : string[150];
      i1,j1 : integer;
    begin
      write('input file name ');
      readln(fname);
      tname:=fname+'.txt';
      fname:='f'+fname+'.dat';
      mname:='m'+fname+'.dat';
      AssignFile(fm,mname);
      ReWrite(fm);
      Write(fm,mt);
      CloseFile(fm);
      
      assignFile(t,tname);
      rewrite(t);
      for i1:=1 to r1 do
        begin
          for j1:=1 to r1 do
            write(t,mt[i1,j1]:4);
          WriteLn;
        end;
      closeFile(t);
      
      AssignFile(fi,fname);
      rewrite(fi);
      for i1:=1 to r1 do
        for j1:=1 to r1 do
          write(fi,mt[i1,j1]);
      close(fi);
    end;
    
    end.
     
    1 person likes this.
  4. mari00

    mari00 Elder - Старейшина

    Joined:
    27 Oct 2006
    Messages:
    93
    Likes Received:
    40
    Reputations:
    16
    всем спасибо)