PDA

Просмотр полной версии : Зацикливание.Не знаю как исправить(


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

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

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
всем спасибо)