Pascal/Turbo Pascal - Atascada en un programa de Pascal

   
Vista:

Atascada en un programa de Pascal

Publicado por Vero (4 intervenciones) el 11/09/2011 23:15:50
Hola a todos!

Verán, estoy intentando hacer un problema en Pascal y me encuentro atascada. El programa debe leer un número indeterminado de valores positivos enteros por teclado y calcular luego la media de los valores leídos, el máximo y el mínimo. El proceso acaba cuando se lee un número negativo.

Aquí expongo lo que llevo hecho de momento, a ver si me pueden ayudar:

Program Enteros;
uses crt;
var
valor, primer valor, maximo, minimo, suma, numvalores: integer;
media: real;
begin
clrscr;
suma:= 0;
numvalores:= 0;
minimo:= 10;
maximo:= 0;
writeln('Por favor, introduzca los valores que desee: ');
read(primervalor);
if (primervalor<0) then
writeln('Disculpe, el programa se ejecutará cuando introduzca, al menos, un valor positivo.')
else
if (primervalor>0) then
begin
read(valor);
.
.
.

end.

P.D: ¿Por qué estoy atascada? Lo del primer valor se me ocurrió por si se introducía en primer lugar un número negativo. El programa no tendría sentido que se ejecutara y ví bien que diera ese mensaje de aviso. Pero si a continuación el segundo if se ejecuta, creo que estando como está, el primer valor introducido no se tendría en cuenta para calcular la media, minimo y máximo, ¿no?. Pffff, estoy hecha un lío, También pensé en usar un: for i :=0 to n do y proceder a meter los subprogramas para el cálculo de la media, maximo y minimo. ¿Qué opinan? Muchas gracias de antemano :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Atascada en un programa de Pascal

Publicado por Vero (4 intervenciones) el 12/09/2011 20:35:21
Sigo enfrascada en este problema, y ya le he dado algo más de forma:

Program Dos;
uses crt;

var
valor, maximo, minimo, suma, i, n: integer;
media: real;

begin
suma:=0;
i:=0;
minimo:=10;
maximo:=0;

writeln('Este programa lee los valores positivos que usted introduzca y procede a calcular su media, su maximo y su minimo tras introducir cualquier valore negativo.');
writeln('Introduzca un valor: ');
readln(valor);

begin
for i:=1 to n do
repeat
readln(valor);
if (valor>=0) then
suma:=suma+valor;
n:=n+1;
media:=suma/n;
if (valor<minimo) then
minimo:=valor;
if (valor>maximo) then
maximo:=valor;
until (valor<0);
end;

writeln('La media es: ', media);
writeln('El mínimo es: ', minimo);
writeln('El máximo es: ', maximo);
writeln('Pulse cualquier tecla para finalizar...');
readkey;
end.

El problema ahora es que solo se ejecuta para el primer valor que meto.¿Cómo puedo hacer que se siga ejecutando y sólo pare cuando meta un valor negativo? Por favor, agradezco su ayuda urgente, muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Atascada en un programa de Pascal

Publicado por Vero (4 intervenciones) el 12/09/2011 20:51:04
Problemilla solucionado, solo me queda unapequeña tontería en la que no consigo caer. Habiendo hecho esas pequeñas modificaciones:

writeln('Este programa lee los valores positivos que usted introduzca y procede a calcular su media, su maximo y su minimo tras introducir cualquier valore negativo.');
writeln('Introduzca valores: ');
readln(valor);

repeat
readln(valor);
if (valor>=0) then
suma:=suma+valor;
n:=n+1;
media:=suma/n;
if (valor<minimo) then
minimo:=valor;
if (valor>maximo) then
maximo:=valor;
until (valor<0);

writeln('La media es: ', media);
writeln('El mínimo es: ', minimo);
writeln('El máximo es: ', maximo);
writeln('Pulse cualquier tecla para finalizar...');
readkey;
end.

Pregunta: ¿Cómo puedo conseguir que el número negativo no me lo cuente para la media y no me salga como el mínimo? Intuyo que debo de declarar de nuevo la media y el minimo despues del until, ¿verdad?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Atascada en un programa de Pascal

Publicado por ramon (2072 intervenciones) el 17/09/2011 16:44:30
{Espero te haya entendido esto es lo que pides}

Program Dos;
uses crt;

var
valor, maximo, minimo, suma, i, n: integer;
media: real;

begin
clrscr;
suma := 0;
i := 0;
minimo := 0;
maximo := 0;
writeln('Numero 0 Termina');
repeat
writeln('Entre numero');
readln(valor);
if valor < 0 then
begin
end
else
begin
maximo := valor;
media := valor / 2;
minimo := 0;
suma := suma + valor;
writeln('Maximo :',suma,' Media : ',suma / 2:8:2,' Minimo : ',minimo);
end;
until valor = 0;
clrscr;
writeln(' Lasuma de todos es : ',suma);
writeln(' La media de todos es : ',suma / 2:8:2);
writeln(' El minimo de todo es : ',0);
repeat until keypressed;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar