domingo, 30 de octubre de 2011

CONTROL DE FLUJO CONDICIONALES

Condicionales simples (IF)

En programación, una sentencia condicional es una instrucción o grupo de instrucciones que se pueden ejecutar o no en función del valor de una condición.
Los tipos más conocidos de setencias condicionales son el SI..ENTONCES (if..then), el SI..ENTONCES..SI NO (if..then..elsA) y el SEGÚN (case o switch), aunque también podríamos mencionar al lanzamiento de errores como una alternativa más moderna para evitar el "anidamiento" de sentencias condicionales.
Las sentencias condicionales constituyen, junto con los bucles, los pilares de la programación estructurada, y su uso es una evolución de una sentencia en lenguaje ensamblador que ejecutaba la siguiente línea o no en función del valor de una condición.


Condicionales dobles (IF/ELSE)

Existen las sentencias condicionales simples, que son aquellas que sólo se forman con un if, las condicionales compuestas, formadas con un if y un else asociado a ese if, y las anidadas que consisten en que dentro de una sentencia ifpodemos colocar otra sentencia if. Estas anidaciones se utilizan para crear programas donde se evalúan expresiones complejas.
Para que veas como funcionan los if anidados voy a ponerte varios ejemplos empezando desde lo más simple hasta lo más complejo y voy a marcarte cómo el compilador evalúa dichos ejemplos.
Comenzamos con las sentencias condicionales simples, que son las que sólo utiliza un if:
1  if (num==5){
2 sentencia1;
3 sentencia 2;
4 }
En esta condición el compilador actúa de la siguiente manera, el compilador llega a la línea 1, y evalúa la expresión num==5; si es cierta entra y realiza las sentencia1 y la sentencia 2, si es falsa se salta las lineas 2,3 y 4 y continua con el programa.



Expresiones de comparación

Una expresión es una serie de variables, operadores y llamadas a métodos (construida conforme a la sintaxis del lenguaje) que se evalúa a un único valor.
Como se ha discutido en el apartado anterior de operadores, los operadores devuelven un valor, por lo que el uso de un operador es una expresión. Por ejemplo, la siguiente sentencia del método CuentaChars es una expresión:
contador ++;
Esta expresión en particular se evalúa al valor de contador antes de que la operación ocurra.
El tipo de datos del valor devuelto por una expresión depende de los elementos utilizados en la expresión. La expresión contador ++ devuelve un entero porque ++ devuelve un valor del mismo tipo que su operando y contador es un entero. Otras expresiones devuelven valores booleanos, cadenas, etc.
El método CuentaChars contiene, además de contador ++, otras expresiones como esta:
in.read( ) != -1
Esta expresión es interesante porque se compone de dos expresiones. La primera expresión es una llamada a un método:
in.read( )
Una expresión de llamada a un método se evalúa al valor de retorno del método; así el tipo de dato de la expresión de llamada a un método es el mismo que el tipo de dato del valor de retorno de ese método. El método in.read ha sido declarado para devolver un entero, por lo que la expresión in.read se evalúa a un entero.
La segunda expresión contenida en la sentencia in.read ( ) != -1 utiliza el operador !=. Dicho operador comprueba si dos operandos son distintos. En la sentencia en cuestión, los operandos son in.read y -1. in.read es un operador válido para != porque in.read es una expresión y se evalúa a un entero. Por ello in.read ( ) != -1 compara dos enteros, el valor devuelto por in.read ( ) y -1. El valor devuelto por != es verdadero o falso dependiendo del resultado de la comparación.
Como se puede observar, Java permite construir expresiones compuestas y sentencias a partir de varias expresiones más pequeñas con tal que los tipos de datos requeridos por una parte de la expresión concuerden con los tipos de datos de la otra. Además el orden en el que una expresión compuesta se evalúa tiene importancia.
 Operadores Lógicos
