martes, 30 de septiembre de 2014

sentecias for, swit case y if

SENTENCIAS CONDICIONALES
C posee dos sentencias condicionales: if y switch.
Además, el operador ? es una posible alternativa para
if en ciertas situaciones.
Sentencia if

SINTAXIS
if (expresión)
sentencia
o
if (expresión)
sentencia_1
else
sentencia_2

DESCRIPCION
Si expresión es cierta se ejecuta la sentencia
correspondiente al if. Si expresión es falsa se
ejecuta la sentencia correspondiente al else si
lo hay.

En la segunda sintaxis se ejecuta sentencia_1 o
sentencia_2, pero nuna ambas.

EJEMPLOS
if (contador < 50) if (x < y) if (ch == '\n')
contador++; z = x; {
else numero_de_lineas++;
z = y; numero_de_caracteres++;
}

OBSERVACIONES
1) Lo siguiente es incorrecto:
if (expresión)
{
sentecias
};
else
sentencia
puesto que entre el if y el else sólo puede haber
una sentencia y aquí hay dos: { } y ;.
borrar_ventana

2) Al ser la sentencia if una sentencia simple,
la sentencias if se pueden anidar:
/*
a la variable numero_menor se le asigna la
variable con menor valor entre x, y, z
*/
if (x <= y)
if (x <= z)
numero_menor = x;
else
numero_menor = z;
else
if (y <= z)
numero_menor = y;
else
numero_menor = z;
borrar_ventana

3) El else siempre está asociado al if más cercano.
Los dos siguientes ejemplos son distintos:
/* Ejemplo 1: */
if (n > 0)
if (a > b)
z = a;
else
z = b;
/* Ejemplo 2: */
if (n > 0)
{

if (a > b)
z = a;
}
else
z = b;
borrar_ventana

4) Un constructor común en programación es la
escala if-else-if. Tiene la forma siguiente:
if (expresión_1) /* Ejemplo: numero_menor
sentencia_1 toma el valor de la variable
else if (expresión_2) menor entre x, y, z */
sentencia_2 if (x <= y && x <= z)
. numero_menor = x;
. else if (y <= z && y <= z)
. numero_menor = y;
else else
sentencia_n numero_menor = z;
Las condiciones se evalúan de arriba hacia abajo.
Sólo se ejecuta la sentencia correspondiente a la
primera expresión que sea cierta, si la hay. Si
ninguna expresión es cierta, se ejecuta el else final
si existe, sino no se ejecuta ninguna sentencia.
borrar_ventana
5) El operador ? se puede utilizar para reemplazar
las sentencias if-else. Este operador ternario se
ha visto en la lección 2.
/* Ejemplo 1 con if-else */ /* Ejemplo 1 con ?: */
if (x <= y) z = x <= y ? x : y;
z = x;
else
z = y;
/* Ejemplo 2 con if-else */ /* Ejemplo 2 con ?: */
if (n == 1) n == 1 ?
printf ("Mensaje 1"); printf ("Mensaje 1"):
else printf ("Mensaje 2");
printf ("Mensaje 2");
Sentencia switch

FORMA GENERAL
switch (expresión)
{
case expresión_constante_1:
sentencias_1
break;
case expresión_constante_2:
sentencias_2
break;
case expresión_constante_3:
sentencias_3
break;
.
.
.
default:
sentencias_n

DESCRIPCION
En muchas ocasiones es más elegante utilizar
la sentencia switch que la escala
if-else-if.
Una expresión constante es una expresión
en la que todos los operandos son constantes.
El switch evalúa expresión. A continuación
evalúa cada una de las expresiones
constantes hasta que encuentra una que
coincida con expresión. Cuando la encuentra
ejecuta las sentencias correspondientes
a ese case. Si no hay ninguna expresión
case que coincida con expresión, se
ejecuta las sentencias correspondientes
al default.

EJEMPLO
switch (operando)
{
case 1:
x *= y;
break;
case 2:
x /= y;
break;
case 3:
x += y;
break;
case 4:
x -= y;
break;
default:
printf ("ERROR!");
}


OBSERVACIONES
1) La sentencia default es opcional. Si
fallan todas las comprobaciones de los
case y no hay default, no se ejecuta
ninguna acción en el switch. Incluso el
default puede ir en cualquier posición
y no obligatoriamente al final.

2) La sentencia switch se diferencia de
la escala if-else-if en dos cosas:

1§) En la sentencia switch sólo se
puede comprobar la igualdad entre las
expresiones constantes y expresión.



2§) Las expresiones de los case han
de ser constantes.
borrar_ventana

3) Las sentencias break en el switch son
opcionales. El break hace que se produzca
una salida inmediata de la instrucción
switch. Si no hay una sentencia break en
un case, al ejecutarse las sentencias que
corresponden a ese case, también se ejecutarían
las sentencias correspondientes
al siguiente case y así sucesivamente
hasta encontrar un break o llegar al final
del switch. La sentencia break puede
ir en cualquier sitio, no forzosamente
al final de las sentencias de los case.
case 1: /* Ejemplo de case sin break */
x++; /* Después de ejecutarse x++, */
case 2: /* se ejecuta siempre y++ */
y++;
break;
borrar_ventana

4) Asociado a cada case puede haber
ninguna, una o varias sentencias.
case 1: /* case sin sentencias directas*/
case 2: /* case con dos sentencias */
++x;
break;
case 3:
x++;
break;
y++;/*esta sentencia nunca se ejecuta*/
case 4: /* case con tres sentencias */
x++;
y++;
break;

SENTENCIAS ITERATIVAS
Los bucles o sentencias iterativas
permiten que un conjunto de instrucciones
sea ejecutado hasta que
se alcance una cierta condición.
Las sentencias iterativas son:
while, for y do.
Sentencia while
SINTAXIS
while (expresión)
sentencia


DESCRIPCION
Se evalúa expresión. Si es cierta, se ejecuta
sentencia y se vuelve a evaluar expresión. El
ciclo continúa hasta que expresión es falsa,
momento en que la ejecución continúa con lo
que está después de sentencia.
EJEMPLOS
/* /* /*
el bucle termina imprime los cinco pri- al ; del while no
cuando encuentra meros números naturales se llega nunca ya
un carácter dis- */ que el bucle no
to de blanco en i = 1; nace ninguna iteravector
s while (i <= 5) ción.
*/ { */
i = 0; printf ("\ni = %d", i); int condicion = 0;
while (s[i] == ' ') i++; while (condicion)
i++; } ;
Sentencia for

FORMA GENERAL
for (expresión_1; expresión_2; expresión_3)
sentencia

