[ Foro de Pascal ]
Buenas, espero que me podais ayudar a encontrar porque la linea entre comentarios me da error( ivalid operand to+) cuando contador es una variable real , y el temperaturas es un tarray de reales de [1..7,1..24]. Muchas gracias.
FUNCTION MediaDiaria(temperaturas:tarray):real;
VAR contador:real;i:integer;
BEGIN
contador:=0;
FOR i:=1 TO 24 DO
begin
(*contador:=contador+(temperaturas[i]);*)
end;
contador:=contador/7;
MediaDiaria:=contador;
end;
Claro. Si es un array bidimensional, no podrás sacar de él toda una fila de golpe, sino que deberás obtener un elemento a partir de su fila y su columna: No sería
contador:=contador+(temperaturas[hora]);
sino
contador:=contador+(temperaturas[dia,hora]);
Vale ahora me va, pero me piden media diaria, media de cada hora, y media semanal. Yo tengo esto:
FUNCTION Media(temperaturas:tarray):real;
VAR contador:real;i,j:integer;
BEGIN
contador:=0;
FOR i:=1 TO 7 DO
FOR j:=1 TO 24 DO
begin
contador:=contador+(temperaturas[i,j]);
end;
contador:=contador/24;
Mediate:=contador;
end;
Y me da media de 1 introduciendo en el dia 1 las 24 horas 1ºC, el dia 2 las 24 horas con 2ºC....etc hasta el dia 7 cuando creo que me tendria que dar un resultado distinto.
Para la media semanal lo hice dividiendo el contador entre 7 en lugar de entre 24 y me dio 95... esta mal. seria multiplicando 7*24 y poniendolo dividiendo al contador ???
Muchas gracias.
Si tienes 7x24 elementos, para calcular la media deberás dividir entre 7*24, no sólo entre 24, o estarás obteniendo la media de cada bloque de 7 horas, no la media de cada hora.
Este es el codigo lo he dividido entre 7*24(el contador), y me da 2000 aproximadamente, vamos que no tiene sentido.
Pienso yo , que para calcular la media de cada dia de la semana, habria que dividirlo entre 24(cada dia tiene 24 horas) y lo que estas acumulando cuando insertas es la temperatura de cada hora, pero entonces saldria una unica media , cuando tendrian que salir 7 medias diarias... o me equivoco?
PROGRAM Ciudad(input,output);
TYPE
tarray=array[1..7,1..24] of real;
VAR
temperaturas:tarray;
(************************************************)
PROCEDURE Insertar( VAR z:tarray);
VAR i,j:integer;
BEGIN
FOR i:=1 TO 7 DO BEGIN
writeln('Dia de la semana: ',i);
writeln;
FOR j:=1 TO 24 DO BEGIN
write('Hora del dia: ', j );
write(' Temperatura(ºC): ');
readln(z[i,j]);
END;
END;
END;
(************************************************)
FUNCTION Media(temperaturas:tarray):real;
VAR contador:real;i,j:integer;
BEGIN
contador:=0;
FOR i:=1 TO 7 DO
FOR j:=1 TO 24 DO
begin
contador:=contador+(temperaturas[i,j]);
end;
contador:=contador/7;
Media:=contador;
end;
FUNCTION Mediate(temperaturas:tarray):real;
VAR contador:real;i,j:integer;
BEGIN
contador:=0;
FOR i:=1 TO 7 DO
FOR j:=1 TO 24 DO
begin
contador:=contador+(temperaturas[i,j]);
end;
contador:=contador/(7*24);
Mediate:=contador;
end;
Por cierto hay dos funciones Media y Mediate porque fue para probar resultados , y ninguna da un resultado logico o esperado , Media da 95, y Mediate 2000 aprox.
Los datos que inserte fue , un 1ºc en cada una de las 24 horas del dia 1, 2ºC en cada una de las 24 horas del dia 2...El resultado para la media semanal esperado seria de 4ºC , y despues para la media diaria , pues para cada dia una media(dia 1 media de 1ºC, dia 2 media 2ºc, dia 3 media de 3ºC...).. pero no se acercan ni por asomo. Espero haberme explicado bien. Es una tonteria, pero no doy encontrado el problema.
Yo te recomendaría que para las pruebas previas tomaras datos prefijados: en vez de introducir a mano 7*24 datos, los rellenas desde código. Puedes empezar por rellenar todos con el valor 10, y comprobar si la media es 10; luego rellenas unos con 10 y otros con 20, para ver si la media es 15; luego con 10 y 15, para que la media sera 12,5 y comprobar que los números decimales aparecen correctamente.
Con poco más que eso, que se programa muy rápido, tendrías bastante certeza de que la lógica es buena.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)