·         La clase hace uso de los distintos operadores lógicos en Java ; dentro de dicha Clase son definidos tres métodos los cuales retornan un valor boolean en base al numero int que sea empleado como parámetro.
·         Dentro del método principal ( main ) son generadas las siguientes pruebas:
·         La primer declaración utiliza tres elementos para llevar acabo una comparación , este ejemplo demuestra una cualidad lógica llamada corto-circuito;al iniciar el proceso de comparación mediante los elementos && y encontrarse uno de estos falso, se termina la evaluación comparativa, en el caso anterior a pesar que el último elemento es verdadero este no es evaluado debido a que el segundo ya dio como resultado falso.
·         La segunda declaración hace uso del operador || (OR), en este caso debido a que un elemento da como resultado verdadero, toda la declaración resulta verdadera.
·         Finalmente se hace uso del operador de negación (!).
              Ejercicios de aplicación
1.      Dado la edad de una persona determinar si es mayor de edad o menor de edad, considere que mayor de edad es mayor o igual a 18.
                                 importjava.util.Scanner;
                  publicclass ejercicio_1 {
                      /**
                    * @paramargs
                        */
                  publicstaticvoid main(String[] args) {
            // TODO Auto-generated method stub
            //VARIABLES
            int e;
            String r="";
            //ENTRADA
            Scanner teclado = new Scanner (System.in);
            System.out.print("Edad:");
            e=teclado.nextInt();
            //PROCESO
            if(e>=18){
                  r="MAYOR DE EDAD";
            }
            if(e<18){
                  r="MENOR DE EDAD";
            }
            //SALIDA
            System.out.println("");
            System.out.println("PERSONA:"+r);
                      }
                  }


2.       Dados dos números enteros, devolver el numero menor.
importjava.util.Scanner;
publicclass EJERCICIO_2 {
      /**
      * @paramargs
       */
      publicstaticvoid main(String[] args) {
            // TODO Auto-generated method stub
            //VARIABLES
            int N1,N2;
                 
            //ENTRADA
            Scanner teclado = new Scanner (System.in);
            System.out.print("PRIMER NUMERO:");
            N1=teclado.nextInt();
            System.out.print("SEGUNDO NUMERO:");
            N2=teclado.nextInt();
            //PROCESO
            if(N1>N2)System.out.println("EL NUMERO MENOR ES:"+N2);
            elseSystem.out.println("EL NUMERO MENOR ES:"+N1);         
      }
}
3.      Dado dos números determinar si son iguales o son diferentes.
importjava.util.Scanner;
publicclass Propuesto3 {
      /**
       * @paramargs
       */
      publicstaticvoid main(String[] args) {
            // TODO Auto-generated method stub
            //VARIABLES
            int A,B;
            String R;
//ENTRADA
            Scanner teclado=newScanner(System.in);
            System.out.print("PRIMER NUMERO:");
            A=teclado.nextInt();
            System.out.print("SEGUNDO NUMERO:");
            B=teclado.nextInt();
           
//PROCESO
            if (A==B){
                  R="IGUALES";
            }else{
                  R="DIFERENTES";
            }
//SALIDA
            System.out.println("");
            System.out.println("SON:"+R);     
      }
}
4.      Dado un numero entero, devolver el doble del numero si el numero es positivo, el triple del numero si es negativo, y cero si el numero es neutro.
importjava.util.Scanner;
publicclass PROPUESTO_4 {
      /**
       * @paramargs
       */
      publicstaticvoid main(String[] args) {
            // TODO Auto-generated method stub
            //VARIABLES
            int A,R;
           
//ENTRADA
            Scanner teclado=newScanner(System.in);
            System.out.print("ESCRIBIR NUMERO:");
            A=teclado.nextInt();
           
            //PROCESO
            if (A>0){
                  R=A*2;
            }else{
            if (A<0){
                  R=A*3;
            }else{
                  R=0;
            }
            }
//SALIDA
            System.out.println("");
            System.out.println("RESULTADO:"+R);
            }
      }
