14-12-2010, 20:00
hola como les va?...mi problema es que al ejecutar un programa en turbo pascal 7.0 borland en el cual uso nodos, listas, punteros, me salta error "203 heap overflow error"
se que es por falta de memoria, pero no se como agrandarla, a menos que mi programa este mal, se los dejo para que lo vean y me digan.
uses
crt,graph;
const
CANT_STAR = 25;
type
str12 = string[12];
str20 = string[20];
str30 = string[30];
tregStar = RECORD
nomStar : str20;
coordX,
coordY : word;
nroOrden : byte
end;
tvStar = ARRAY [1..CANT_STAR] of tregStar;
tregCnstStar = RECORD
nomCnstlcn : str30;
cjtoStar : tvStar;
end;
tarcCnstStar = file of tregCnstStar;
tregSeg = RECORD
ptoOrigen,
ptoDestino : byte
end;
tvSeg = ARRAY [1..CANT_STAR] of tregSeg;
tregCnstSeg = RECORD
nomCnstSeg : str30;
cjtoSeg : tvSeg;
end;
tarcCnstSeg = file of tregCnstSeg;
tinfoSt = tregStar;
tlistaSt = ^tnodoSt;
tnodoSt = RECORD
info : tinfoSt;
sgte : tlistaSt
end;
tinfoSg = tregSeg;
tlistaSg = ^tnodoSg;
tnodoSg = RECORD
info : tinfoSg;
sgte : tlistaSg
end;
rVecCns = RECORD
nomCnstlcn : str30;
lstSt : tlistaSt;
lstSg : tlistaSg
end;
tVecCns = ARRAY [1..15] of rVecCns;
PROCEDURE insnodoSt( var lista:tlistaSt; valor:tregStar);
var
p : tlistaSt;
begin
new(p);
p^.info := valor;
p^.sgte := lista;
lista := p;
end;
PROCEDURE insnodoSg(var lista:tlistaSg; valor:tregSeg);
var
p : tlistaSg;
begin
new(p);
p^.info := valor;
p^.sgte := lista;
lista := p
end;
PROCEDURE armar_lstSg(var vec:tVecCns; n:byte; reg2: tregCnstSeg);
var
x:byte;
begin
vec[n].lstSg:=nil;
x := 1;
while reg2.cjtoSeg[x].ptoOrigen <> 0 do
begin
insnodoSg(vec[n].lstSg,reg2.cjtoSeg[x]);
inc(x)
end;
end;
PROCEDURE armar_lstSt(var vec:tVecCns; n:byte; reg: tregCnstStar);
var
x:byte;
begin
vec[n].lstSt:=nil;
x := 1;
while reg.cjtoStar[x].nomStar <> ' *' do
begin
insnodoSt(vec[n].lstSt,reg.cjtoStar[x]);
inc(x)
end;
end;
PROCEDURE armarVector(var vec:tVecCns; var n:byte;nombre:str30;nombre2:str30);
var
cons : tarcCnstStar;
reg : tregCnstStar;
cons2: tarcCnstSeg;
reg2 : tregCnstSeg;
begin
assign(cons,nombre+'.dat');
reset(cons);
assign(cons2,nombre2+'.dat');
reset(cons2);
n := 0;
while not(eof(cons)) do
begin
read(cons,reg);
read(cons2,reg2);
inc(n);
vec[n].nomCnstlcn := reg.nomCnstlcn;
armar_lstSt(vec,n,reg);
armar_lstsg(vec,n,reg2);
end;
close(cons);
close(cons2);
end;
PROCEDURE ordenar(var vec:tVecCns; n:byte);
var
aux: rvecCns;
i,
j: byte;
begin
for i:=1 to (n-1) do
begin
for j:=(i+1) to n do
begin
if vec[i].nomCnstlcn > vec[j].nomCnstlcn then
begin
aux := vec[i];
vec[i] := vec[j];
vec[j] := aux;
end
end
end
end;
FUNCTION Menu( vec:tVecCns; n:byte):byte;
var
i,
j,
opc : byte;
begin
clrscr;
i := 5;
gotoxy(16,i);
writeln('Elija una constelacion a graficar:');
for j := 1 to n do
begin
gotoxy(16,i+j);
writeln(j,'.-',vec[j].nomCnstlcn);
end;
readln(opc);
menu := opc
end;
PROCEDURE buscarenlista(list:tlistaSt;
valor:byte;
var p:tlistaSt);
var
q : tlistaSt;
begin
q := list;
p := NIL;
while ((q<>NIL)and(p=NIL)) do
begin
if valor <> q^.info.nroOrden then
q := q^.sgte
else
p := q
end
end;
PROCEDURE graficar(vec:tVecCns; opc:byte);
var
q: tlistaSg;
p: tlistaSt;
x1,y1,
x2,y2,
i:word;
nOrd,
ori,
des: string; {----------------------------------}
begin
setgraphmode(getgraphmode);
q := vec[opc].lstSg;
while q <> NIL do
begin
buscarenlista(vec[opc].lstSt,
q^.info.ptoOrigen,
p);
x1 := p^.Info.coordX;
y1 := p^.Info.coordY;
buscarenlista(vec[opc].lstSt,
q^.info.ptoDestino,
p);
x2 := p^.Info.coordX;
y2 := p^.Info.coordY;
str(q^.info.ptoOrigen,ori);
str(q^.info.ptodestino,des);
q := q^.sgte
end;
p := vec[opc].lstSt;
i := 0;
while p <> NIL do
begin
str(p^.info.nroOrden,nOrd);
i := i + 20;
p := p^.sgte
end
end;
PROCEDURE ProcCnstlcns;
var
vecCns : tvecCns;
nombre : str30;
nombre2: str30;
n,
opc : byte;
begin
clrscr;
gotoxy(16,8);
writeln('ingrese el nombre del archivo binario de estrellas');
gotoxy(16,9);
readln(nombre);
gotoxy(16,10);
writeln('ingrese el nombre del archivo binario de segmentos');
readln(nombre2);
gotoxy(16,11);
armarVector(vecCns,n,nombre,nombre2);
ordenar(vecCns,n);
opc := menu(vecCns,n);
graficar(vecCns,opc);
{readln();}
readkey;
end;
begin
ProcCnstlcns;
end.
Ha, si alguien sabe como hacer funcionar bien los graficos...lo voy a preguntar en otro tema. grax.
se que es por falta de memoria, pero no se como agrandarla, a menos que mi programa este mal, se los dejo para que lo vean y me digan.
uses
crt,graph;
const
CANT_STAR = 25;
type
str12 = string[12];
str20 = string[20];
str30 = string[30];
tregStar = RECORD
nomStar : str20;
coordX,
coordY : word;
nroOrden : byte
end;
tvStar = ARRAY [1..CANT_STAR] of tregStar;
tregCnstStar = RECORD
nomCnstlcn : str30;
cjtoStar : tvStar;
end;
tarcCnstStar = file of tregCnstStar;
tregSeg = RECORD
ptoOrigen,
ptoDestino : byte
end;
tvSeg = ARRAY [1..CANT_STAR] of tregSeg;
tregCnstSeg = RECORD
nomCnstSeg : str30;
cjtoSeg : tvSeg;
end;
tarcCnstSeg = file of tregCnstSeg;
tinfoSt = tregStar;
tlistaSt = ^tnodoSt;
tnodoSt = RECORD
info : tinfoSt;
sgte : tlistaSt
end;
tinfoSg = tregSeg;
tlistaSg = ^tnodoSg;
tnodoSg = RECORD
info : tinfoSg;
sgte : tlistaSg
end;
rVecCns = RECORD
nomCnstlcn : str30;
lstSt : tlistaSt;
lstSg : tlistaSg
end;
tVecCns = ARRAY [1..15] of rVecCns;
PROCEDURE insnodoSt( var lista:tlistaSt; valor:tregStar);
var
p : tlistaSt;
begin
new(p);
p^.info := valor;
p^.sgte := lista;
lista := p;
end;
PROCEDURE insnodoSg(var lista:tlistaSg; valor:tregSeg);
var
p : tlistaSg;
begin
new(p);
p^.info := valor;
p^.sgte := lista;
lista := p
end;
PROCEDURE armar_lstSg(var vec:tVecCns; n:byte; reg2: tregCnstSeg);
var
x:byte;
begin
vec[n].lstSg:=nil;
x := 1;
while reg2.cjtoSeg[x].ptoOrigen <> 0 do
begin
insnodoSg(vec[n].lstSg,reg2.cjtoSeg[x]);
inc(x)
end;
end;
PROCEDURE armar_lstSt(var vec:tVecCns; n:byte; reg: tregCnstStar);
var
x:byte;
begin
vec[n].lstSt:=nil;
x := 1;
while reg.cjtoStar[x].nomStar <> ' *' do
begin
insnodoSt(vec[n].lstSt,reg.cjtoStar[x]);
inc(x)
end;
end;
PROCEDURE armarVector(var vec:tVecCns; var n:byte;nombre:str30;nombre2:str30);
var
cons : tarcCnstStar;
reg : tregCnstStar;
cons2: tarcCnstSeg;
reg2 : tregCnstSeg;
begin
assign(cons,nombre+'.dat');
reset(cons);
assign(cons2,nombre2+'.dat');
reset(cons2);
n := 0;
while not(eof(cons)) do
begin
read(cons,reg);
read(cons2,reg2);
inc(n);
vec[n].nomCnstlcn := reg.nomCnstlcn;
armar_lstSt(vec,n,reg);
armar_lstsg(vec,n,reg2);
end;
close(cons);
close(cons2);
end;
PROCEDURE ordenar(var vec:tVecCns; n:byte);
var
aux: rvecCns;
i,
j: byte;
begin
for i:=1 to (n-1) do
begin
for j:=(i+1) to n do
begin
if vec[i].nomCnstlcn > vec[j].nomCnstlcn then
begin
aux := vec[i];
vec[i] := vec[j];
vec[j] := aux;
end
end
end
end;
FUNCTION Menu( vec:tVecCns; n:byte):byte;
var
i,
j,
opc : byte;
begin
clrscr;
i := 5;
gotoxy(16,i);
writeln('Elija una constelacion a graficar:');
for j := 1 to n do
begin
gotoxy(16,i+j);
writeln(j,'.-',vec[j].nomCnstlcn);
end;
readln(opc);
menu := opc
end;
PROCEDURE buscarenlista(list:tlistaSt;
valor:byte;
var p:tlistaSt);
var
q : tlistaSt;
begin
q := list;
p := NIL;
while ((q<>NIL)and(p=NIL)) do
begin
if valor <> q^.info.nroOrden then
q := q^.sgte
else
p := q
end
end;
PROCEDURE graficar(vec:tVecCns; opc:byte);
var
q: tlistaSg;
p: tlistaSt;
x1,y1,
x2,y2,
i:word;
nOrd,
ori,
des: string; {----------------------------------}
begin
setgraphmode(getgraphmode);
q := vec[opc].lstSg;
while q <> NIL do
begin
buscarenlista(vec[opc].lstSt,
q^.info.ptoOrigen,
p);
x1 := p^.Info.coordX;
y1 := p^.Info.coordY;
buscarenlista(vec[opc].lstSt,
q^.info.ptoDestino,
p);
x2 := p^.Info.coordX;
y2 := p^.Info.coordY;
str(q^.info.ptoOrigen,ori);
str(q^.info.ptodestino,des);
q := q^.sgte
end;
p := vec[opc].lstSt;
i := 0;
while p <> NIL do
begin
str(p^.info.nroOrden,nOrd);
i := i + 20;
p := p^.sgte
end
end;
PROCEDURE ProcCnstlcns;
var
vecCns : tvecCns;
nombre : str30;
nombre2: str30;
n,
opc : byte;
begin
clrscr;
gotoxy(16,8);
writeln('ingrese el nombre del archivo binario de estrellas');
gotoxy(16,9);
readln(nombre);
gotoxy(16,10);
writeln('ingrese el nombre del archivo binario de segmentos');
readln(nombre2);
gotoxy(16,11);
armarVector(vecCns,n,nombre,nombre2);
ordenar(vecCns,n);
opc := menu(vecCns,n);
graficar(vecCns,opc);
{readln();}
readkey;
end;
begin
ProcCnstlcns;
end.
Ha, si alguien sabe como hacer funcionar bien los graficos...lo voy a preguntar en otro tema. grax.