Доделал я этот гребаный курсовик, НО есть теперь опять одно НО! Сначала ввожу матрицу, потом для нее диапазон, все прекрасно. Со списком тоже все хорошо, но вот когда я перехожу к массиву, то при выводе выдает опять черт знает что.
Тестил на:
3 4 6 7
Диапазон 0;3
Вывод 4 6 7 1
Откуда теперь единица? :o Может дело в переменной
k? А то ее слишком уж много у меня в программе? Посмотрите, плиз
Исходный код
unit main;
interface
uses crt;
type TAbst=object
n:integer;
constructor Init;
procedure InData; virtual;
procedure Form; virtual;
procedure OutRes; virtual;
destructor Done; virtual;
end;
mas=array[1..1] of integer;
TMas=object(TAbst)
x,y:^mas;
constructor Init(n1:integer);
procedure InData; virtual;
procedure Form; virtual;
procedure OutRes; virtual;
destructor Done; virtual;
end;
matr=array[1..1] of ^mas;
TMatr=object(TAbst)
m:integer;
x:^matr;
y:^mas;
ArrLen:integer;
constructor Init(n1,m1:integer);
procedure InData; virtual;
procedure Form; virtual;
procedure OutRes; virtual;
destructor Done; virtual;
end;
PList1=^List1;
List1=record
dat:integer;
next:PList1;
end;
TList=object(TAbst)
beg,beg1:PList1;
constructor Init(n1:integer);
procedure InData; virtual;
procedure Form; virtual;
procedure OutRes; virtual;
destructor Done; virtual;
end;
PMas=^TMas;
PMatr=^TMatr;
PList=^TList;
procedure InRazm(var n,m:integer);
implementation
procedure InRazm(var n,m:integer);
begin
clrscr;
writeln('Введите размерность матрицы :');
readln(n,m);
end;
constructor TAbst.Init;
begin
end;
procedure TAbst.InData;
begin
end;
procedure TAbst.Form;
begin
end;
procedure TAbst.OutRes;
begin
end;
destructor TAbst.Done;
begin
end;
{Array}
constructor TMas.Init(n1:integer);
begin
n:=n1;
getmem(x,n*sizeof(Mas));
getmem(y,n*sizeof(Mas));
end;
procedure TMas.InData;
var i:integer;
begin
clrscr;
for i:=1 to n do
begin
write('a[',i,']= ');
readln(x^[i]);
end;
clrscr;
end;
procedure TMas.Form;
var i,k:integer;
a,b:real;
begin
clrscr;
writeln('Введите диапазон значений от A до B');
readln( a,B );
k:=0;
for i:=1 to n do
if (x^[i]<a) OR (x^[i]>b) then
begin
inc(k);
y^[k]:=x^[i];
end;
clrscr;
end;
procedure TMas.OutRes;
var k:integer;
begin
clrscr;
for k:=1 to n do
write(y^[k],' ');
readln;
clrscr;
end;
destructor TMas.Done;
begin
freemem(x,n*sizeof(Mas));
freemem(y,n*sizeof(Mas));
end;
{Matrix}
constructor TMatr.Init(n1,m1:integer);
var i:integer;
begin
n:=n1;
m:=m1;
getmem(x,n*sizeof(Matr));
for i:=1 to n do
getmem(x^[i],m*sizeof(Mas));
getmem(y,n*m*sizeof(Mas));
end;
procedure TMatr.InData;
var i,j:integer;
begin
clrscr;
for i:=1 to n do
for j:=1 to m do
begin
write('a[',i,',',j,']= ');
readln(x^[i]^[j]);
end;
clrscr;
end;
procedure TMatr.Form;
var i,j:integer;
a,b:real;
begin
clrscr;
writeln('Введите диапазон значений от A до B');
readln( a,B );
ArrLen:=0;
for i:=1 to n do
for j:=1 to m do
if (x^[i]^[j]<a) OR (x^[i]^[j]>b) then
begin
inc(ArrLen);
y^[ArrLen]:=x^[i]^[j];
end;
clrscr;
end;
procedure TMatr.OutRes;
var k:integer;
begin
clrscr;
for k:=1 to ArrLen do
write(y^[k],' ');
readln;
clrscr;
end;
destructor TMatr.Done;
var i:integer;
begin
for i:=1 to n do
freemem(x^[i],m*sizeof(Mas));
freemem(y,n*m*sizeof(Mas));
freemem(x,n*sizeof(Matr));
end;
constructor TList.Init(n1:integer);
begin
n:=n1;
end;
procedure TList.InData;
var i:integer;
PEnd,p:PList1;
begin
clrscr;
beg:=nil;
for i:=1 to n do
begin
new(p);
write('a[',i,']= ');
readln(p^.Dat);
p^.next:=nil;
if beg=nil then
beg:=p
else
PEnd^.Next:=p;
PEnd:=p;
end
end;
procedure TList.Form;
var a,b:integer;
p,p1,PEnd1:PList1;
begin
clrscr;
writeln('Введите диапазон значений от A до B');
readln( a,B );
p:=beg;
beg1:=nil;
repeat
if (p^.Dat<a) OR (p^.Dat>b) then
begin
new(p1);
p1^.Dat:=p^.Dat;
p1^.next:=nil;
if beg1=nil then
beg1:=p1
else
PEnd1^.next:=p1;
PEnd1:=p1
end;
p:=p^.next;
until p=nil;
end;
procedure TList.OutRes;
var p:PList1;
begin
clrscr;
p:=beg1;
repeat
write(p^.Dat,' ');
p:=p^.next;
until p=nil;
readln
end;
destructor TList.Done;
var p,p1:PList1;
begin
p:=beg;
repeat
p1:=p^.next;
dispose(p);
p:=p1;
until p=nil;
p:=beg1;
repeat
p1:=p^.next;
dispose(p);
p:=p1;
until p=nil;
end;
end.