Dentro de la función "suma_coleccion" tienes la siguiente sentencia:
Código:
function suma_coleccion(lectura:Tcoleccion;tamcoleccion:integer;VAR no_en_venta:real):real;
.
.
suma_coleccion := suma_coleccion + .......
.
.
end;
Eso se llama "Recursividad", es decir dentro de una función llamas a la misma funcion. Eso es válido pero hay que saber usarlo. Personalmente no me gusta mucho la recursividad pero algunas veces su uso es necesario.
Además que te faltarían los parámetros:
suma_coleccion := suma_coleccion(parámetros)
Dicho esto, pasamos a:
Citar
Y por que no me deja llamar asi
al registro precio?
Código:
lectura[i].cuadros.precio;
Aclarando que "PRECIO" no es un registro sino un CAMPO de un registro.
Para acceder a un campo del registro va: variable_tipo_registro.campo
En este caso las variables tipo registro son cada una de los datos del array coleccion1, es decir coleccion1[1], coleccion1[2] y coleccion1[3]; que en la función son asignadas al array "lectura"
En resumen: Para acceder al campo precio (dentro de la función) debes escribir: lectura.precio
Ahora sí pasamos a la parte más importante.
Primero debes tener una variable suma_aux dentro de la función:
Código:
function suma_coleccion(lectura:Tcoleccion;tamcoleccion:integer;VAR no_en_venta:real):real;
var
i:integer;
s_aux:real;
begin
s_aux:=0;
for i:=1 to tamcoleccion do
if lectura[i].precio = 0 then
no_en_venta := no_en_venta + 1
else s_aux := s_aux + lectura[i].precio;
suma_coleccion:=s_aux
end;
Sugerencias final:
La variable "no_en_venta" al ser un contador debería ser del tipo integer.
Esta variable deber tener como valor inicial "CERO". Algunos compiladores inicializan automáticamente las variables numéricas con cero, por lo cual ya no es necesario escribir la sentencia (En mi version del Turbo Pascal 5.5 sí es necesario inicializarlo)
SUERTE