[ Foro de Pascal ]

Invalid operand to +

26-Nov-2014 20:06
Invitado (maria)
6 Respuestas

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;
 



 


27-Nov-2014 01:19
Nacho Cabanes (+30)

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]);
 




27-Nov-2014 01:55
Invitado (Maria)

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.


27-Nov-2014 09:47
Nacho Cabanes (+30)

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.


28-Nov-2014 00:06
Alberto Rilo Mosteiro

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;
 





28-Nov-2014 00:12
Alberto Rilo Mosteiro

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.


28-Nov-2014 12:11
Nacho Cabanes (+30)

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.)