16 octubre, 2018

La estructura de selección simple if

La estructura de selección simple if

Continuando con el tema de estructuras secuenciales en Java. Hoy veremos el uso de la estructura de selección simple If, el cual nos va a permitir crear programas que resuelvan problemas que involucren tomas de decisiones. 

Así, en el tema de hoy vamos a diseñar algoritmos en pseudocódigo y en Java que permitan resolver problemas que involucren tomas de decisión haciendo uso de la estructura de selección simple if.




En el tema anterior habíamos visto el uso de las estructuras de secuencia.

Todo esto es como una sopita donde le vamos poniendo ingredientes para que el resultado nos quede cada vez mejor.

Estos posts te servirán tanto si estás empezando de cero en el mundo de la programación, si eres estudiante de primer año y necesitas reforzar algunos temas, o si eres un curioso que le entró las ganas de aprender a programar. Sea el motivo que fuese por lo que estás aquí, te invito a seguir esta serie de publicaciones que estaré realizando, en donde aprenderás con los temas que te vaya enseñando lo básico de la programación para que puedas realizar tú mismo tus propios programas.

¡Bienvenido!

¿Qué es la estructura de selección simple if?


La estructura de selección simple if, es una estructura que permite evaluar una condición lógica. Si dicha condición a evaluar resultase ser verdadera, el programa ejecutará una determinada acción, la cual puede ser una acción simple o una acción compuesta (simple porque solo ejecuta una acción y compuesta porque ejecuta un bloque de acciones).

En el siguiente gráfico podemos observar el diagrama de flujo de la estructura de selección simple if. En ella, se puede apreciar que, si la condición a evaluar resulta ser verdadera, ejecutará la acción “acciona” y cuando termine de ejecutar dicha acción o para el caso de que sea falsa, continuará con la siguiente instrucción del programa.

Diagrama de flujo de la estructura de selección simple if

En la tabla que sigue se muestra el código y el pseudocódigo de la estructura de selección simple if. Note que en el caso de bloques de acciones, estas deben estar encerradas entre llaves de bloque { }.

Código y Pseudocódigo de la estructura de selección if

Antes de empezar con los ejercicios debemos recordar cuáles son los operadores lógicos.

Operadores lógicos

Tabla de verdad de los operadores lógicos

Ahora vamos a poner en práctica lo aprendido a través de unos ejemplos.

Ejemplos


Problema 1


Una tienda vende un producto a precios unitarios que dependen de la cantidad de unidades adquiridas de acuerdo a la siguiente tabla:


Adicionalmente, si el cliente adquiere más de 50 unidades la tienda le descuenta el 15% del importe de la compra; en caso contrario, sólo le descuenta el 5%.

Diseñe un programa que determine el importe de la compra, el importe del descuento y el importe a pagar por la compra de cierta cantidad de unidades del producto.

Algoritmo

Inicio
   // Declaración de variables
   entero unidades
   real impcom, impdes, imppag
   // Entrada de datos
   Leer unidades
   // Cálculo del importe de la compra
   si( unidades >= 1 && unidades <= 25 )
       impcom = unidades*27.5
   si( unidades >= 26 && unidades <= 50 )
       impcom = unidades*25.5
   si( unidades >= 51 && unidades <= 75 )
       impcom = unidades*23.5
   si( unidades >= 76)
       impcom = unidades*21.5
   // Cálculo del importe del descuento
   si( unidades > 50 )
       impdes = 0.15*impcom
   si( unidades <= 50 )
       impdes = 0.05*impcom
   // Calcula el importe a pagar
   imppag = impcom - impdes;
   // Salida de resultados
   Imprimir impcom, impdes, imppag
Fin


Programa


Código Fuente

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Problema01 extends JApplet implements ActionListener {
 // Declaración de variables
 
 JLabel lblUnidades;
 JTextField txtUnidades;
 JButton btnProcesar, btnBorrar;
 JTextArea txtArea;
 JScrollPane scpScroll;
 
 //--------------------------------------------------------------------------
 // Crea la interfaz gráfica de usuario 
 public void init() {

  getContentPane().setLayout(null);
  
  lblUnidades = new JLabel("Unidades:");
  lblUnidades.setBounds(15,15,100,25);
  getContentPane().add(lblUnidades);
  
  txtUnidades = new JTextField();
  txtUnidades.setBounds(100,15,100,25);
  getContentPane().add(txtUnidades);
  
  btnProcesar = new JButton("Procesar");
  btnProcesar.setBounds(320,15,100,25);
  btnProcesar.addActionListener(this);
  getContentPane().add(btnProcesar);
  
  btnBorrar = new JButton("Borrar");
  btnBorrar.setBounds(220,15,100,25);
  btnBorrar.addActionListener(this);
  getContentPane().add(btnBorrar);
  
  txtArea = new JTextArea();
  txtArea.setFont(new Font("monospaced",0,12));
  
  scpScroll = new JScrollPane(txtArea);
  scpScroll.setBounds(15,55,405,150);
  getContentPane().add(scpScroll); 
 
 }
 
 //--------------------------------------------------------------------------
 // Procesa eventos de tipo ActionEvent
 public void actionPerformed( ActionEvent e ){
  
  // Si hizo clic en Procesar
  if (e.getSource() == btnProcesar){
   // Declaración de Variables
   int unidades;
   double icompra=0, idescuento=0, ipagar;
   
   // Entrada de Datos
   unidades = Integer.parseInt(txtUnidades.getText());
   
   // Cálcular el Importe de la Compra
   if (unidades >= 1 && unidades <=25)
    icompra = 27.7 * unidades;
   if (unidades >= 26 && unidades <= 50)
    icompra = 25.5 * unidades;
   if (unidades >= 51 && unidades <= 75)
    icompra = 23.5 * unidades;
   if (unidades >= 76)
    icompra = 21.5 * unidades;
   
   // Cálcular el Importe de Descuento
   if (unidades > 50)
    idescuento = 0.15 * icompra;
   if (unidades <= 50)
    idescuento = 0.05 * icompra; 
   
   // Cálcular el importe a pagar
   ipagar = icompra - idescuento;
   
   // Salida de Resultados
   txtArea.setText("Resultado" + "\n");
   txtArea.append("Importe de la Compra: " + icompra + "\n");
   txtArea.append("Importe de Descuento: " + idescuento + "\n");
   txtArea.append("Importe a Pagar: " + ipagar + "\n");
  }
  
  // Si hizo clic en Borrar
  if (e.getSource() == btnBorrar){
   txtUnidades.setText("");
   txtArea.setText("");
   txtUnidades.requestFocus();
  }

 }
 
}

Problema 2


Diseñe un algoritmo que determine la clasificación de un ángulo dado en grados, minutos y segundos. Asuma que el ángulo está en el intervalo de 0º a 360º.

Recordar que

1° = 60m
1m = 60s

Los ángulos de clasifican de la siguiente manera:


Algoritmo

Inicio
   // Declaración de variables
   entero grados, minutos, segundos
   real beta
   cadena tipo
   // Entrada de datos
   Leer grados, minutos, segundos
   // Determina el ángulo en grados
   beta = grados + minutos/60.0 + segundos/3600.0
   // Determina el tipo de ángulo
   si( beta == 0 )
       tipo = "Nulo"
   si( beta > 0 && beta < 90 )
       tipo = "Agudo"
   si( beta == 90 )
       tipo = "Recto"
   si( beta > 90 && beta < 180 )
       tipo = "Obtuso"
   si( beta == 180 )
       tipo = "Llano"
   si( beta > 180 && beta < 360 )
       tipo = "Cóncavo"
   si( beta == 360 )
       tipo = "Completo"
   // Salida de resultados
   Imprimir tipo
Fin


Programa


Código Fuente



Problema 3


El promedio final de un curso se obtiene en base al promedio simple de tres prácticas calificadas. Para ayudar a los alumnos, el profesor del curso ha prometido incrementar en dos puntos la nota de la tercera práctica calificada, si es que esta es no menor que 10. Diseñe un programa que determine el promedio final de un alumno conociendo sus tres notas. No use operadores lógicos en la solución y considere que la nota máxima es 20.

Algoritmo

Inicio
   // Declaración de variables
   real p1, p2, p3, promedio
   // Entrada de datos
   Leer p1, p2, p3
   // Si amerita, añade 2 puntos a p3
   si( p3 >= 10 ){
       p3 = p3 + 2
   si( p3 > 20 )
       p3 = 20
   }
   // Determina el promedio
   promedio = (p1+p2+p3)/3
   // Salida de resultados
   Imprimir promedio
Fin


Programa


Código Fuente

package problemas_resueltos;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Problema03 extends JApplet implements ActionListener {
 /**
  * 
  */
 private static final long serialVersionUID = 254312975026128672L;
 
 // Declaración de variables
 JLabel lblNota1, lblNota2, lblNota3;
 JTextField txtNota1, txtNota2, txtNota3;
 JButton btnProcesar, btnBorrar;
 JTextArea txtArea;
 JScrollPane scpScroll;
 
 //--------------------------------------------------------------------------
 // Crea la interfaz gráfica de usuario 
 public void init() {

  getContentPane().setLayout(null);
  
  lblNota1 = new JLabel("Nota1:");
  lblNota1.setBounds(15,15,100,25);
  getContentPane().add(lblNota1);
  
  lblNota2 = new JLabel("Nota2:");
  lblNota2.setBounds(15,45,100,25);
  getContentPane().add(lblNota2);
  
  lblNota3 = new JLabel("Nota3:");
  lblNota3.setBounds(15,75,100,25);
  getContentPane().add(lblNota3);
  
  txtNota1 = new JTextField();
  txtNota1.setBounds(100,15,100,25);
  getContentPane().add(txtNota1);
  
  txtNota2 = new JTextField();
  txtNota2.setBounds(100,45,100,25);
  getContentPane().add(txtNota2);
  
  txtNota3 = new JTextField();
  txtNota3.setBounds(100,75,100,25);
  getContentPane().add(txtNota3);
  
  btnProcesar = new JButton("Procesar");
  btnProcesar.setBounds(320,15,100,25);
  btnProcesar.addActionListener(this);
  getContentPane().add(btnProcesar);
  
  btnBorrar = new JButton("Borrar");
  btnBorrar.setBounds(320,45,100,25);
  btnBorrar.addActionListener(this);
  getContentPane().add(btnBorrar);
  
  txtArea = new JTextArea();
  txtArea.setFont(new Font("monospaced",0,12));
  
  scpScroll = new JScrollPane(txtArea);
  scpScroll.setBounds(15,105,405,100);
  getContentPane().add(scpScroll);
  
 }

 //--------------------------------------------------------------------------
 // Procesa eventos de tipo ActionEvent
 public void actionPerformed( ActionEvent e ){
  
  // Si hizo clic en Procesar
  if (e.getSource() == btnProcesar){
   // Declaración de Variables
   double n1, n2, n3, promedio;
   
   // Entrada de Datos
   n1 = Double.parseDouble(txtNota1.getText());
   n2 = Double.parseDouble(txtNota2.getText());
   n3 = Double.parseDouble(txtNota3.getText());
   
   // Si amerita, añade 2 puntos a la n3
   if (n3 >= 10) {
    n3 = n3 + 2;
    if (n3 >= 20)
     n3 = 20;
   }
   
   // Determina el promedio
   promedio = (n1 + n2 + n3) / 3;
   
   // Salida de Resultados
   txtArea.setText("Promedio Final: " + promedio);
  }
  
  // Si hizo clic en Borrar
  if (e.getSource() == btnBorrar){
   txtNota1.setText("");
   txtNota2.setText("");
   txtNota3.setText("");
   txtArea.setText("");
   txtNota1.requestFocus();
  }
  
 }
}

Problema 4


Diseñe un programa que lea un número natural de cuatro cifras y forme el mayor número posible de dos cifras usando la cifra mayor y la cifra menor del número ingresado.

Algoritmo