5.      Crear un programa que al ingresar tres números enteros, devuelva los números ordenados en forma ascendente y en forma descendente.
importjava.util.Scanner;
publicclass PROPUESTO_5 {

      /**
       * @paramargs
       */
      publicstaticvoid main(String[] args) {
            // TODO Auto-generated method stub
            //VARIABLES
            int A,B,C,MAYOR=0,INTERMEDIO=0,MENOR=0;
           
            //ENTRADA
            Scanner teclado=newScanner(System.in);
            System.out.print("PRIMER NUMERO:");
            A=teclado.nextInt();
            System.out.print("SEGUNDO NUMERO:");
            B=teclado.nextInt();
            System.out.print("TERCER NUMERO:");
            C=teclado.nextInt();
           
            //PROCESO
            if (A>B && A>C){
                  MAYOR=A;
            }else{
            if (B>A && B>C){
                  MAYOR=B;
            }else{
                  MAYOR=C;
            }
            }
            if(A<B &&A<C){
                  MENOR=A;
            }else{
            if (B<A&&B<C){
                  MENOR=B;
            }else{
                  MENOR=C;
                  }
            }
            INTERMEDIO=(A+B+C)-(MAYOR + MENOR);
           
            //SALIDA
            System.out.println("");
            System.out.println("ORDEN DESCENDENTE:");
            System.out.println("MAYOR:"+MAYOR);
            System.out.println("INTERMEDIO:"+INTERMEDIO);
            System.out.println("MENOR:"+MENOR);
            System.out.println("ORDEN ASCENDENTE:");
            System.out.println("MENOR:"+MENOR);
            System.out.println("INTERMEDIO:"+INTERMEDIO);
            System.out.println("MAYOR:"+MAYOR);
      }
}
6.      Después de ingresar 4 notas, obtener el promedio de las tres mejores notas y el mensaje Aprobado si el promedio es mayor o igual a 11, caso contrario Desaprobado.
importjava.util.Scanner;
publicclass Propuesto16 {
      /**
       * @paramargs
       */
      publicstaticvoid main(String[] args) {
            // TODO Auto-generated method stub
            //VARIABLES
            int A,B,C,D,PROMEDIO=0;
            String M;
            //ENTRADA
            Scanner teclado=newScanner(System.in);
            System.out.print("PRIMERA NOTA:");
            A=teclado.nextInt();
            System.out.print("SEGUNDA NOTA:");
            B=teclado.nextInt();
            System.out.print("TERCERA NOTA:");
            C=teclado.nextInt();
            System.out.print("CUARTA NOTA:");
            D=teclado.nextInt();
            //PROCESO
            if(A<B &&A<C && A<D){
                  PROMEDIO=(B+C+D)/3;
            }else{
                  if (B<A&&B<C && B<D){
                       PROMEDIO=(A+C+D)/3;
                  }else{
                       if (C<A&&C<B && C<D){
                             PROMEDIO=(A+B+D)/3;
                       }else{
                             PROMEDIO=(A+B+C)/3;
                       }
                  }
            }
            if(PROMEDIO>=11){
                  M="APROBADO";
            }else{
                  M="DESAPROBADO";
            }
            //SALIDA
            System.out.println("");
            System.out.println("RESULTADO:"+PROMEDIO);
            System.out.println("MENSAJE:"+M);
      }
}
7.      Dados los siguientes datos de entrada: Saldo anterior, tipo de movimiento R (Retiro) o D (Deposito) y monto de la transacción, obtener como dato de Salida el saldo actual.
importjava.util.Scanner;
publicclass Propuesto17 {
      /**
       * @paramargs
       */
      publicstaticvoid main(String[] args) {
            // TODO Auto-generated method stub
            //Variables
            intsa,mt,sactual=0;
            chartm;
            //Entrada
            Scanner teclado = newScanner(System.in);
            System.out.print("IngreseSaldo");
            sa=teclado.nextInt();
            System.out.print("Ingrese el Tipo de Movimiento");
            tm = teclado.next().charAt(0);
            System.out.print("IngreseMonto");
            mt=teclado.nextInt();
            //Proceso
            if(tm=='R'){
                  sactual = sa - mt;
            }else{
                  if(tm=='D'){
                       sactual = sa + mt;
                  }
            }
            //Salida
            System.out.println("");
            System.out.print("Es: "+sactual);
            }
      }
