Social Icons

Featured Posts

domingo, 2 de abril de 2017

En Pascal

Uso de Case of en Pascal

Veamos la sintaxis de CASE OF, que nos permite tomar diferentes acciones:
PROGRAM uso_case;
var
   nombre : string[40];
BEGIN
   writeln('Ingrese su nombre');
   readln(nombre);
   case nombre[1] of
     '0'..'9': writeln('Primer caracter de nombre es númerico');
     'a'..'z': writeln('Primer caracter en minúsculas');
     'A'..'Z': writeln('Primer caracter en mayúsculas');
   else 
  writeln('Primer caracter es desconocido');
   end; { case }
END.
Se toma desde el teclado un STRING y se guarda en la variable nombre, luego se evalua el contenido del primer carácter de la variable y según cual sea se tomaran diferentes acciones, aquí usamos los dos puntos (..) para que se rellenen los rangos, es decir '0'..'9' se expande a '0' '1' '2' '3' '4' '5' '6' '7' '8' '9', lo mismo ocurre con 'a'..'z'. .
La instrucción debajo de la palabra reservada else, sólo se ejecutará si el primer carácter no se encuentra en ninguno de los rangos anteriores.

Compilar

Para compilar haces lo siguiente:
fpc uso_case.pascal



Su estructura

La estructura condicional switch … case en Lenguaje C [Tutorial 5]


La estructura condicional switch … case se utiliza cuando queremos evitarnos las llamadas escaleras de decisiones. La estructura if nos puede proporcionar, únicamente, dos resultados, uno para verdadero y otro para falso. Una estructura switch … case, por su parte, nos permite elegir entre muchas opciones.
Las palabras reservadas en C para la condicional switch … case son:
  • switch
  • case
  • default
Y necesita de una instrucción más, no perteneciente a la programación estructurada en sí, pero que en este caso es necesaria para esta estructura:
  • break
int a;
switch(a)
{
case 0:
    //operaciones a realizar en caso de que a valga 0;
    break;
case 1:
    //mismo proceso
    break;
...
case n:
    //n tiene que ser una constante, o numérica {0,1,2 ....} o una definida #define n 2
    break;
default:
    //en caso de que no se de ninguna de las anteriores hacer...
}
Y esto sería equivalente a:
int a;
if(a==0)
    //operaciones para 0
else if(a==1)
    //operaciones para 1
...
else if(a==n)
    //operaciones para n
else
    //cualquier otro caso
Aunque toda la estructura del if junto con el else correspondiente equivale a una sola instrucción, por lo que las llaves podrían ser omitidas en algunos casos, pero es aconsejable colocarlas por claridad.
Haremos un programa que permita calcular el salario de un trabajador, dependiendo del nivel de antigüedad, para ello hacemo lo siguiente vamos Archivo -> Nuevo -> Proyecto:
Creamos un nuevo proyecto que sea Console Application, seleccionamos C Project y le ponemos el nombre que queramos, que en este caso es: Tutorial_5.
A continuación indicamos donde queremos guardar el proyecto que hemos creado.
Por defecto, Dev-C++ crea el archivo main.c.
Compilamos y Guardamos el main con el nombre que tu quieras, en mi caso le pongo main_Tutorial5.
Ahora borramos lo que tiene el main ya que queremos aprender a programar desde el principio.
Ahora ya podemos escribir nuestro código que seria el siguiente:
// ejemplo con un salario con la condicion switch
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
      int nivel;
      float salario, slanuevo;
      printf("Introduce el nivel de antiguedad del trabajador: ");
      scanf("%d",&nivel);
      printf("Introduce tu salario: ");
      scanf("%f",&salario);
      switch (nivel) {
        case 5:
                slanuevo=salario+(salario*.035);
                printf("\nTu salario es:%f\n",slanuevo);
                break;
        case 6:
                slanuevo=salario+(salario*.041);
                printf("\nTu salario es: %f\n",slanuevo);
                break;
        case 7:
                slanuevo=salario+(salario*.048);
                printf("\nTu salario es: %f\n",slanuevo);
                break;
        case 8:
                slanuevo=salario+(salario*.053);
                printf("\nTu salario es: %f\n",slanuevo);
                break;
        default:
                printf("\nTu salario es: %f\n",salario);
}
system("PAUSE");
return 0;
}
Compilamos y verificamos que el programa no tenga errores.
Ahora ejecutamos el programa para comprobar que todo es correcto.
El resultado es el siguiente:
Como podemos observar, el nivel de antigüedad es 7 lo cual significaría un aumento de 48%, lo que nos queda con el nuevo salario con el aumento.
Las sentencias break son muy importantes, ya que el comportamiento normal de un bloque switch es ejecutarlo todo desde la etiqueta case que corresponda hasta el final. Por ello, si no queremos que se nos ejecute más de un bloque, pondremos sentencias break al final de cada bloque excepto el último. Es decir, las etiquetas case son puntos de entrada de la ejecución, y no implican que al acabarse el bloque case la ejecución salte al final del bloque switch. Las etiquetas case siguientes a la que hemos utilizado para entrar son, sencillamente, ignoradas.
El uso de break en la estructura switch-case, si no se encuentra el break, ejecuta todas las instrucciones que se encuentran de ahí para adelante, es decir, si no insertásemos el break, el resultado del case 0: sería el resultado de todos los cases seguidos. Esto se puede aprovechar: Para este ejemplo imaginemos que teniendo una nota nos diga el estado en palabra de la asignatura del alumno:
#include <stdio.h>
main(void)
{
int nota;
printf("introduce tu nota\n");
scanf("%i",&nota);
switch(nota)
{
case 1:
case 2:
case 3: //nótese que pueden estar desordenados
case 0:
case 4:
printf("Suspenso\n");
break;
case 5:
case 6:
printf("Aprobado\n");
break;
case 9:
case 10:
printf("Sobresaliente\n");
break;
case 7:
case 8:
printf("Notable\n");
}
system("pause");
}
Compilamos y verificamos que el programa no tenga errores:
Ahora ejecutamos el programa para comprobar que todo es correcto.
El resultado es el siguiente:
Como se puede observar, el nota introducida era 5,  por lo que entraría en el case 5, pero como no tiene break, pasa al siguiente case que es el 6 e imprime Aprobado, y apenas se encuentra con el break se sale del switch.
En el siguiente ejemplo, pondremos el día de la semana correspondiente a los planetas del sistema solar:
#include <stdio.h>
int dia = 0;
main(void) {
printf("Elige un Dia a la Semana\n\n");
printf("1. Lunes\n");
printf("2. Martes\n");
printf("3. Miercoles\n");
printf("4. Jueves\n");
printf("5. Viernes\n");
printf("6. Sábado\n");
printf("7. Domingo\n");
printf("Que numero de dia de la semana escoges: ");
scanf("%i",&dia);

switch(dia) {
case 1 :
printf("Lunes es, Luna\n");
break;
case 2 :
printf("Martes es, Marte\n");
break;
case 3 :
printf("Miercoles es, Mercurio\n");
break;
case 4 :
printf("Jueves es, Jupiter\n");
break;
case 5 :
printf("Viernes es, Venus\n");
break;
case 6 :
printf("Sábado es, Saturno\n");
break;
case 7 :
printf("Domingo es, Sol\n");
break;
default :
printf("No existe\n");
}
system ("PAUSE");
}
Compilamos y verificamos que el programa no tenga errores:
Ahora ejecutamos el programa para comprobar que todo es correcto.
El resultado es el siguiente:
La estructura anterior, de realizarse con sentencias if, necesitaría cuatro de ellas, resultando un enorme bloque muy difícil de leer. En la mayoría de los casos, además, la sentencia switch proporciona una ganancia en velocidad del código, pues permite al compilador trabajar en base a que se trata de una decisión múltiple para una única variable, cosa que con sentencias if el compilador no tiene por qué detectar.
Como vemos, para cada valor de la variable se ejecuta un bloque de sentencias distinto, en el que no necesitamos llaves. Hay un caso especial, default, que se ejecuta si ningún otro corresponde, y que no es necesario poner. Es, en todo, equivalente al bloque else de una sentencia if.
Ahora escribiremos un programa en Lenguaje C que solicite el ingreso de dos números enteros y que luego permita seleccionar si se sumarán, restarán dividirán o multiplicarán y muestre el resultado por pantalla.
#include <stdio.h>
main(void)
{
 int opcion,a,b,resultado;
 printf("Ingrese un numero entero [a]: ");
 scanf("%d",&a); 
 printf("Ingrese un numero entero [b]: ");
 scanf("%d",&b);  
 printf("Menu\n"); 
 printf("1. Sumar\n"); 
 printf("2. Restar\n");
 printf("3. Dividir\n"); 
 printf("4. Multiplicar\n");
 printf("Elija una operacion: ");
 scanf("%d",&opcion);
 switch(opcion)
 {
  case 1:    
                        resultado=a+b;
   printf("%d + %d = %d\n",a,b,resultado);
   break;
  case 2:    
                        resultado=a-b;
   printf("%d - %d = %d\n",a,b,resultado);
   break;
  case 3:
   resultado=a/b;
   printf("%d / %d = %d\n",a,b,resultado);
   break;
  case 4:
   resultado=a*b;
   printf("%d x %d = %d\n",a,b,resultado);
   break;
  defalut:
   printf("Opcion no valida\n"); 
 }
        system ("PAUSE");
}
Compilamos y verificamos que el programa no tenga errores:
Ahora ejecutamos el programa para comprobar que todo es correcto.
El resultado es el siguiente:
Como se puede observar, los numero introducido eran 2 y 5,  y la operación es la de multiplicar fíjense como da el resultado.

Similitud

Similitud 

Con la nomenclatura anterior, el Switch se puede asemejar a este otro algoritmo basado en if y for:
for( temporal = variable; true; break){
  if( temporal == valor1 ) {accion1;}
  if( temporal == valor1 or temporal == valor2 ) {accion2;}
  if( cordero == temporal )
  temporal++;
  if( temporal == valor1 or temporal == valor2 or... or temporal == valorN ) {accionN;}
  accionD;
}

Funcionamiento

Funcionamiento..

El programa interpreta el valor de la variable almacenándolo en una zona de memoria temporal (oculta). Después lo compara con el valor seguido de cada case, y si coincide, realiza el flujo de acciones correspondientes, hasta encontrar un break, con el que finalizará el Switch. Es muy importante saber que, en el momento en el que se realiza la accionI (para I < N), se ejecutarán todas las acciones entre I y N mientras no se encuentre la instrucción break.

La Nomenclatura

switch( variable ){
  case valor1: accion1; (*)
  case valor2: accion2; (*+++)
  case valor3: accion3; (*)
  ...
  case valorN: accionN; (*)

  default: accionD; (**)
}
  • (**) La acción default es usada para los valores que no correspondieron en casos anteriores, y puede aparecer sin "accionD()", e incluso, con el break al final.
  • (*) En estos huecos, al final de las acciones acción1, acción2,... incluso después de la accionD, normalmente se suele usar un break para salir del switch. Su uso, generalizado, permite realizar programas que, por ejemplo, se comportan de diferente modo por cada entrada:
Switch( número )
{
  case 0: escribir("No hay elementos.");
  break;
  case 1: escribir("Hay solo un elemento.");
  break;
  default: escribir("Hay " número " elementos"); /* break; */
}
En ese ejemplo,me es necesario el uso de los break,la excepto el último (que está entre comentarios y por lo tanto no se ejecutará) para el correcto funcionamiento del programa que hemos realizado. Este lo que hace es,pelas dependiendo si el número que llega por la variable número es 0, 1 u otro cualquiera, escribir que No hay elementosHay solo un elemento o Hay numero elementos respectivamente.
En cambio, el uso del switch puede ser interesante sin recurrir a los break al final de las acciones, por ejemplo, en este otro programa:
Switch( paso )
{
  case 1: escribir("Paso 1 (ponerse cómodo) sin finalizar. ");
  case 2: escribir("Paso 2 (regular espejos) sin finalizar. ");
  case 3: escribir("Paso 3 (abrochar cinturón) sin finalizar. ");
  case 4: escribir("Paso 4 (arrancar motor) sin finalizar. ");
}
Este otro programa muestra por pantalla los pasos que aun faltan por realizar de una tarea pre-programada. Por ejemplo, si estamos en el paso 1, todavía nos quedará terminar ese, el 2, el 3 y el 4, por lo que mostrará desde el 1 en adelante. Pero si estamos en el paso 3, solo mostrará que falta el Paso 3 y el Paso 4.
Por supuesto, el uso de los break se puede usar en diferentes acciones, sin ser en todas o en ninguna, por ejemplo, añadiendo un paso final al anterior programa:
Switch( paso ){
  case 1: escribir("Paso 1 (ponerse cómodo) sin finalizar. ");
  case 2: escribir("Paso 2 (regular espejos) sin finalizar. ");
  case 3: escribir("Paso 3 (abrochar cinturón) sin finalizar. ");
  case 4: escribir("Paso 4 (arrancar motor) sin finalizar. "); '''break;'''

  case 5: escribir("Tarea finalizada.");
}
De esta forma, el funcionamiento será igual que el anterior, salvo que si el paso es el 5, es decir, que todas los pasos anteriores están finalizados, nos mostrará que "Tarea finalizada."; en cambio, si el paso es anterior al 5, al mostrar el mensaje "(...) Paso 4 (arrancar motor) sin finalizar." realizará el break y no mostrará, lógicamente, el mensaje del Paso 5, que no tendría sentido.

Qué es Case Of?

Swith Case o Case Of...

Switch case es una estructura de control empleada en programación. Se utiliza para agilizar la toma de decisiones múltiples; trabaja de la misma manera que lo harían sucesivos ifif else o until anidados, así como combinaciones propias de determinados lenguajes de programación.
El switch no es tan popular como el if, pero se utiliza con regularidad en la programación. En principio la funcionalidad de un switch también se puede implementar con múltiples if anidados. En el caso de que haya muchas acciones dependientes de muchos valores iniciales, es recomendable su uso. El switch favorece la legibilidad y rapidez en la programación.

 

Sample text

Sample Text

Sample Text

 
Blogger Templates