Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Зацикливание.Не знаю как исправить( (https://forum.antichat.xyz/showthread.php?t=33908)

mari00 21.02.2007 21:42

Зацикливание.Не знаю как исправить(
 
Значит написал программу в консоль апликейшен с "юнитом" в котором и сидит почти вся основная часть.При запуске происходит зацикливание на выводе тоесть он пишет одну и ту же фразу много раз.Как исправить?
Заранее спасибо.Написано все в делфи.Тестировалось на Делфи 7.
Код:

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.


а вот и юнит:
Код:

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.
Ток вы просто скоприруйте и запустите в делфи.

Friackazoid 21.02.2007 22:37

Это ты специально так код отформатировал, чтоб никто не догадался? Хитро - хитро.

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

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

ЗЫ: На дельфе не пишу очень давно так что если что не так не обессудьте.

t04 21.02.2007 23:04

Цитата:

Сообщение от Friackazoid
Это ты специально так код отформатировал, чтоб никто не догадался? Хитро - хитро.

точно точно, короче с тебя плюс к репе!

Код:

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.

Код:

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.


mari00 21.02.2007 23:13

всем спасибо)


Время: 11:50