Necesito que un experto me ayude a detectar un error en este código con la sentencia IF

Necesito que un experto en visual fox me ayude a detectar el error en un programa, el programa se traba de ingresar tres promedios y el programa debe mostrar el más alto, utilizando la sentencia "IF". El programa no funciona bien porque cuando el promedio mayor es el tercero muestra el segundo mayor.
El programa lo estructure así:
"*Programa de promedio general
store 0 to a,b,c
clear
@5,10 say "Ingrese primer promedio: " get a
@6,10 say "Ingrese segundo promedio: " get b
@7,10 say "Ingrese tercer promedio: " get c
read
If a>b then
@8,10 say "El mas alto es: " +str(a)
else
If a>c then
@8,10 say "El mas alto es: " +str(a)
else
If b>a then
@8,10 say "El mas alto es: " +str(b)
else
If b>c then
@8,10 say "El mas alto es: " +str(b)
else
If c>a then
@8,10 say "El mas alto es: " +str(c)
else
If c>b then
@8,10 say "El mas alto es: " +str(C)
Endif
Endif
Endif
Endif
Endif
Endif
return"
Espero que alguien pueda ayudarme a detectar el error.

1 respuesta

Respuesta
1
Creo que una explicación en pseudocódigo quedará más clara:
El procedimiento dice;
- Si(1) A es mayor que B entonces A
- Si No, Si(2) A es mayor que C entonces A
- Si No, Si(3) B es mayor que A entonces B
- Si No, Si(4) B es mayor que C entonces B
- Si No; Si(5) C es mayor que A entonces C
- Si No; Si(6) C es mayor que B entonces C
- Fin Si(6)
- Fin Si(5)
- Fin Si(4)
- Fin Si(3)
- Fin Si(2)
- Fin Si(1)
Podemos probar con:
A = 5
B = 6
C = 4
En Si(1) (a>b) no se cumple, por lo que entra en Si(2) (a>c) y allí se detiene, porque la condición se cumple, pero no es el resultado esperado porque en realidad B es el mayor.
En el caso que dos valores sean iguales también tiene problemas.
Un nuevo planteamiento resuelve el problema:
- Si(1) [A es mayor o igual que B] y [A es mayor o igual que C] entonces A
- Si No, Si(2) [B es mayor o igual que A] y [B es mayor o igual que C] entonces B
- En cualquier otro caso, entonces C
- Fin Si(2)
- Fin Si(1)
Y en código de VFP:
store 0 to a,b,c
clear
@5,10 say "Ingrese primer promedio: " get a
@6,10 say "Ingrese segundo promedio: " get b
@7,10 say "Ingrese tercer promedio: " get c
read
if a>=b .and. a>=c then
@8,10 say "El mas alto es: " +str(a)
elseif b>=a .and. b>=c then
@8,10 say "El mas alto es: " +str(b)
else
@8,10 say "El más alto es: " +str(c)
Endif

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas