Primero veamos algunas "cosillas" de tu codificación y luego vienen las sugerencias.
Dentro de la función "suma_coleccion" tienes la siguiente sentencia:
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:
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:
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
Dentro de la función "suma_coleccion" tienes la siguiente sentencia:
Código [Seleccionar]
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:
CitarY por que no me deja llamar asiCódigo [Seleccionar]lectura[i].cuadros.precio;
al registro 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 [Seleccionar]
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