Ayuda con anidaciones IF
-
Buenas! Estoy aprendiendo hace poco pascal, y intenté hacer un programa que, cuando el usuario introduce 3 números, saca el mayor y menor y los imprime en pantalla
Yo hize ésto:Pero al compilar me dice:Código:program mayorymenor; var num1 : integer; num2 : integer; num3 : integer; begin write ('introduzca el primer número'); readln (num1); write ('introduzca el segundo número'); readln (num2); write ('introduzca el tercer número'); readln (num3); if num1 > num2 then if num1 > num3 then write ('el mayor es:', num1); if num2 > num3 then write ('el menor es:', num3); else write ('el menor es:', num2); else write ('el mayor es:', num3); write ('el menor es:', num2); else if num2 > num3 then write ('el mayor es:', num2); if num3 > num1 then write ('el menor es:', num1); else write ('el menor es:', num3); else write ('el mayor es:', num3); write ('el menor es:', num1); end.
(23,3) Fatal syntax error, ";" expected but "ELSE" found.
Cuál es mi problema y cómo lo soluciono? :S
Cada else y cada oracion que corresponde a cada if las puse con la misma sangría.
gracias! -
es como dice pangus, la sintaxis es:
IF "condición"
THEN "sentencia simple"
ELSE "sentencia simple"
una sentencia simple ses una única sentencia, por ejemplo asignaciones, otro condicional (IF), una llamada a procedimiento, etc... todas las expresiones que terminan en "punto y coma" ;
si despues de THEN o del ELSE (donde yo puse sentencia simple) vos queres poner MAS DE UNA sentencia simple, tenes que usar un begin y un end;
ejemplo (usando tu codigo):lo que te conviene es usar bien la identacion, es decir, mantener alineados los if-then-else que se corresponden como hice yo arriba, porque te ayuda a entender mejor el codigo y a encontrar mas facilmente el error si es que no anda...Código:IF nNum1 > nNum2 THEN IF nNum2>nNum3 THEN Begin nNumMayor:=nNum1; Writeln('el mayor es: ',nNum1) end ELSE .......... ELSE .............; -
-
me equivoque, quise decir sentencia...
es cierto, cada ELSE se relaciona al IF mas proximo, osea el ultimo IF, pero si el ultimo if ya tiene un ELSE, se lo relaciona al IF anterior que no tenga ELSE...
proba el codigo que puse yo, deberia andar sin problemas, otra cosa que esta mal es poner un "punto y coma" despues de la sentencia del THEN y despues poner el ELSE, si en el IF queres usar el ELSE, despues del THEN no va punto y coma, el punto y coma le indica al compilador que termino el IF, y no te puede relacionar el ELSE con el IF al que daberia relacionarlo...
no se si me exprese bien, espero que me entiendas lo que quise decir, jeje! -
pero antes de meterle mano al codigo aunque sea planeate la solucion mentalmente o en papel. Fijate que el ejercicio que planteas es muy sencillo y no necesita de ningun super anidamiento.
Se plantea lo siguiente: se leen 3 numeros y se debe informar el n° maximo y el n° minimo. no?
entonces lo podes pensar como: usar una variable para los numeros que lees, una para almacenar el minimo y otra para el maximo, y una para el indice del for (porque se leen 3 numeros) y listo nada mas
en codigo seria:Código:program mayor_y_menor; var numero,maximo,minimo,i:integer; begin maximo:=-1; minimo:=999; for i:= 1 to 3 do begin writeln ('Ingrese un numero: '); readln (numero); if ( numero > maximo ) then begin maximo:=numero; end else begin if ( numero < minimo ) then minimo:=numero; end; // end del if end; //end del for writeln ('El nro maximo fue: ', maximo, ', el nro minimo fue: ', minimo); readkey(); end.
Salu2