Inicio
   // Declaración de variables
   entero numero, cunid, cdece, ccent, cmill, cmay, cmen, maynum
   // Entrada de datos
   Leer numero
   // Descompone el número en sus cifras
   cmill = numero/1000
   ccent = numero%1000/100
   cdece = numero%1000%100/10
   cunid = numero%1000%100%10
   // Determina la cifra mayor
   cmay = cmill
   si(ccent > cmay)
      cmay = ccent
   si(cdece > cmay)
      cmay = cdece
   si(cunid > cmay)
      cmay = cunid
   // Determina la cifra menor
   cmen = cmill
   si(ccent < cmen)
      cmen = ccent
   si(cdece < cmen)
      cmen = cdece
   si(cunid < cmen)
      cmen = cunid
   // Forma el mayor número posible con las cifras mayor y menor
   maynum = cmay*10+cmen
   // Salida de resultados
   Imprimir may, cmen, maynum
Fin


Programa



Código Fuente

package problemas_resueltos;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Problema04 extends JApplet implements ActionListener {
 
 /**
  * 
  */
 private static final long serialVersionUID = 8414169895917254255L;
 
 // Declaración de variables
 JLabel lblNumero;
 JTextField txtNumero;
 JButton btnProcesar, btnBorrar;
 JTextArea txtArea;
 JScrollPane scpScroll;
 
 //--------------------------------------------------------------------------
 // Crea la interfaz gráfica de usuario 
 public void init() {

  getContentPane().setLayout(null);
  
  lblNumero = new JLabel("Número:");
  lblNumero.setBounds(15,15,100,25);
  getContentPane().add(lblNumero);
  
  txtNumero = new JTextField();
  txtNumero.setBounds(100,15,100,25);
  getContentPane().add(txtNumero);
  
  btnProcesar = new JButton("Procesar");
  btnProcesar.setBounds(320,15,100,25);
  btnProcesar.addActionListener(this);
  getContentPane().add(btnProcesar);
  
  btnBorrar = new JButton("Borrar");
  btnBorrar.setBounds(220,15,100,25);
  btnBorrar.addActionListener(this);
  getContentPane().add(btnBorrar);
  
  txtArea = new JTextArea();
  txtArea.setFont(new Font("monospaced",0,12));
  
  scpScroll = new JScrollPane(txtArea);
  scpScroll.setBounds(15,55,405,150);
  getContentPane().add(scpScroll);
  
 }
 
 //--------------------------------------------------------------------------
 // Procesa eventos de tipo ActionEvent
 public void actionPerformed( ActionEvent e ){

  // Si hizo clic en Procesar
  if (e.getSource() == btnProcesar){
   // Declaración de Variables
   int numero, m, c, d, u, cmayor, cmenor, maynum;
   
   // Entrada de Datos
   numero = Integer.parseInt(txtNumero.getText());
   
   // Descomponer el numero en cifras
   m = numero / 1000;
   c = numero % 1000 / 100;
   d = numero % 1000 % 100 / 10;
   u = numero % 1000 % 100 % 10;
   
   // Obtener cifra mayor
   cmayor = m;
   if (c > cmayor)
    cmayor = c;
   if (d > cmayor)
    cmayor = d;
   if (u > cmayor)
    cmayor = u;
    
   // Obtener cifra menor
   cmenor = m;
   if (c < cmenor)
    cmenor = c;
   if (d < cmenor)
    cmenor = d;
   if (u < cmenor)
    cmenor = u;
  
   // Forma el mayor número posible con las cifras mayor y menor
   maynum = cmayor * 10 + cmenor;
   
   // Salida de Resultados
   txtArea.setText("La cifra mayor es: " + cmayor + "\n");
   txtArea.append("La cifra menor es: " + cmenor + "\n");
   txtArea.append("Mayor número formado: " + maynum);
  }
  
  // Si hizo clic en Borrar
  if (e.getSource() == btnBorrar){
   txtNumero.setText("");
   txtArea.setText("");
   txtNumero.requestFocus();
  }

 }

}

Problema 5


En un estacionamiento, se cobra S/. 2.5 por hora o fracción de hora. Dado el tiempo de estacionamiento de un vehículo expresado en el formato HH:MM, determine el importe a pagar por concepto de estacionamiento.

Algoritmo

Inicio
   // Declaración de variables
   entero horas, minutos
   real importe
   // Entrada de datos
   Leer horas, minutos
   // Si hay una fracción de hora, se cobra una hora adicional
   si( minutos > 0 )
       horas = horas+1
   // Determina el importe a pagar
      importe = horas*2.5
   // Salida de resultados
   Imprimir horas, importe
Fin


Programa


Código Fuente

package problemas_resueltos;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Problema05 extends JApplet implements ActionListener{
 
 /**
  * 
  */
 private static final long serialVersionUID = 1L;
 
 // Declaración de variables
 JLabel lblHoras, lblMinutos;
 JTextField txtHoras, txtMinutos;
 JButton btnProcesar, btnBorrar;
 JTextArea txtS;
 JScrollPane scpScroll;
 
 // Crea la interfaz gráfica de usuario
 public void init() {
  
  getContentPane().setLayout(null);
  
  lblHoras = new JLabel("Horas:");
  lblHoras.setBounds(15, 15, 90, 23);
  getContentPane().add(lblHoras);
  
  lblMinutos = new JLabel("Minutos:");
  lblMinutos.setBounds(15, 39, 90, 23);
  getContentPane().add(lblMinutos);
  
  txtHoras = new JTextField();
  txtHoras.setBounds(105, 15, 120, 23);
  getContentPane().add(txtHoras);
  
  txtMinutos = new JTextField();
  txtMinutos.setBounds(105, 39, 120, 23);
  getContentPane().add(txtMinutos);
  
  btnProcesar = new JButton("Procesar");
  btnProcesar.setBounds(320, 15, 100, 23);
  btnProcesar.addActionListener(this);
  getContentPane().add(btnProcesar);
  
  btnBorrar = new JButton("Borrar");
  btnBorrar.setBounds(320, 39, 100, 23);
  btnBorrar.addActionListener(this);
  getContentPane().add(btnBorrar);
  
  txtS = new JTextArea();
  txtS.setFont(new Font("monospaced", 0, 12));
  
  scpScroll = new JScrollPane(txtS);
  scpScroll.setBounds(15, 77, 405, 130);
  getContentPane().add(scpScroll);
  
 }

 // Procesa eventos de tipo ActionEvent
 public void actionPerformed( ActionEvent e ){
  
  // Si se hizo clic en Procesar
  if( e.getSource() == btnProcesar ){
   // Declaración de variables
   int horas, minutos;
   double importe;
   
   // Entrada de datos
   horas = Integer.parseInt(txtHoras.getText());
   minutos = Integer.parseInt(txtMinutos.getText());
   
   // Si hay una fracción de hora, se cobra una hora adicional
   if( minutos > 0 )
    horas = horas+1;
   
   // Determina el importe a pagar
   importe = horas*2.5;
   
   // Salida de resultados
   txtS.setText("Número de horas a pagar : " + horas + "\n");
   txtS.append ("Importe a pagar : " + importe);
  }
  
  // Si se hizo clic en Borrar
  if( e.getSource() == btnBorrar ){
   txtHoras.setText("");
   txtMinutos.setText("");
   txtS.setText("");
   txtHoras.requestFocus();
  }
  
 }

}

Recuerda que...


- Colocar un ; al final de la condición de un if hace que la acción del if sea nula.
- Si el cuerpo de un if incluye varias acciones simples, estas deben ir encerradas entre llaves de bloque { }.

Descargar ejercicios resueltos


 Descargar archivo

Puedes completar lo aprendido asistiendo el material en video.

   Clic aquí

¡Acabas de ver el tema  La estructura de selección simple if del curso de Introducción a la Algoritmia y a la programación en Java! ¡Fácil verdad! Ir al índice


Asimismo, si deseas saber más acerca de estos temas, recuerda que puedes comprar la guía completa con todos los temas, ejercicios, evaluaciones resueltas, proyectos y más; para ello, tienes que ingresar al siguiente enlace. Y si eres seguidor de la comunidad Aprendec puedes acceder a un descuento del -%32.

¡Quiero esto!
¡Qué pases un buen día!

No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!