Ejercicio 9 Practico 5

Ejercicio 9 Practico 5

de Santiago Marchiotto Texeira -
Número de respuestas: 3

Logre que funcionara el código para n valores ingresados secuencialmente (uno después del otro), pero no sabría como hacer para que funcione con una lineal de n valores ingresados de una sola vez.

adjunto el código para que lo visualicen:

program desviacion;

var

prueba, entrada1, total ,totalcuadrado, entrada2, promedio, desviado, cantidad: real;

begin

entrada1:=0.0;

entrada2:=0.0;

promedio:=0.0;

desviado:=0.0;

cantidad:=1.0;

writeln ('ingrese un valor');

readln (entrada1, entrada2);

writeln (entrada1,' ', entrada2);

total:=entrada2;

totalcuadrado:=sqr(entrada2);

writeln ('este es el total ', total, ' y este es el total cuadrado', totalcuadrado);

while (entrada1>=0) and (entrada2>=0) do

    begin

    writeln ('entre aca');

    cantidad:=cantidad+1.0;

    total:=total+entrada1;

    totalcuadrado:=totalcuadrado+sqr(entrada1);

    writeln ('ingrese el siguiente valor');

    readln (entrada1);

    end;

promedio:=total/cantidad;

writeln ('este es el promedio ', promedio, 'este es el total cuadrado ', totalcuadrado, 'esta es la cantidad', cantidad);

desviado:=sqrt((totalcuadrado/cantidad)-(sqr (promedio)));

writeln (desviado);

readln (prueba);

end.

En respuesta a Santiago Marchiotto Texeira

Re: Ejercicio 9 Practico 5

de Daniela Andrea Andrade Acosta -
Hola Santiago, cómo estas?

En el caso particular del código que adjuntaste, el readln(entrada1) lo que va a hacer es leer un número real ingresado como dato de entrada y luego va a descartar el resto de los valores que continúan en la misma línea. Por ejemplo, si se ingresan los siguientes valores: 25.0 23.0 cuando se hace el readln(entrada1) va a dejar almacenado en entrada1 el valor 25.0 y el 23.0 se va a descartar porque salta a la siguiente línea luego de leer el valor que espera.

Para poder leer una secuencia de valores tendrías que utilizar solo el read(entrada1), que luego de leído el 25.0 el cursor va a quedar en la misma linea y en el siguiente read(entrada1) que se haga tomaría el 23.0.

Espero haberme explicado bien.
Cualquier otra consulta a las órdenes.
Saludos.
En respuesta a Daniela Andrea Andrade Acosta

Re: Ejercicio 9 Practico 5

de Facundo Gaston Arevalo Lara -
Este fue mi programa para este ejercicio, en principio funciona igual que al ejemplo del practico pero quería saber si ¿se puede hacer mas eficiente o así está bien?
Program DesviacionEstandar;
var n,desviacion,promedio,s,a,num,suma : real;
begin
promedio := 0;
n := 0;
suma := 0;
read(num);
while num >= 0 do
begin
  n := n + 1;
  promedio := promedio + num;
  a := promedio / n;
  suma := suma + sqr(num);
  s := suma;
  read(num)
end;
desviacion := sqrt((s / n) - sqr(a));
writeln('La desviacion estandar es: ', desviacion:3:2)
end.
En respuesta a Facundo Gaston Arevalo Lara

Re: Ejercicio 9 Practico 5

de Luis Sierra -
hola facundo,

buen trabajo. veo al menos dos cosas que puedes mejorar.

1. lo único que parece hacer la variable s es mantener una copia de la variable suma. si es así, es redundante y hay que eliminarla. a veces esas variables quedan luego de resolver el problema, sin darnos cuenta. revisa que luego de resuelto el problema no aparezcan variables que no sirven; complican el código y no aportan.

2. observa las restantes variables que se actualizan en el cuerpo de la iteración; num, n, promedio, suma, a. tenemos tres tipos distintos de actualizaciones
* num se lee correctamente del teclado, y se encarga de leer los datos del usuario;
* n, promedio y suma modifican sus propios valores; en cada iteración, el contador n y los acumuladores promedio y suma van registrando cosas que van sucediendo en cada iteración;
* sin embargo, a no es un contador ni un acumulador. es una variable que resume información que recolectaron otras variables, y que solamente es usada al terminar la iteración. es decir, estás haciendo un cálculo en cada paso de la iteración que no es usado sino hasta el final. entonces, por qué hacerlo en cada iteración? elimina esa asignación que no aporta dentro de la iteración, y muévela a donde sea relevante.

finalmente, alguna otras preguntas: puedes convertir ese while en repeat? qué estructura iterativa sería mejor? la cantidad de números positivos ingresados puede ser cero? por qué?

saludos

luis