Ayuda con un programita

Tengo una duda con el siguiente programa, específicamente se trata de ingresar 3 números, donde si n1 es mayor a n2 los reste, si n1 es menor a n2, los sume, y si son iguales los multiplique, el problema esta en que cuando ingreso los números iguales, me los suma y multiplica, estoy recién en esto, abajo va el programa escrito.
Gracias.
program ejer2guia;
uses
wincrt;
var
N1,N2,rest,mult,sum:integer;
resp:char;
begin
resp:='s';
while (resp='S') or(resp='s') do
begin
writeln('INGRESE N1:');
readln(N1);
writeln('INGRESE N2:');
readln(N2);
if N1>N2 then
begin
rest:=N1-N2;
writeln('LA DIFERENCIA ENTRE N1 Y N2 ES:',rest);
end
else
begin
sum:=N1+N2;
writeln('LA SUMA ENTRE N1 Y N2 ES:',sum);
end;
if N1=N2 then
begin
mult:=N1*N2;
writeln('LA MULTIPLICACION ENTRE N1 Y N2 ES:',mult);
end;
writeln ('');
writeln ('');
writeln('DESEA SEGUIR INGRESANDO MAS DATOS:(S/N)');
readln(resp);
end
end.
1

1 Respuesta

13.400 pts.
El problema es que estas utilizando dos estructuras condicionales (IF) separadas: la primera con su correspondiente ELSE y la otra solo para verificar si son iguales. Al hacer esto, el programa ejecuta las dos estructuras y ese es el problema.
Te explico:
Ingresas N1=4 y N2=4.
Al entrar en la primera condicional no cumple la condición por lo tanto se va por el ELSE y eso hace que los sume.
Pero luego esta la otra condicional y entonces, como son iguales, obedientemente los multiplique.
La solución es que priorices las condiciones: desde la más limitante hasta la menos.
Por ejemplo:
If N1 = N2 then
---> Hacer que se multipliquen
ElseIf N1 > N2 then
---> Hacer que se resten
Else
---> Hacer que se sumen
De este modo, solo habrá un camino por el cual seguirá el código. Por eso se les llama a estas estructuras de control de flujo junto con las repetitivas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas