Foros del Web » Programación para mayores de 30 ;) » Programación General »

Comenzando a programar: 6d- Condiciones booleanas y selección simple

Estas en el tema de Comenzando a programar: 6d- Condiciones booleanas y selección simple en el foro de Programación General en Foros del Web. Instrucción de selección CASE…ELSE: La instrucción CASE que veremos a continuación podría considerarse como la forma correcta de escribir una enorme cantidad de IF anidados. ...
  #1 (permalink)  
Antiguo 03/11/2011, 10:03
 
Fecha de Ingreso: enero-2011
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 21
Comenzando a programar: 6d- Condiciones booleanas y selección simple

Instrucción de selección CASE…ELSE:

La instrucción CASE que veremos a continuación podría considerarse como la forma correcta de escribir una enorme cantidad de IF anidados. Veamos primero un ejemplo anidando IF en el cual el programa despliega al usuario varias opciones y dependiendo de lo que éste seleccione será lo que hará:

Código:
1  PROGRAM menu;
2
3 Var
4    opcion: char;
5    numero: integer;
6
7 BEGIN
8     writeln('1--> Muestra un mensaje en pantalla');
9     writeln('2--> Ingresar un número');
10    writeln('3--> Ingresar un caracter');
11
12    write('Ingrese una opcion y presione ENTER: ');
13    readln(opcion);
14
15    writeln;
16
17    If opcion='1' then
18       writeln('MENSAJE DESPLEGADO')
19    else
20       if opcion='2' then
21       begin
22          write('Ingrese un número entero: ');
23          readln(numero);
24          writeln('Ha ingresado ',numero,'.');
25       end
26       else
27          if opcion='3' then
29          begin
30             write('Ingrese un caracter: ');
31             readln(opcion);
32             writeln('Ha ingresado ',opcion);
33          end
34          else
35             writeln('ERROR. No existe la opción ',opcion);
36 END.
En este ejemplo volvemos a trabajar con una variable del tipo char, o sea que contendrá caracteres, no una cadena como el tipo string sino uno solo. Esto es por un simple motivo. Al ser del tipo char cualquier símbolo que ingresemos será leído sin problemas. Nosotros mostramos las opciones del menú con números, entonces uno podría decir que para leer la opción que el usuario ingrese podríamos haber declarado una variable integer o real, sin embargo de hacerlo así, si el usuario en vez de ingresar un número ingresa una letra el programa dará un error en tiempo de ejecución al intentar almacenar una letra en una variable numérica y se cerrará. Sin embargo, al ser del tipo char, si el usuario ingresa una letra esta se leerá sin problemas y podremos desplegar al usuario un mensaje de error que indique que ha seleccionado una opción incorrecta, y de ser posible pedirle que lo intente de nuevo.

Notar como en las condiciones de los IF comparamos el carácter leído en la variable opcion con un carácter escribiendo este explísitamente entre comillas simples. Es importante saber que si el usuario ingresa un 1 en su entrada, nosotros leeremos el carácter 1 y NO el número 1. El carácter 1 es como una letra o un símbolo, no es un número que se puede sumar o restar, es un símbolo (ya lo dije antes). Del mismo modo que uno no puede sumar letras, a+b por ejemplo, no se pueden sumar caracteres numéricos. No es lo mismo 1 que ‘1’. El primero es un número y el otro un carácter. ‘1’+’2’ equivale a la cadena ‘12’, y 1+2 es igual a 3. Esta diferencia resulta esencial, es importante que lo comprendan.

No he puesto comentarios en este programa apropósito para que ustedes lo lean y entiendan por sí solos.
Básicamente decimos, si el usuario ingresa el 1 muestra un mensaje, sino, si el usuario ingresa el 2 pide que ingrese un numero y muéstraselo, sino, si el usuario ingresa el 3 pídele que ingrese un carácter y muéstraselo, sino dile que lo que ha ingresado no es una opción correcta.

Ahora veamos el mismo programa usando la instrucción CASE:

Código:
1 PROGRAM menu;
2
3 Var
4     opcion: char;
5     numero: integer;
6
7 BEGIN
8  writeln('1--> Muestra un mensaje en pantalla');
9  writeln('2--> Ingresar un número');
10 writeln('3--> Ingresar un caracter');
11
12 write('Ingrese una opcion y presione ENTER: ');
13 readln(opcion);
14
15 writeln;
16
17 Case opcion of
18 '1': writeln('MENSAJE DESPLEGADO');
19 '2': begin
20         write('Ingrese un número entero: ');
21         readln(numero);
22         writeln('Ha ingresado ',numero,'.');
23      end;
24 '3': begin
25         write('Ingrese un caracter: ');
26         readln(opcion);
27         writeln('Ha ingresado ',opcion);
28      end;
29 else
30     writeln('ERROR. No existe la opción ',opcion);
31 end; //De la instrucción CASE.
32 END.
Hasta la línea 16 nuestros ejemplos son exactamente iguales. Ahora, en la línea 17 en vez de tener un IF tenemos la declaración de la instrucción CASE. Su sintaxis es la siguiente:

Código:
Case variable of
Etiqueta1: instruccion1;
Etiqueta2: instruccion2;
...
EtiquetaN: instrucciónN;
Else
   Intruccion_por_defecto;
End;
Esta instrucción se fijará en el valor de la variable colocada entre la palabra CASE y la palabra OF, en nuestro ejemplo se trata de la variable opcion. Luego tomará el camino en el cual el valor de la variable sea igual al de la etiqueta. El ELSE al final indica lo que se debe hacer si la variable no corresponde con ninguna de las etiquetas anteriores. Este ELSE puede ir o no, es opcional. Si no está no se ejecutará nada y se continuará con lo que haya debajo en el código, pero no habrá error. En este caso hemos usado el ELSE par decir al usuario que no ingresó nada de lo esperado. Notar que antes de este ELSE sí debe ir un punto y coma que cierre la instrucción anterior, no como en el caso de los ELSE que se usan en una instrucción IF.

Siempre al final de la instrucción CASE debe ir un END que finalice en punto y coma para indicar el final de esta instrucción. No colocarlo es un error de sintaxis.

Notar que las instrucciones para cada etiqueta pueden ser bloques de instrucciones delimitados por sus respectivos BEGIN y END.
Es importante saber que las etiquetas representan los valores que debe tomar la variable del encabezado del CASE para que el programa tome tal o cual camino. Es posible indicar más de un valor a la vez en una misma etiqueta, simplemente separando cada valor por una coma:

Código:
Case variable of
Valor1, valor2: instruccion1;
Valor3, valor4, valor5: instruccion2;
. . .
ValorI, valorN: instruccionJ;
End;
IMPORTANTE: La variable del encabezado del CASE debe ser de un tipo ORDINAL, o sea integer, char, enumerado, boolean o subrango.

-------------------------------------------------------------------------------------

Ejercicio: Este es un simple ejercicio para que usen CASE. Quiero que en un solo programa junten los siguientes ejemplos que vimos hasta ahora: el programa HolaMundo, el del Área de un Triángulo, el que dividía dos cifras habiéndolo modificado para que muestre un error si se ingresa la segunda cifra igual a 0, y el programa que desglosaba un número de cuatro cifras modificado para que muestre un error si el usuario ingresa un número inválido, o sea, uno que sea menor a 1000 o mayor a 9999. Su programa debe mostrar un menú como el siguiente:

1) Hola Mundo
2) Calcular el Área de un Triángulo
3) Dividir dos números reales
4) Sumar los dígitos de un número de cuatro cifras

Selección:


Cuando el usuario elija una opción su programa habrá de realizar las tareas pertinentes y en caso contrario notificar el error. No continúen hasta no lograr hacer esto.

------------------------------------------------------------------------------------

Además ingresen en [url=http://www.fing.edu.uy/inco/cursos/prog1/pm/field.php/Practicos/Practico3]ESTE ENLACE[/url] para realizar todos los ejercicios allí propuestos, los cuales tratan todo lo dado específicamente en esta lección.

Con esto sí hemos terminado.

Espero que todo haya sido claro. Esperaré sus comentarios y sus dudas.
  #2 (permalink)  
Antiguo 08/11/2011, 22:10
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 17 años, 2 meses
Puntos: 188
Respuesta: Comenzando a programar: 6d- Condiciones booleanas y selección simple

Gracias por escribirlo.

Me puedes ayudar con esto porfavor
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #3 (permalink)  
Antiguo 09/11/2011, 11:18
 
Fecha de Ingreso: enero-2011
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 21
Respuesta: Comenzando a programar: 6d- Condiciones booleanas y selección simple

Siento la demora, pero creo que ya lo solucionaste ¿no?

Etiquetas: condiciones, entrada, ide, php, programa, simple
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:16.