DESCRIPCION
En la sentencia for, a expresión_1 se le llama inicialización, a expresión_2
se le llama condición, y a expresión_3 se le llama incremento.
La forma general descrita de la sentencia for es equivalente a:
expresión_1
while (expresión_2)
{ La forma de actuar del bucle for se observa
sentencia claramente en su equivalente del while.
expresión_3;
}
Las tres expresiones de la sentencia for son opcionales, aunque los puntos y
coma siempre deben aparecer. Si no aparece expresión_2 se asume que es 1.
EJEMPLOS
#include <stdio.h> #include <stdio.h>
void main (void) void main (void)
{ {
printf ("Lista de los 100 primeros" int i, s;

"números naturales:\n); for (s = 0, i = 1; i < 100; i++)
int x; s += i;
for (x = 1; x <= 100; x++) printf ("La suma de los primeros "
printf ("%d ", x); "100 números naturales es %d.",s);
} }
Nota: (s = 0, i = 1) es una expresión, más concretamente, es una expresión
formada por el operador coma, cuyo operandos son expresiones de asignación.

OBSERVACION
La instrucción
for (;;)
sentencia
es un bucle infinito.
Sin embargo, aunque en este bucle no nos podamos
salir por la condición del for, nos podemos salir
por otros medio (por ejemplo, mediante la sentencia
break, que estudiaremos un poco más adelante en
esta misma lección).

sentencia if


 En la programación es escencial el manejo de bifurcaciones (si-entonces), en el Lenguaje C se usa la sentencia if().
Modo de Uso
if(condicion)
{
Acciones
}
Las acciones dentro de las llaves {} se ejecutarán siempre y cuando se cumpla la condición especificada entre los peréntesis (). También es posible omitir las llaves si se fuera a ejecutar una sola acción.
La condición puede ser cualquier expresión lógica como por ejemplo a<=b ó x!=0 ó z+10<a&&b>0, etc.
Ejemplos:
1. Escriba un programa en Lenguaje C que solicite el ingreso de un número entero e indique si es mayor que cero y si es par.
Solución: titulo: mayorquecerooespar.cpp
#include <stdio.h>
void main()
{
        int a;
        printf("Ingrese un numero: ");
        scanf("%d",&a);
        if(a>0)
                printf("El numero es mayor que cero\n");
        if(a%2==0)
                printf("El numero ingresado numero es par\n");
}
2. Escriba un programa en Lenguaje C que solicite el ingreso de un número entero por teclado,
si el número es menor que 12 lo incremente en uno y lo multiplique por diez; si el número
ingresado es mayor o igual que 12 lo multiplique por diez y luego lo incremente en uno. Mostrar
el resultado por pantalla.

Solución:mayoromeno.cpp

#include <stdio.h>
void main()
{
        int a;
        printf("Ingrese un numero: ");
        scanf("%d",&a);
        if(a<12)
        {
                a++;
                a*=10;
        }
        if(a>=12)
        {
                a*=10;
                a++;
        }
        printf("El resultado es: %d\n",a);
//Nótese que el orden es importante XD
}
El lenguaje C también soporta el uso de una estructura si-entonces, sino.Para esto se usa la
sentencia else.

Veamos otra variante del ejemplo 2 usando la sentencia else
Título: funciónelse.cpp

#include <stdio.h>
void main()
{
        int a;
        printf("Ingrese un numero: ");
        scanf("%d",&a);
        if(a<12)
        {
                a++;
                a*=10;
        }
        else     //Si un número no es menor que 12, entonces es  mayor o igual al mismo
        {
                a*=10;
                a++;
        }
        printf("El resultado es: %d\n",a);
}

Titulo: calificación.cpp
#include <stdio.h>

int main()
{
   float nota;

   printf( "\n   Introduzca nota (real): " );
   scanf( "%f", &nota );

   if ( nota >= 5 )
      printf( "\n   APROBADO" );
   else
      printf( "\n   SUSPENDIDO" );

   return 0;
}

EJERCICIOS EN TURBO C++
Ejercicio: 01
Algoritmo que lea tres números y los muestre de forma descendente. Solución: titulo: numerosordenados.cpp
#include<stdio.h>
#include<conio.h>
void main()
{
int a,b,c;
clrscs();
printf(Ingrese el primer número:);
scanf(%d,&a);
printf(Ingrese el segundo número:);
scanf(%d,&b);
printf(Ingrese el tercer número:);
scanf(%d,&c);
if((a>b)&&(a>c))
if(b>c)
printf(\n Los números son:%d %d %d, a,b,c );
else
printf(\n Los números son:%d %d %d, a,c,b);
if((b>a)&&(b>c))
if(a>c)
printf(\n Los números son:%d %d %d, b,a,c );
else
printf(\n Los números son:%d %d %d, b,c,a);
if((c>a)&&(c>b))
if(a>b)
printf(\n Los números son:%d %d %d, c,a,b );
else
printf(\n Los números son:%d %d %d, c,b,a);
getch();
}

sentenia switch case

La sentencia switch() en Lenguaje C es una sentencia de selección. Esta sentencia permite seleccionar las acciones a realizar de acuerdo al valor que tome una variable.
Modo de uso:
switch(variable)
{
        case valor_1:
                //acciones
                break;
        case valor_2:
                //acciones
                break;
                .
                .
                .
        case valor_n:
                //acciones
                break;
        defalut:
                //acciones
                break;
}
Si el valor que toma la variable no coincide con los valores especificados en los casos, se
realizarán las acciones definidas en la etiqueta default.
Ejemplos:
1.  Escriba un programa en Lenguaje C que solicite el ingreso de un número del 1 al 9 y que muestre por pantalla el número seleccionado en letras.
Solución: numeroenletras.cpp
#include <stdio.h>
void main()
{
        int opcion;
        printf("Ingrese un numero entero: ");
        scanf("%d",&opcion);
        switch(opcion)
        {
                case 1:
                         printf("Ha ingresado el numero uno\n");
                         break;
                case 2:
                         printf("Ha ingresado el numero dos\n");
                         break;
                case 3:
                         printf("Ha ingresado el numero tres\n");
                         break;
                case 4:
                         printf("Ha ingresado el numero cuatro\n");
                         break;
                case 5:
                         printf("Ha ingresado el numero cinco\n");
                         break;
                case 6:
                         printf("Ha ingresado el numero seis\n");
                         break;
                case 7:
                         printf("Ha ingresado el numero siete\n");
                         break;
                case 8:
                         printf("Ha ingresado el numero ocho\n");
                         break;
                case 9:
                         printf("Ha ingresado el numero nueve\n");
                         break;
                defalut:
                         printf("Ha ingresado un numero no valido\n");
                         break;
        }
}
2.  Escriba 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.
Solución: opciones.cpp
#include <stdio.h>
void main()
{
        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");
                         break;
        }
}


1º) Pida por teclado el número (dato entero) de un día de la semana.
2º) Muestre por pantalla el nombre (dato cadena) correspondiente a dicho día.

Nota: Si el número de día introducido es menor que 1 ó mayor que 7, se mostrará el mensaje: "ERROR: Día incorrecto.".

En pantalla se podrá ver algo parecido a:

   Introduzca dia de la semana: 2

   Martes
O también:

   Introduzca dia de la semana: 9

   ERROR: Dia incorrecto.
Solución propuesta:titulo: díasdelasemana.cpp
#include <stdio.h>

int main()
{
   int dia;

   printf( "\n   Introduzca dia de la semana: " );
   scanf( "%d", &dia );

   switch ( dia )
   {
      case 1 : printf( "\n   Lunes" );
               break;
      case 2 : printf( "\n   Martes" );
               break;
      case 3 : printf( "\n   Miercoles" );
               break;
      case 4 : printf( "\n   Jueves" );
               break;
      case 5 : printf( "\n   Viernes" );
               break;
      case 6 : printf( "\n   Sabado" );
               break;
      case 7 : printf( "\n   Domingo" );
               break;
   default : printf( "\n   ERROR: Dia incorrecto."
);
   }

   return 0;
}


) Muestre el listado de los signos del zodíaco, con sus números asociados.
2º) Pida por teclado un número (dato entero) asociado a un signo del zodíaco.
3º) Muestre la categoría a la que pertenece el signo del zodíaco seleccionado.

Nota: Si el número introducido por el usuario, no está asociado a ningún signo del zodíaco, se mostrará el mensaje: "ERROR: <número> no está asociado a ningún signo.".

En pantalla veremos:
   Listado de signos del zodiaco:

   1. Aries
   2. Tauro
   3. Geminis
   4. Cancer
   5. Leo
   6. Virgo
   7. Libra
   8. Escorpio
   9. Sagitario
   10. Capricornio
   12. Acuario
   13. Piscis

   Introduzca numero de signo: 7

   Es un signo de Aire.
O también:
   Listado de signos del zodiaco:

   1. Aries
   2. Tauro
   3. Geminis
   4. Cancer
   5. Leo
   6. Virgo
   7. Libra
   8. Escorpio
   9. Sagitario
   10. Capricornio
   12. Acuario
   13. Piscis

   Introduzca numero de signo: 15

   ERROR: 15 no esta asociado a ningun signo.
Una posible solución es: titulo: zodiacos.cpp
#include <stdio.h>

int main()
{
   int numero;

   printf( "\n   Listado de signos del zodiaco:" );
   printf( "\n\n   1. Aries" );
   printf( "\n   2. Tauro" );
   printf( "\n   3. Geminis" );
   printf( "\n   4. Cancer" );
   printf( "\n   5. Leo" );
   printf( "\n   6. Virgo" );
   printf( "\n   7. Libra" );
   printf( "\n   8. Escorpio" );
   printf( "\n   9. Sagitario" );
   printf( "\n   10. Capricornio" );
   printf( "\n   11. Acuario" );
   printf( "\n   12. Piscis" );
   printf( "\n\n   Introduzca numero de signo: " );

   scanf( "%d", &numero );

   switch ( numero )
   {
      case  1 :
      case  5 :
      case  9 : printf( "\n   Es un signo de Fuego." );
                break;
      case  2 :
      case  6 :
      case 10 : printf( "\n   Es un signo de Tierra." );
                break;
      case  3 :
      case  7 :
      case 11 : printf( "\n   Es un signo de Aire." );
                break;
      case  4 :
      case  8 :
      case 12 : printf( "\n   Es un signo de Agua." );
                break;
     default : printf( "\n   ERROR: %d no esta asociado a ningun signo.", numero );
   }

   return 0;
}
Otra solución es: titulo: otrozodiaco.cpp
#include <stdio.h>
#include <string.h>

int main()
{
   int numero;
   char categoria[7];

   printf( "\n   Listado de signos del zodiaco:" );
   printf( "\n\n   1. Aries" );
   printf( "\n   2. Tauro" );
   printf( "\n   3. Geminis" );
   printf( "\n   4. Cancer" );
   printf( "\n   5. Leo" );
   printf( "\n   6. Virgo" );
   printf( "\n   7. Libra" );
   printf( "\n   8. Escorpio" );
   printf( "\n   9. Sagitario" );
   printf( "\n   10. Capricornio" );
   printf( "\n   11. Acuario" );
   printf( "\n   12. Piscis" );
   printf( "\n\n   Introduzca numero de signo: " );

   scanf( "%d", &numero );

   switch ( numero % 4 )
   {
      case  1 : strcpy( categoria, "Fuego" );
                break;
      case  2 : strcpy( categoria, "Tierra" );
                break;
      case  3 : strcpy( categoria, "Aire" );
                break;
      case  0 : strcpy( categoria, "Agua" );
   }

   if ( numero >= 1 && numero <= 12 )
      printf( "\n   Es un signo de %s.", categoria );
   else
      printf( "\n   ERROR: %d no esta asociado a ningun signo.",
              numero );

   return 0;
}