TEMA 11   PROGRAMACIÓN ESTRUCTURADA EN C

BORRADO DE PANTALLA

Se realiza mediante system("cls"); habiendo invocado al comienzo del programa el fichero de cabecera stdlib.h mediante #include <stdlib.h>

Ejemplo: Programa que escribe Hola, y espera hasta que pulsamos Intro, momento en que borra la pantalla y escribe Adios.

/*borro pantalla*/
#include <stdio.h>
#include <stdlib.h>
void main()
{  char espera;
    printf("Hola");
    printf("\nPulsa intro");
    scanf("%c",&espera);
    system("cls");
    printf("Adios");
}

 

 

Permite simplificar expresiones en las que es necesario usar muchos instrucciones if

 

Sintaxis:     switch(variable)

 

                  {case valor1:

                             instrucciones1;

                             break;

                   case valor2:

                             instrucciones2;

                             break;

                          ...

                          ...

                  default:

                             sentencias_otras;

                  }

 

      Las variables valor1, valor2, ... deben ser de tipo entero o char. En este último caso, irían entre comillas simples.

Si el valor de la variable es valor1, se ejecutan las instrucciones1. Si el valor de la variable es valor2, se ejecutan las instrucciones2, etc.

      En caso de no acabar un grupo de instrucciones de un case con el break, se ejecutarían las instrucciones de las siguientes etiquetas case.

      Si no coincide el valor de la variable con ninguno de los valores especificados en los case, se ejecutarían -si es que existen-, las instrucciones del apartado default, en el esquema anterior, sentencias_otras.

 

Ejemplo: Programa que pida el número del día de la semana y muestre el nombre de éste, o bien el mensaje ?No es un valor válido?.

 

#include <stdio.h>

void main()

{int numero;

printf ("Introduce el número de día de la semana (1-7) ");scanf ("%d",&numero);

switch (numero)

  {case 1:printf("Lunes");break;

   case 2:printf("Martes");break;

   case 3:printf("Miércoles");break;

   case 4:printf("Jueves");break;

   case 5:printf("Viernes");break;

   case 6:printf("Sábado");break;

   case 7:printf("Domingo");break;

   default:printf("No es un valor válido");

   }

}

 

Ejemplo: Programa que pida la inicial del día de la semana y muestre el número de éste, o bien el mensaje ?No es un valor válido?.

 

 

#include <stdio.h>

void main()

{ int numero;

  char letra;

  printf ("Introduce la inicial del día de la semana ");scanf ("%c",&letra);

  switch (letra)

  {case 'l':printf("1");break;  /*los valores del case entre comillas simples por ser caracteres*/

   case 'm':printf("2");break;

   case 'x':printf("3");break;

   case 'j':printf("4");break;

   case 'v':printf("5");break;

   case 's':printf("6");break;

   case 'd':printf("7");break;

   default:printf("No es un valor válido");

   }

}

BUCLES.

 

            Son partes del programa que se repiten . La repetición puede ser un número conocido de veces, o bien mientras se cumpla una determinada condición. Existen tres estructuras para realizar bucles: WHILE, DO WHILE Y FOR.

 

{sentencia1;

 sentencia2;

        ?

        ?

}

        Su funcionamiento lo comprendemos si lo traducimos como: mientras se cumpla la condición que te indico entre paréntesis,, realiza el grupo de intrucciones contenidas entre las llaves.

        La condición es evaluada antes de ejecutarse por primera vez el bucle, por lo que si la condición no se cumple desde el principio, el bucle no se ejecutará ninguna vez.

 

Ejemplo: programa que muestre los números naturales del 0 al 10

 

#include                                     0

void main()                                               1

{int contador=0;                                       2

 const int TOPE=10;                                 3

 while (contador <=TOPE)                       ...    

 {printf("%d\n",contador);                         ...              

  contador=contador+1;                            10

 }

printf("\nAdios");                                       Adios

}

            Ya hemos comentado que la condición se evalúa antes de realizar el bucle. Por ello, si hubiésemos inicializado la variable contador a 11 o a cualquier otro valor mayor de 10, no habríamos obtenido en pantalla más que Adios, es decir, no se hubiese realizado el bucle ninguna vez.

 

 

                       instrucción1;

                                                                       instrucción2;

                                                                             ?

                                                                             ?

                                                                       }

 

                                                                       while (condición);

 

que traduciríamos como: ejecuta las instrucciones que te doy entre llaves, mientras se cumpla la condición que te indico entre paréntesis.

            A diferencia del bucle while, el bucle do while primero realiza el bucle y luego mira si se cumple o no la condición

Ejemplo: el mismo del caso anterior.

 

#include <stdio.h>

void main()

{int contador=0;

 const int TOPE=10;

 do

    {printf("%d\n",contador);

     contador=contador+1;

    }

 while (contador <=TOPE);

 printf("\nAdios");

}

            A diferencia del caso del bucle con while, si ahora hubiésemos puesto contador=11, por realizarse primero el bucle y luego evaluarse la condición, la salida habría sido:            11

                              Adios

                                                                                              

      {instrucción1;

        instrucción2;

        ?

        ?

      }

 

            El bucle se ejecutará mientras se cumpla la condición.

            Hay que tener cuidado y no poner ; después de la sentencia for

            Si el bucle consta de una sola instrucción, no es necesario poner las llaves.

            Si la condición no se cumpliese desde el principio, el bucle no se ejecutaría.

            Es el tipo de bucle más indicado cuando  conocemos de antemano el número de iteraciones necesarias.
 

 

Ejemplo: el mismo de los dos casos anteriores.           

 

#include <stdio.h>

void main()

{int contador=11;

 const int TOPE=10;

 for (contador=0;contador<=TOPE;contador=contador+1)

    {

      printf("%d\n",contador);                                0

    }                                                                    1      

 printf("\nAdios");                                                2

}                                                                        ...

                                                                                                 ...

                                                                                                 Adios

 

ANIDACIÓN DE ESTRUCTURAS.

 

                Las estructuras selectivas y los bucles pueden anidarse. Es decir, se puede, por ejemplo, insertar un bucle dentro de otro. Nunca pueden cruzarse, siendo la primera estructura que se abre, la última que se cierra.

 

            Ejemplo: programa que escriba n veces los números comprendidos entre 2 límites. El número de veces y los límites los fija el usuario.

 

#include <stdio.h>

void main()

{int inicio,fin,veces,contador_numero,contador_veces;

 printf("¿Número inicial?");scanf("%d",&inicio);

 printf("¿Número final?");scanf("%d",&fin);

 printf("¿Cúantas veces escribo cada número?");scanf("%d",&veces);

for (contador_numero=inicio;contador_numero<=fin;contador_numero=contador_numero+1)

    {for (contador_veces=1;contador_veces<=veces;contador_veces=contador_veces+1)

                   {printf("%d ",contador_numero);

                   }                    /* Cierre del segundo bucle */       

      printf("\n");      /* Cambio de línea */

    }                       /* Cierre del primer bucle */          

}                           /* Cierre del programa */

 

cuya salida, suponiendo que introdujésemos inicio=5, fin=8 y veces=4, sería   5 5 5 5

                                                                                                                      6 6 6 6

                                                                                                                      7 7 7 7

                                                                                                                      8 8 8 8

AMPLIACIÓN DE OPERADORES ARITMÉTICOS.

 

OPERACIÓN

SINTAXIS

EQUIVALE A

Incremento

variable++;

variable=variable+1;

Decremento

variable--;

variable=variable-1;

Asignación múltiple

variable1+=variable2;

variable1=variable1+variable2;

variable1-=variable2;

variable1=variable1-variable2;

variable1*=variable2;

variable1=variable1*variable2;

variable1/=variable2;

variable1=variable1/variable2;

Variable1%=variable2;

variable1=variable1%variable2

 

NÚMEROS ALEATORIOS.

 

 

Sintaxis: rand();     Podemos asignar el resultado a una variable entera:      var_entera=rand();

 

            Si queremos generar números aleatorios entre a y b, escribiríamos:  x=rand()%(b-a+1)+a;  es decir, obtenemos el resto de la división entera entre b-a+1 y le sumamos el límite inferior.

 

 

            La función se encuentra en el fichero de cabecera stdlib.h por lo que habrá que colocar al comienzo del programa:    #include <stdlib.h>

 

 

Ejemplo: programa que genere n números entre a y b. Los valores de n, a y b los fija el usuario.

 

#include <stdio.h>
#include <stdlib.h>
void main()
{   int n,x,in,su,tope;
    printf("¿Cuantos números?");scanf("%d",&tope);
    printf("¿Límite superior?");scanf("%d",&su);
    printf("¿Límite inferior?");scanf("%d",&in);
    for (n=1;n<=tope;n++)
        { x=rand()%(su-in+1)+in;
          printf("\t%d",x);
        }

si ejecutas varias veces el programa observarás que siempre se repite la misma secuencia de números aleatorios. Para que de una vez a otra la secuencia varíe, se utiliza la función srand

 

    Para que esta varíe de una vez a otra, se puede utilizar el reloj del sistema, en la forma srand( (unsigned)time( NULL ) ); El uso de la función time nos obliga a definir al comienzo el fichero de cabecera en que se encuentra: time.h

    El programa anterior, utilizando srand, quedaría en la forma:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{  int n,x,in,su,tope;
    srand( (unsigned)time( NULL ) );
    printf("¿Cuantos números?");scanf("%d",&tope);
    printf("¿Límite superior?");scanf("%d",&su);
    printf("¿Límite inferior?");scanf("%d",&in);
    for (n=1;n<=tope;n++)
        { x=rand()%(su-in+1)+in;
           printf("\t%d",x);
        }
}

 

TOMA DE CARACTERES DESDE EL TECLADO.

 

 

Detiene la ejecución del programa esperando la pulsación del teclado, y asignando, en caso de usar la segunda sintaxis, el carácter pulsado a una variable de tipo char.

 

 

 

 

También detiene la ejecución del programa, esperando la pulsación del teclado, y asignando, en su caso, el carácter pulsado a una variable de tipo char, pero además muestra en pantalla el carácter pulsado.

Las dos funciones se encuentran en el fichero de cabecera conio.h

 

Ejemplo: Programa que va indicando las teclas pulsadas por el usuario. Finaliza al pulsar #

#include <stdio.h>
      #include <conio.h>
      void main()
   
   {
   
      char pulsacion;
         printf("Pulsa teclas. Para acabar pulsa #\n");
   
      while(pulsacion!='#')
        {pulsacion=getch();
          printf("Has pulsado %c\n",pulsacion);
   
    }
   
     printf("ADIOS");
      }

 

 

 

VOLVER