Ayuda con anidaciones IF

      • 14
      • mensajes
      • miembro desde
      • 23/08/07
    #1 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:

    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.
    Pero al compilar me dice:

    (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!
  1. ¿Este tema te pareció interesante? Compártelo!

    ¿No es lo que buscabas? Intenta buscar un tema similar

    7 comentarios / 2806 Visitas

      • 1,673
      • mensajes
      • miembro desde
      • 05/10/07
    10/07/2009
    #2 Re: Ayuda con anidaciones IF

    La sintaxis correcta es “if expr then instr else instr
    donde instr puede ser una instrucción sola o “begin instrs end
    donde instrs son 0 o más instr separadas por “;

    O sea... antes del else no va punto y coma.

      • 120
      • mensajes
      • miembro desde
      • 20/06/08
    10/07/2009
    #3 Re: Ayuda con anidaciones IF

    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):

    Código:
    IF nNum1 > nNum2
    THEN
        IF nNum2>nNum3
        THEN
            Begin
            nNumMayor:=nNum1;
            Writeln('el mayor es: ',nNum1)
            end
        ELSE ..........
    ELSE .............;
    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...
      • 1,673
      • mensajes
      • miembro desde
      • 05/10/07
    10/07/2009
    #4 Re: Ayuda con anidaciones IF
    Cita Escrito por DamiVal Ver mensaje
    todas las expresiones que terminan en "punto y coma" ;
    Ninguna expresión en Pascal termina en punto y coma.
      • 14
      • mensajes
      • miembro desde
      • 23/08/07
    10/07/2009
    #5 Re: Ayuda con anidaciones IF
    Cita Escrito por DamiVal Ver mensaje
    Código:
    IF nNum1 > nNum2
    THEN
        IF nNum2>nNum3
        THEN
            Begin
            nNumMayor:=nNum1;
            Writeln('el mayor es: ',nNum1)
            end
        ELSE ..........
    ELSE .............;
    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...
    si ya sé, las alinié bien, pero, según leí, el ELSE corresponde a el último IF, entonces eso q pusiste vos ahi no andaría :S, o sea los 2 harían caso al último IF


    si estoy equivocado correjime por favor

    gracias a todos!
      • 120
      • mensajes
      • miembro desde
      • 20/06/08
    10/07/2009
    #6 Re: Ayuda con anidaciones IF
    Cita Escrito por pangus Ver mensaje
    Ninguna expresión en Pascal termina en punto y coma.
    me equivoque, quise decir sentencia...

    Cita Escrito por kamikazeee Ver mensaje
    si ya sé, las alinié bien, pero, según leí, el ELSE corresponde a el último IF, entonces eso q pusiste vos ahi no andaría :S, o sea los 2 harían caso al último IF


    si estoy equivocado correjime por favor

    gracias a todos!
    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!
    • max2r
      Invitado
    13/07/2009
    #7 Re: Ayuda con anidaciones IF
    Cita Escrito por kamikazeee Ver mensaje
    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:

    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.
    Pero al compilar me dice:

    (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!
    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
      • 1,673
      • mensajes
      • miembro desde
      • 05/10/07
    13/07/2009
    #8 Re: Ayuda con anidaciones IF
    Cita Escrito por DamiVal Ver mensaje
    me equivoque, quise decir sentencia...
    Sí, lo entendí, y a eso me refería: las sentencias en Pascal no terminan con punto y coma.
IR ARRIBA