Pascal/Turbo Pascal - Mostrar entero mayor y menor

 
Vista:
sin imagen de perfil

Mostrar entero mayor y menor

Publicado por anonymous (1 intervención) el 01/10/2017 13:21:55
Hola, soy theroxd4n y estoy empezando a programar en Pascal. Me han pedido hacer un programita en el que el usuario tiene que ingresar una serie aleatoria de números enteros, a elección del usuario. Cuando el usuario ingrese el numero 0, el programa dejara de leer números y mostrará por pantalla el numero mayor y menor de los ingresados. Hasta aquí todo bien, he hecho el programa y funciona, pero en el numero menor siempre sale el 0, puesto que aunque el 0 sirve para dejar de leer números, también lo almacena en la variable numero1 y por tanto el menor siempre va a ser el 0. ¿Existe alguna manera de excluir el 0 del análisis y que el menor sea el segundo menor ingresado? Aquí os dejo mi código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PROGRAM mayor_menor;
VAR
	mayor, menor,numero1, numero2: integer;
	salir: boolean;
BEGIN
	numero1:=0;
	numero2:=0;
	write('Introduce un numero (para terminar escribe un 0): ');
	readln(numero1);
	repeat
	numero2:=numero1;
	write('Introduce un numero (para terminar escribe un 0): ');
	readln(numero1);
	IF (numero1<numero2) THEN
	menor:=numero1
	ELSE
	mayor:=numero1;
	salir:=(numero1=0);
	UNTIL(salir);
	writeln('El mayor numero es: ', mayor);
	writeln('El menor numero es: ', menor);
	readln;
END.

Gracias, un saludo.
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
Imágen de perfil de kip
Val: 20
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Mostrar entero mayor y menor

Publicado por kip (3 intervenciones) el 01/10/2017 20:18:17
Hola, tu código tiene una falla importante, por ejemplo si ingresas un valor mayor al inicio, luego uno menor y al final uno mayor que este pero menor que el primero te muestra claramente el mayor pero no el primero si no este mayor actual, no se si me logras entender, es decir no toma en cuenta el primero que claramente es mayor que estos dos últimos.

He preparado algo basandome en tu codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program mayor_menor;
 
var
  mayor, menor, numTemp: integer;
begin
  mayor := 0;
  menor := 0;
  Write('Introduce un numero (para terminar escribe un 0): ');
  readln(numTemp);
  while numTemp > 0 do
    begin
    if (numTemp > mayor) then
       mayor := numTemp;
    if (numTemp < menor) or (menor = 0) then
       menor := numTemp;
    Write('Introduce un numero (para terminar escribe un 0): ');
    readln(numTemp);
    end;
  writeln('El mayor numero es: ', mayor);
  writeln('El menor numero es: ', menor);
  readln;
end.

Creo que en estos casos es posible tambien trabajar con un array dinámico, en este debes colocar todos los numeros ingresados y con la funcion MaxValue y MinValue tomar los valores correspondientes, ademas de que independizas el numero ingresado a traves de una variable temporal, esta almacenara el numero y se debe verificar si esta variable temporal es mayor que 0 de esa forma se agregara y continuara con el programa, yo he hecho un codigo sencillo a ver si te sirve:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program mayor_menor;
 
uses
  Math;
 
var
  nums: array of integer;
  numTemp, i: integer;
begin
  Write('Introduce un numero (para terminar escribe un 0): ');
  readln(numTemp);
  while numTemp > 0 do
  begin
    i := High(nums) + 1;
    SetLength(nums, i + 1);
    nums[i] := numTemp;
    Write('Introduce un numero (para terminar escribe un 0): ');
    readln(numTemp);
  end;
  writeln('El mayor numero es: ', MaxValue(nums));
  writeln('El menor numero es: ', MinValue(nums));
  readln;
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