8.      Dado 2 números enteros a y b, determinar cual es mayor con respecto al otro.
importjava.util.Scanner;
publicclass Propuesto18 {
      /**
       * @paramargs
    */
      publicstaticvoid main(String[] args) {
            // TODO Auto-generated method stub
            //VARIABLES
            int A,B;
            String C = "";
            //ENTRADA
            Scanner teclado=newScanner(System.in);
            System.out.print("Primer Numero:");
            A=teclado.nextInt();
            System.out.print("Segundo Numero:");
            B=teclado.nextInt();
            //PROCESO
            if(A>B){
                  C = "A Es Mayor que B";
            }else{
                  if(B>A){
                     C = "B Es Mayor que A";
                  }
            }
            if(A==B){
                  C = "A Es igual a B";
                  }
            //SALIDA
            System.out.println("");
            System.out.println("RESULTADO: " +C);
      }
}
9.      Dado 3 longitudes, diga si forma un triángulo.
TEOREMA: En cada triangulo, cada lado es menor que la suma de los otros dos, pero mayor que su diferencia.
importjava.util.Scanner;
publicclass Propuesto20 {
      /**
       * @paramargs
       */
      publicstaticvoid main(String[] args) {
            // TODO Auto-generated method stub
            //VARIABLES
            inta,b,c;
            String T = "";
            //ENTRADA
            Scanner teclado=newScanner(System.in);
            System.out.print("PrimeraLongitud:");
            a=teclado.nextInt();
            System.out.print("SegundaLongitud:");
            b=teclado.nextInt();
            System.out.print("TerceraLongitud:");
            c=teclado.nextInt();
            //PROCESO
            if(a==b&&b==c && c==a){
                  T = "Equilátero";
            }else{
                  if(a==b&&b==a && a!=c &&b!=c && c!=a && c!=b){
                       T = "Isosceles";
                  }else{
                       if(a!=b&&b!=c && c!=a){
                             T = "Escaleno";
                       }
                  }
            }
            //SALIDA
            System.out.println("");
            System.out.println("El Triangulo Es: " +T);
      }
}
10.  Dado 3 longitudes, si forma un triangulo devolver el tipo de triangulo según sus lados.
T. Equilátero: Sus 3 lados son iguales.
T. Isósceles: 2 lados son iguale.
T. Escaleno: 3 lados diferentes.
importjava.util.Scanner;
publicclass PROPUESTO_10 {

      /**
       * @paramargs
       */
      publicstaticvoid main(String[] args) {
            // TODO Auto-generated method stub
            //VARIABLES
            inta,b,c;
            String r="";
            //ENTRADA
            Scanner teclado=newScanner(System.in);
            System.out.print("MEDIDA DE PRIMER LADO:");
            a = teclado.nextInt();
            System.out.print("MEDIDA DE SEGUNDO LADO:");
            b = teclado.nextInt();
            System.out.print("MEDIDA DE TERCER LADO:");
            c = teclado.nextInt();
            //PROCESO
            if (a<b+c& b<a+c& c<b+a& a>b-c & b>a-c & c>b-a & a>c-b & b>c-a & c>a-b){
            r="ES TRIANGULO";
            }
            //SALIDA
            System.out.println("RESPUESTA : "+r);
                  }
      }

2 comentarios:

  1. EN el problema 10 este seria el codigo:

    import java.util.Scanner;
    public class Propuesto20 {
    public static void main(String[] args) {
    //variables
    int a,b,c;
    String menj="";

    //entrada
    Scanner teclado = new Scanner (System.in);
    System.out.print("Ingrese lado a: ");
    a = teclado.nextInt();
    System.out.print("Ingrese lado b: ");
    b = teclado.nextInt();
    System.out.print("Ingrese lado c: ");
    c = teclado.nextInt();

    //proceso
    if (a == b && b == c && c == a){
    menj = "EQUILATERO";
    }else{
    if(a == b && c!=a && c!=b || b == c && a!=c && a!=b || c==a && b!=a && b!=c ){
    menj = "ISOSCELES";
    }else{
    if (a!=b && b!=c && c!=a ){
    menj = "ESCALENO";
    }
    }
    }

    //SALIDA
    System.out.println("");
    System.out.println("Resultado: " + menj);


    }
    }

    ResponderEliminar