Pascal/Turbo Pascal - Combinatoria... y el programa explota!

   
Vista:

Combinatoria... y el programa explota!

Publicado por Marco (2 intervenciones) el 03/12/2008 11:46:03
Buenos días.

Estoy haciendo un programa que calcula para un proyecto de ingeniería, entre cinco localizaciones distintas la mejor combinación de todas ellas por cada hora.

La cuestión es que tengo, en total, unas 100000 posibilidades y tengo que almacenarlas en una tabla de datos. Primero calcula las combinaciones entre dos ubicaciones, luego entre tres. Para cuatro localizaciones (8500 posibilidades) el programa funciona a la perfección, pero para 5 da un error de access violation, process stopped. Si ejecuto por separado, en otro archivo, la parte que calcula las combinaciones entre 5 ubicaciones funciona bien, no da ningún error.

¿Alguna idea? Creo que es un problema de memoria que no sé como solucinar, y como mis conocimientos de programación se reducen a una asignatura del primer curso de la carrera os pido ayuda.

¡Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Combinatoria... y el programa explota!

Publicado por Dani (159 intervenciones) el 03/12/2008 12:44:53
Pega el código
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Combinatoria... y el programa explota!

Publicado por Marco (2 intervenciones) el 03/12/2008 13:25:17
Ésta es la parte problemática. Si no es necesario no lo copio todo, que es muy largo y liado. Seguramente es un sistema algo rudimentario, pero mis conocimientos no dan para más.

np es el número de localizaciones que queremos combinar
MAXHORAS=24, para combinar por cada hora
n es el índice de la tabla donde se guardaran todas las combinaciones (valor y posición) y que puede llegar hasta aproximadamente 100000.

if np>=5 then
begin
for q:=1 to np do
begin
for m:=1 to np do
begin
for l:=1 to np do
begin
for k:=1 to np do
begin
for i:=0 to MAXHORAS do
begin
for j:=1 to np do
begin
d[n]:=c[i]-(p[i,j]+p[i,k]+p[i,l]+p[i,m]+p[i,q]);
vi[n]:=i;
vj[n]:=j;
vk[n]:=k;
vl[n]:=l;
vm[n]:=m;
vq[n]:=q;
n:=n+1;
end;
end;
end;
end;
end;
end;
end;

Éste, el código para combinar de 4 en 4, funciona a la perfección (es lo mismo pero sin la variable q):

if np>=4 then
begin
for m:=1 to np do
begin
for l:=1 to np do
begin
for k:=1 to np do
begin
for i:=0 to MAXHORES do
begin
for j:=1 to np do
begin
d[n]:=c[i]-(p[i,j]+p[i,k]+p[i,l]+p[i,m]);
vi[n]:=i;
vj[n]:=j;
vk[n]:=k;
vl[n]:=l;
vm[n]:=m;
n:=n+1;
end;
end;
end;
end;
end;
end;

¡Muchas gracias por la ayuda!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar