Pascal/Turbo Pascal - no encuentro el error

 
Vista:

no encuentro el error

Publicado por usuaria (27 intervenciones) el 02/11/2006 00:37:01
Holas, primero quiero agradecer a todos los usuarios del foro que siempre ayudan..la verdad q no se q haria sin ustedes :) !..y ahora les planteo mi problem...intento hacer el siguiente programa la carga la hce bien pero cuando quiero calcular importetotal ahi muere. si alguien encuentra la falla grax!!! :)

Program Articulos;
Uses
crt;

Const
MAX_ART=40;
MAX_DIAS=6;

Type
tArticulo= Record
cantidad:integer;
importe:real;
End;

Trango=1..max_dias;
Trango2=1..max_art;

Tmatriz= array [trango,trango2] of tArticulo;
Tdias= array [trango] of real;

Procedure Carga (Var listado:tmatriz);
Var
articulo:tarticulo;
i,j:integer;
opcion:char;

Begin
opcion:= 's';

While (opcion='s') do
Begin
Writeln ('Nº Articulo: ');
Readln (i);
Writeln ('Dia: ');
Readln (j);
Writeln ('Cantidad: ');
Readln (articulo.cantidad);
Writeln ('Importe: ');
Readln (articulo.importe);
listado[i,j]:=articulo;
Writeln ('Otro Articulo? s/n: ');
Readln (opcion);
End;

End;

{Procedure Imprimir (listado:tmatriz);

Var
i,j:integer;
Begin

For i:=1 to Max_Dias do
Begin
For j:=1 to Max_Art do
Begin
write ('Dia',i);
write ('Articulo',j);
write (listado[i,j].cantidad:5);
write (listado[i,j].importe:5);
End;

writeln;

end;
End; }

Procedure ImporteTotal (Var vec_importe:tdias;listado:tmatriz);
Var
i:trango2;
j:trango;
importetotal:real;

Begin
write ('imp');
importetotal:=0;
For j:=1 to Max_Dias do
Begin
For i:=1 to Max_Art do
importetotal:=importetotal+listado[i,j].importe;

vec_importe[j]:=importetotal;
End;
writeln ('import');

End;

{Procedure Intercambio(Var A,B:real);
Var
aux:real;
Begin
aux:=A;
A:=B;
B:=aux;

end;

Procedure Ordenar_Importe (Var vec_importe:tdias);
Var
i,j:integer;

Begin
For i:=1 to Max_Dias do
For j:=1 to Max_dias-i do

If vec_importe[j]>vec_importe[j+1] then

Intercambio(vec_importe[j],vec_importe[j+1]);

End;}

{Procedure ImprimirImporte (vec_importe:tdias);
Var
i:integer;
Begin
ClrScr;
Ordenar_Importe(vec_importe);
For i:=1 to Max_Dias do
Begin
Writeln ('Dia: ',i);
Writeln ('Importe: ',vec_importe[i]);
End;

End;}

{PRINCIPL}
VAR
articulo:tarticulo;
listado:tmatriz;
vec_importe:tdias;

Begin
ClrScr;
Writeln ('EJERCICIO ARTICULOS');
Carga(listado);
{Imprimir(listado);}
writeln ('no');
ImporteTotal (vec_importe,listado);
writeln ('si');{
ImprimirImporte (vec_importe);}
readkey;

End.
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:no encuentro el error

Publicado por Carlos Guimaraenz (265 intervenciones) el 02/11/2006 17:52:38
Hola Usuaria! Un problema que encontré es que al hacer la suma de importes, hay ciertas posiciones de la matriz donde hay "basura".
Es conveniente que inicialices toda la matriz antes en 0 (cero), por lo que cuando ingreses luego algunos artículos, sume sólo el importe de éstos.
Así que antes de la llamada al procedimiento Carga, llames a Inicializar, que no es mas que:

for k := 1 to max_dias do
for i := 1 to max_art do
begin
listado[k,i].cantidad:=0;
listado[k,i].importe:=0;
end;

Hay otro error muy importante... tú declaras la matriz, donde el primer rando es de 1..max_dias y el segundo de 1..max_art. Ahora bien, cuando haces la suma, inviertes los índices. Debes tener primero el índice que corresponde a los días (máximo 6) y luego el que corresponde a los artículos (máximo 40). Luego me funciona, aunque no se si cumple con tus requerimientos, pero la sintaxis es correcta ahora. Prueba esas dos cosas (inicializar y cambiar los índices) y si no anda vuelve a ver qué más puede fallar. Un beso!
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