SlideShare a Scribd company logo
1 of 15
Download to read offline
Ingeniería Técnica Industrial
                                                                Fundamentos de Informática


                                                      Tema 5. Control de flujo del programa



TEMA 5. CONTROL DE FLUJO DEL PROGRAMA

5.1 Sentencias
   Una sentencia es una expresión seguida de un punto y coma.

        Sentencia  Instrucción  Expresión
                                       Operadores + Operandos
         Sintaxis: Sentencia ;                             El ; es obligatorio
   Las sentencias se ejecutan una tras otra, en EL MISMO ORDEN
en que han sido escritas  Para cambiar ese orden están las
SENTENCIAS DE CONTROL DE FLUJO  En función de una
condición deciden qué sentencia, o bloque de sentencias, es la
siguiente en ejecutarse. Pueden ser clasificadas en dos categorías:
    Estructuras de selección
    Estructuras de repetición

5.2 Sentencias compuestas (bloques)
   Una sentencia compuesta o bloque es un grupo de sentencias
agrupadas entre llaves { y }. Son sintácticamente equivalentes a una
sentencia simple. Presentan la siguiente sintaxis:
   { /* comienzo del bloque */
      <directivas>            /* (#include, #define, etc.) */
      <declaraciones>         /* declaraciones de variables locales */
      <sentencias>            /* conjunto opcional de sentencias */
   } /* final del bloque */

5.3 Estructuras de selección (sentencias condicionales)
   Permiten ejecutar unas sentencias u otras en función de una condición:
    if else, switch

                                                                            Página 1 de 15
Ingeniería Técnica Industrial
                                                            Fundamentos de Informática


                                                  Tema 5. Control de flujo del programa



5.3.1 if else
   Se utiliza para expresar decisiones. Sintaxis general:
   if (condición)
      sentencia1; /* se ejecuta si condición es verdadera */
   else
      sentencia2; /* se ejecuta si condición es falsa */           Opcional
   La forma general del if con bloques de sentencia es:
   if (condición)
   { sentencia_1;            falso
     ...
     sentencia_n;                 verdad
   }
   else
   { sentencia_n+1;
     ...                                                      Opcional
     sentencia_n+m;
   }
   sentencia_k
   ...
   condición == true  se ejecuta sentencias 1, 2, … n y k
   condición == false  se ejecuta sentencias n+1, n+2,…n+m y k
   float nota;
   ...
   if (nota >= 5)
       puts("Enhorabuena, has aprobado.n");
   else
   {     puts("Lo siento, has suspendido.n");
         puts("Bueno, otra vez será");
   }
   ...
   Como en la parte if tenemos una sentencia simple las '{' '}' no son
necesarias, pero en la parte else si hacen falta ya que tenemos un
bloque formado por dos sentencias.
                                                                        Página 2 de 15
Ingeniería Técnica Industrial
                                                              Fundamentos de Informática


                                                    Tema 5. Control de flujo del programa



5.3.1.1 if anidados
   Una sentencia if puede tener anidada otra sentencia if y así
sucesivamente. Un if anidado es una sentencia if insertada dentro
de otro if o else. Debido a que la parte else es optativa, existe una
ambigüedad cuando un else se omite de una secuencia if anidada.
float nota;                                  float nota;
...                                          ...

if (nota < 5)                                if (nota < 5)
    if (practica > 6)                        { if (practica > 6)
        nota = nota + 1;                            nota = nota + 1;
    else                                         else
        nota = nota - 0.5;                          nota = nota - 0.5;
printf("La nota es %.2f n", nota);          }
...
                                             printf("La nota es %.2f n", nota);
                                             ...
¿A que if está asociado el else?
      El else se asocia con el if anterior más cercano que no tenga else.
      Ambos ejemplos son, por tanto, totalmente equivalentes.
   En caso de duda, o para realizar una acción diferente (asociar el
else con el otro if) podemos utilizar llaves para alterar la asociación:
    Dependiendo del lugar donde pongamos las llaves, el significado
del mismo código fuente varía considerablemente:
      float nota;
      ...
      if (nota < 5)
      { if (practica > 6)
            nota = nota + 1;
      }
      else
          nota = nota - 0.5;
      printf("La nota sacada es %f n", nota);
      ...




                                                                          Página 3 de 15
Ingeniería Técnica Industrial
                                                                 Fundamentos de Informática


                                                       Tema 5. Control de flujo del programa




5.3.1.2 else-if
   Es la forma más general de escribir una decisión múltiple:
   if (condición)
      sentencia o bloque;
   else if (condición)
      sentencia o bloque;
   ...
   else if (condición)
      sentencia o bloque;
   else
      sentencia o bloque;                                             Opcional
   ...

   El último else maneja el caso "si no se cumple ninguno de los
anteriores". Este último else no es obligatorio.

Ejemplo:      float nota;
              ...
              if (nota = = 10)
              { puts("Matricula de Honor n");          puts("Enhorabuena n");
              }
              else if (nota >= 9)
                  puts("Sobresaliente n");
              else if (nota >= 7)
                  puts("Notable n");
              else if (nota >= 5)
                  puts("Aprobado n");
              else { puts("Suspenso n");
                         puts("Lo siento mucho n");
                    }




                                                                             Página 4 de 15
Ingeniería Técnica Industrial
                                                                                               Fundamentos de Informática


                                                                                     Tema 5. Control de flujo del programa




                    5.3.2 switch
                                           switch (vble/expresión)
                                           { case valor1: sentencia1.1;
                                                            …
                                                           sentencia1.n;
                    deben ser DIFERENTES




                                                           break; <
Todos los valores




                                             case valor2: sentencia2.1;
                                                            …
                                                           sentencia2.n;
                                                           break; <                                 Opcional
                                                            ...

                                               case valorN: sentenciaN.1;
                                                             …
                                                            sentenciaN.n;
                                                            break; <
                                               default: sentenciaD.1;
                                                          …
                                                        sentenciaD.n;
                                           }
                                            valor es un valor o expresión constante entera.
                                            default es opcional, se ejecuta si no se cumple ningún case.
                                            Un switch puede tener anidada otro switch en algun case.
                                           Funcionamiento:
                                               1. Se compara el valor de vble/expresión contenida en los paréntesis
                                                  del switch, con los distintos valores constantes enteros case.
                                               2. Se ejecutarán aquellas sentencias cuyo case tenga un valor
                                                  igual al de la vble/expresión.
                                               3. El resto de sentencias existentes en los case posteriores (y
                                                  default si existe) también se ejecutan a menos que se
                                                  encuentre una sentencia break.
                                               4. Si ningún valor coincide con vble/expresión  Se ejecutarán las
                                                  sentencias asociadas al apartado default (en caso que exista).
                                               5. Si ningún case coincide y no hay default no se ejecuta nada


                                                                                                           Página 5 de 15
Ingeniería Técnica Industrial
                                        Fundamentos de Informática


                              Tema 5. Control de flujo del programa



  Funcionamiento switch
int main()                  int main()
{ ...                       { ...
  vble=1;                     vble=2;
  ...                         ...
  switch(vble)                switch(vble)
  { case 1: sentencia1;       { case 1: sentencia1;
    case 2: sentencia2;         case 2: sentencia2;
            sentencia3;                 sentencia3;
            break;                      break;
    case 3: sentencia4;         case 3: sentencia4;
            break;                      break;
    default: sentencia5;        default: sentencia5;
  }                           }
  sentencia6;                 sentencia6;
  ...                         ...
}                           }
int main()                  int main()
{ ...                       { ...
  vble=7;                     vble=5;
  ...                         ...
  switch(vble)                switch(vble)
  { case 1: sentencia1;       { case 1: sentencia1;
    case 2: sentencia2;                 break;
            sentencia3;         case 2: sentencia2;
            break;                      sentencia3;
    case 3: sentencia4;         case 3: sentencia4;
            break;                      sentencia5;
    default: sentencia5;                break;
  }                           }
  sentencia6;                 sentencia6;
  ...                         ...
}                           }
int main()                  int main()
{ ...                       { ...
  a=1;b=3;                    a=1;b=2;
  switch(a)                   switch(a)
  { case 1: sentencia1;       { case 1: sentencia1;
    case 2: if (b == 3)         case 2: if (b == 3)
            { sentencia2;               { sentencia2;
               break;                      break;
            }                           }
            sentencia3;                 sentencia3;
    case 3: sentencia4;         case 3: sentencia4;
            break;                      break;
  }                           }
  sentencia5;                 sentencia5;
  ...                         ...
}                           }

                                                    Página 6 de 15
Ingeniería Técnica Industrial
                                                                  Fundamentos de Informática


                                                        Tema 5. Control de flujo del programa



   La sentencia switch se utiliza frecuentemente para procesar
selecciones de menú, como la mostrada en el siguiente ejemplo:
   void ver_menu( )
   { char c;
       printf("1. Añadirn");
       printf("2. Modificarn");
       printf("3. Eliminarn");
       printf("nIntroduzca la opción deseada: ");
       c = getche( );              // lee una tecla y la muestra en pantalla
       switch (c)
       { case '1': insertar( ); // si la tecla pulsada es 1 se ejecuta insertar( )
                      break;
           case '2':               // si la tecla pulsada es 2 se ejecuta modificar( )
             modificar( );      break;
           case '3':               // si la tecla pulsada es 3 se ejecuta borrar( )
             borrar( );
             break;
           default:               // si no es ninguna de ellas muestra un mensaje
             printf("nElija una opción correctan");
       }
   }

   El switch es una alternativa al uso de else if, pero no siempre:
   La sentencia switch sólo puede comprobar la igualdad, mientras
que el if puede evaluar cualquier expresión relacional o lógica.
   Por ejemplo, no es posible realizar con la sentencia switch el
ejemplo realizado con la sentencia else if que consistía en escribir
en pantalla la calificación sacada por los alumnos en función de sus
notas, ya que una sentencia switch sólo puede comprobar la
igualdad, mientras que en ese ejemplo nos hace falta usar
operadores relacionales (>=) distintos a los de igualdad (==).

                                                                              Página 7 de 15
Ingeniería Técnica Industrial
                                                                           Fundamentos de Informática


                                                                 Tema 5. Control de flujo del programa



       Para ilustrar la equivalencia entre el uso del switch y el uso del
    else if veamos un ejemplo realizado de las dos formas:
          Uso de la estructura else if:                 Uso de la estructura switch:
int x, y, op, suma, resta;                      int x, y, op, suma, resta;
float cociente;                                 float cociente;
printf("1. Sumar n");                          printf("1. Sumar n");
printf("2. Dividir n");                        printf("2. Dividir n");
printf("3. Calcular Cociente n");              printf("3. Calcular Cociente n");
printf("4. Restar n");                         printf("4. Restar n");
printf("nElija opcion: ");                     printf("nElija opcion: ");
scanf(“%i”, &op);                               scanf(“%i”, &op);
if (op == 1)                                    switch (op) {
    suma = x + y;                                case 1 : suma = x + y; break;
else if (op == 2 | | op == 3 )                   case 2 :
{                                                case 3 :
      if (y = = 0)                                  switch (y)
           printf("Error: división por 0n");       { case 0: printf("Error: division por 0 n");
      else                                                       break;
      { cociente = x / (float)y;                        default: cociente = (float)x / y;
           printf(“%g n”, cociente);                             printf(“%g n”, cociente);
      }                                             }
}                                                   break;
else if (op == 4)                                case 4:
      resta = x - y;                                  resta = x - y; break;
else                                             default :
      printf("Opción incorrecta n");                 printf("Opción incorrecta n");
}                                               }
...                                             ...




                                                                                        Página 8 de 15
Ingeniería Técnica Industrial
                                                           Fundamentos de Informática


                                                 Tema 5. Control de flujo del programa



Del análisis de este ejemplo, se puede ver lo siguiente:
 Pueden existir etiquetas case vacías
 Un conjunto de sentencias dentro de un case no necesitan '{' y '}'.
 Una sentencia switch puede tener anidada otra sentencia switch.
 Sin la sentencia break al final del grupo de sentencias de case, el
  conjunto de sentencias contenidas en el resto de etiquetas case
  también se ejecutarían.
Para comprender mejor estas observaciones veamos este ejemplo:
   int tecla;
   ...
   tecla = toupper( getch( ) ); // lee una tecla sin hacer eco en
                                // pantalla y la pasa a mayusculas
   switch (tecla) {
      case 'A':     puts(" Has pulsado la A n");
      case 'E': case 'I':
      case 'O':     puts("No has pulsado una consonante n");
      case 'U':     puts("Has pulsado una vocal n");
                    break;
      case 'Z':
      case 'X':     puts("Has pulsado la X o la Z n");
                    puts("Has pulsado una consonante n");
                    break;
      default:      puts("No has pulsado ni la X ni la Z n";
                    puts("No has pulsado una vocal n");
   }
   Si pulsamos la tecla A aparece en pantalla los siguientes mensajes:
   Has pulsado la A
   No has pulsado una consonante
   Has pulsado una vocal
   Si pulsamos la I:                        Si pulsamos la Z:
   No has pulsado una consonante             Has pulsado la X o la Z
   Has pulsado una vocal                     Has pulsado una consonante


                                                                       Página 9 de 15
Ingeniería Técnica Industrial
                                                   Fundamentos de Informática


                                         Tema 5. Control de flujo del programa



5.4 Estructuras de repetición
   Permiten iterar el flujo de ejecución de un programa dentro de un
bloque de sentencias mientras se verifique una condición.
   Las estructuras de repetición del lenguaje C son las siguientes:
    while, do while, for
    ¿Conocemos cuántas veces hay que repetir un conjunto de
instrucciones (o una sola)?:
   Sí  Usamos un bucle for.
   No  ¿Esas instrucciones debe ejecutarse al menos una vez ?:
           Sí  Usamos un bucle do while.
           No Usamos un bucle while.

5.4.1 while
La sentencia while se utiliza para expresar bucles.
   while (condición)                  while (condición)
     sentencia;                       { sentencia1;
                                        ...
                                        sentencia1;
                                      }

 Funcionamiento while
   int main ()                         int main ()
   {...             falso              {...             falso
    while(condición) verdad             while(condición) verdad
      sentencia;                         { sentencia1;
    sentencia;                             ...
                                           sentenciaN;
    sentencia;                           }
    ...                                 sentencia;
   }
                                        sentencia;
                                        ...
                                       }




                                                              Página 10 de 15
Ingeniería Técnica Industrial
                                                     Fundamentos de Informática


                                           Tema 5. Control de flujo del programa



   Como la expresión es evaluada al principio, si no se verifica la
expresión, no se ejecutan las sentencias del bucle while.
   int suma = 0, num, i = 1;
   scanf(“%i”, &num);
   while (num >= 0 && i <= 20) {
      suma = suma + num;               Si la condición
       i++;                            no se cumple
      scanf(“%i”, &num);
   }
   printf(“La suma es %i n”, suma);
    Este programa pide números por teclado y los va sumando hasta
que introduzca un número negativo o lleve pedidos 20 números. Si al
principio mete un número negativo, no suma ninguno.

5.4.2 do while
Similar al while, excepto que 1º se ejecutan las sentencias y luego
se evalúa la condición (las sentencias se ejecutan al menos 1 vez).
   do                                   do
     sentencia;                         { sentencia1;
                                           ...
   while (condición) ;                    sentenciaN;
                          ¡Ojo!         } while (condición) ;         ¡Ojo!


 Funcionamiento do while
   int main ()                         int main ()
   {...                                {...
     do            verdad                do               verdad
      sentencia;       falso             { sentencia1;
     while(condición);                     ...
                                           sentenciaN;       falso
    sentencia;                           } while(condición);
    sentencia;                          sentencia;
    ...                                 sentencia;
   }
                                        ...
                                       }

                                                                Página 11 de 15
Ingeniería Técnica Industrial
                                                             Fundamentos de Informática


                                                   Tema 5. Control de flujo del programa




   int suma = 0, num, i = 0;
   num = 0;
   do {
                                             Si la condición
      suma = suma + num;
                                             se cumple
      i++;
      scanf(“%i”, &num);
   } while (num >= 0 && i <= 20);
   printf(“La suma es %i n”, suma);
    La diferencia entre usar do while y while es que con el do while
al menos una vez se ejecuta el bucle, con while puede que no.

     switch + do while          Se utilizan para realizar MENÚS:
   void ver_menu( ) {
      char c;                                                   int c;
      do {
         printf("1. Añadirn");
         printf("2. Modificarn");
         printf("3. Eliminarn");
         printf("4. Salirn");
         printf("nIntroduzca la opción deseada: ");
         c = getche( );                                         scanf(“%i”, &c);
         switch (c) {
            case '1': insertar( ); break;                       case 1:
            case '2': modificar( ); break;                      case 2:
            case '3': borrar( ); break;                         case 3:
            case '4': break;                                    case 4:
            default: printf("nElija una opción correctan");
         }
      } while ( c != '4' );                                     } while (c != 4);
   }
   Este ejemplo es una mejora del hecho antes ya que muestra de
nuevo el menú mientras el usuario no seleccione la opción salir (4).


                                                                         Página 12 de 15
Ingeniería Técnica Industrial
                                                           Fundamentos de Informática


                                                 Tema 5. Control de flujo del programa



5.4.3 for
La sentencia for se utiliza cuando el número de veces que debe ser
repetido el bucle está definido. Si el número de repeticiones del
bucle es indefinido es mejor usar while o do while.
 for (expr_inic; condición; expr_incr)     for (expr_inic; condición; expr_incr)
      sentencia;                           {     sentencia1;
                                                 ...
                                                 sentenciaN;
                                           }
donde:
 expr_inic es una expresión que inicializa el bucle.
 condición es una expresión que determina si el bucle se ejecuta o no.
 expre_incr es una expresión que incrementa (decrementa) el
  índice del bucle cada vez que este se itera.
   Cualquiera de las tres partes del bucle for se puede omitir,
aunque deben permanecer los puntos y comas.
 Funcionamiento for
                                         falso
      for (expr_inic; condición; expr_incr)
      {                    verdad
         sentencia1;
         ...
         sentenciaN;
      }
      sentencia;
      ...
      }
El ejemplo anterior realizado con el while quedaría con el for así:
   int suma = 0, num, i;
   scanf(“%i”, &num);
   for ( i = 1; num >= 0 && i <= 20; i++)
   { suma = suma + num;
      scanf(“%i”, &num);
   }
   printf(“La suma es %i n”, suma);
                                                                      Página 13 de 15
Ingeniería Técnica Industrial
                                                                    Fundamentos de Informática


                                                          Tema 5. Control de flujo del programa



Los bucles for y los demás tipos de bucles los podemos anidar.
Ejemplo: tabla de multiplicar de los números pares entre el 10 y el 2.
   #include <stdio.h>
   #include <conio.h>
   int main(void)
   { int i, j;
      for ( i =10 ; i >= 2 ; i = i–2 )
      { printf("La tabla del %d nn", i);
         for ( j = 1 ; j <= 10 ; j++ )
             printf("%i x %i = %i n", i , j , i * j );
         printf("nn");
         getch( );
      }
      return 0;
   }
El for puede no tener expresión de inicialización y/o de incremento:
Ejemplo: Potencias de 2 que hay entre el 2 y el 1000000
   #include <stdio.h>                         #include <stdio.h>
   #include <conio.h>                         #include <conio.h>
   int main(void)                             int main(void)
   { float i = 2;                             { float i;
      for ( ; i <= 1000000 ;          )          for (i = 2; i <= 1000000; i = i * 2)
      { printf("%7.0f n", i);                   { printf("%7.0f n", i);
         i = i * 2;
      }                                            }
      getch( );                                   getch( );
      return 0                                    return 0;
   }                                          }
   Algunos bucles especiales son:
        Bucles infinitos  Son bucles cuya condición SIEMPRE se
         cumple  No terminan nunca.
        Bucles vacíos  Una sentencia vacía consiste en un ; sin
         más. Un posible uso sería para producir retardos.

                                                                               Página 14 de 15
Ingeniería Técnica Industrial
                                                                  Fundamentos de Informática


                                                        Tema 5. Control de flujo del programa




5.4.4 El bucle infinito
   Los bucles while, do while y for pueden ser bucles infinitos.
   En el bucle for se puede hacer un bucle sin fin teniendo la
expresión de condición vacía, como se muestra en este ejemplo:
   for( ; ; )       // al dejarlo en blanco la condición siempre se cumple
      printf("Este bucle se ejecuta de manera infinita");

   Lo mismo podemos aplicar al bucle while y al do while:
   while( 1 )       // al ser distinto de cero siempre se cumple
      printf("Este bucle se ejecuta de manera infinita");

5.4.5 Bucles vacíos
   El cuerpo de cualquier bucle puede ser vacío (‘;’).
   El siguiente ejemplo muestra un bucle de retardo usando for:
   for( i = 0; i < 100000; i++) ;

   El ‘;’ al final del for representa a una sentencia vacía (nos indica
que en el cuerpo del bucle no se realiza nada).
   for( i = 1; printf("%i n", i) && i < 10; i++)
      ;

   Este ejemplo imprime en pantalla los 10 primeros nº naturales. La
condición i<10 no impide que este nº se imprima ya que la
evaluación de la condición se realiza de izquierda a derecha y
entonces antes de comprobar la condición i<10 se ejecuta el printf.
   El mayor peligro de la sentencia nula se muestra en este ejemplo:
   i = 1;                                           i = 1;
                                 Ambos son
   while( i <= 10);                          while( i <= 10)
      printf("%d n", i++);      Equivalentes ;
                                                    printf("%d n", i++);
   Este programa no imprime los números del 1 al 10 (como parece
ser que ocurre), sino que nunca termina y no llega a imprimir nada.
                                                                             Página 15 de 15

More Related Content

What's hot (17)

Control difuso
Control difusoControl difuso
Control difuso
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Presentacion final
Presentacion finalPresentacion final
Presentacion final
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmos
 
Ii corte algoritmo_tr_1era_clase
Ii corte algoritmo_tr_1era_claseIi corte algoritmo_tr_1era_clase
Ii corte algoritmo_tr_1era_clase
 
Alexander timias
Alexander timiasAlexander timias
Alexander timias
 
GENERALIDADES SOBRE LOS ALGORITMOS
GENERALIDADES SOBRE LOS ALGORITMOS GENERALIDADES SOBRE LOS ALGORITMOS
GENERALIDADES SOBRE LOS ALGORITMOS
 
manual dfd
manual dfdmanual dfd
manual dfd
 
Introduccion a los algoritmos parte 1
Introduccion a los algoritmos parte    1Introduccion a los algoritmos parte    1
Introduccion a los algoritmos parte 1
 
Tutorial Definición de algoritmo
Tutorial Definición de algoritmo Tutorial Definición de algoritmo
Tutorial Definición de algoritmo
 
Prelógica
PrelógicaPrelógica
Prelógica
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Revista Futuro en el Presente.
Revista Futuro en el Presente.Revista Futuro en el Presente.
Revista Futuro en el Presente.
 
Paradigmasdeprogramacion
ParadigmasdeprogramacionParadigmasdeprogramacion
Paradigmasdeprogramacion
 
Gonza
GonzaGonza
Gonza
 
Pseudocdigo
PseudocdigoPseudocdigo
Pseudocdigo
 
computacion I
computacion Icomputacion I
computacion I
 

Viewers also liked (14)

Manual columnas
Manual columnasManual columnas
Manual columnas
 
Presentacion47w
Presentacion47wPresentacion47w
Presentacion47w
 
Presentacion27w
Presentacion27wPresentacion27w
Presentacion27w
 
Viñetas y numeración
Viñetas y numeraciónViñetas y numeración
Viñetas y numeración
 
Introduccion a word
Introduccion a wordIntroduccion a word
Introduccion a word
 
Panel de control de windows.
Panel de control de windows.Panel de control de windows.
Panel de control de windows.
 
Combinacion de Correspondencia con Word
Combinacion de Correspondencia con WordCombinacion de Correspondencia con Word
Combinacion de Correspondencia con Word
 
EJERCICIOS PAINT
EJERCICIOS PAINTEJERCICIOS PAINT
EJERCICIOS PAINT
 
Cómo se utiliza microsoft paint
Cómo se utiliza microsoft paintCómo se utiliza microsoft paint
Cómo se utiliza microsoft paint
 
Como usar Paint
Como usar PaintComo usar Paint
Como usar Paint
 
Herramienta Microsoft PAINT.
Herramienta Microsoft PAINT.Herramienta Microsoft PAINT.
Herramienta Microsoft PAINT.
 
Trabajo de computacion en equipos
Trabajo de computacion en equiposTrabajo de computacion en equipos
Trabajo de computacion en equipos
 
EJERCICIOS DE PAINT
EJERCICIOS DE PAINTEJERCICIOS DE PAINT
EJERCICIOS DE PAINT
 
Sugestões de atividades com o Paint
 Sugestões de atividades com o Paint Sugestões de atividades com o Paint
Sugestões de atividades com o Paint
 

Similar to CONTROL DE FLUJO DEL PROGRAMA

Fpr0407 control
Fpr0407 controlFpr0407 control
Fpr0407 controllabebelo
 
Utp pti_s4_instrucciones de control
 Utp pti_s4_instrucciones de control Utp pti_s4_instrucciones de control
Utp pti_s4_instrucciones de controljcbenitezp
 
Utp pti_s4_instrucciones de control 2012-2
 Utp pti_s4_instrucciones de control 2012-2 Utp pti_s4_instrucciones de control 2012-2
Utp pti_s4_instrucciones de control 2012-2jcbenitezp
 
Utp lpi_s4_instrucciones de control 2012-2
 Utp lpi_s4_instrucciones de control 2012-2 Utp lpi_s4_instrucciones de control 2012-2
Utp lpi_s4_instrucciones de control 2012-2jcbenitezp
 
Iv unidad estructuras de control
Iv unidad estructuras de controlIv unidad estructuras de control
Iv unidad estructuras de controlmariaisabelg
 
Iv unidad estructuras de control
Iv unidad estructuras de controlIv unidad estructuras de control
Iv unidad estructuras de controlmariaisabelg
 
Tema 2 - Programación básica en C (III)
Tema 2  - Programación básica en C (III)Tema 2  - Programación básica en C (III)
Tema 2 - Programación básica en C (III)Pablo Haya
 
Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Javaquesada_diego
 
Estructuras condicionales
Estructuras condicionalesEstructuras condicionales
Estructuras condicionalesSTEVENZAFIRO
 
Ejemplo C++
Ejemplo C++Ejemplo C++
Ejemplo C++David
 
Tema 3 sentencias de control de java por gio
Tema 3   sentencias de control de java por gioTema 3   sentencias de control de java por gio
Tema 3 sentencias de control de java por gioRobert Wolf
 
ESTRUCTURAS DE SELECCIÓN SENTENCIAS IF Y SWITCH EN C++
ESTRUCTURAS DE SELECCIÓN SENTENCIAS IF Y SWITCH EN C++ESTRUCTURAS DE SELECCIÓN SENTENCIAS IF Y SWITCH EN C++
ESTRUCTURAS DE SELECCIÓN SENTENCIAS IF Y SWITCH EN C++die_dex
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de controlFernando Solis
 
Lenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de ControlLenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de ControlKarina Arguedas Ruelas
 
Php04 estructuras control
Php04 estructuras controlPhp04 estructuras control
Php04 estructuras controlJulio Pari
 

Similar to CONTROL DE FLUJO DEL PROGRAMA (20)

Fpr0407 control
Fpr0407 controlFpr0407 control
Fpr0407 control
 
Clase 3 Unidad 2 Parte 2
Clase 3 Unidad 2 Parte 2Clase 3 Unidad 2 Parte 2
Clase 3 Unidad 2 Parte 2
 
Utp pti_s4_instrucciones de control
 Utp pti_s4_instrucciones de control Utp pti_s4_instrucciones de control
Utp pti_s4_instrucciones de control
 
Utp pti_s4_instrucciones de control 2012-2
 Utp pti_s4_instrucciones de control 2012-2 Utp pti_s4_instrucciones de control 2012-2
Utp pti_s4_instrucciones de control 2012-2
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Utp lpi_s4_instrucciones de control 2012-2
 Utp lpi_s4_instrucciones de control 2012-2 Utp lpi_s4_instrucciones de control 2012-2
Utp lpi_s4_instrucciones de control 2012-2
 
Iv unidad estructuras de control
Iv unidad estructuras de controlIv unidad estructuras de control
Iv unidad estructuras de control
 
Iv unidad estructuras de control
Iv unidad estructuras de controlIv unidad estructuras de control
Iv unidad estructuras de control
 
Tema 2 - Programación básica en C (III)
Tema 2  - Programación básica en C (III)Tema 2  - Programación básica en C (III)
Tema 2 - Programación básica en C (III)
 
Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Java
 
Estructuras condicionales
Estructuras condicionalesEstructuras condicionales
Estructuras condicionales
 
Ejemplo C++
Ejemplo C++Ejemplo C++
Ejemplo C++
 
Tema 3 sentencias de control de java por gio
Tema 3   sentencias de control de java por gioTema 3   sentencias de control de java por gio
Tema 3 sentencias de control de java por gio
 
Clase 6
Clase 6Clase 6
Clase 6
 
ESTRUCTURAS DE SELECCIÓN SENTENCIAS IF Y SWITCH EN C++
ESTRUCTURAS DE SELECCIÓN SENTENCIAS IF Y SWITCH EN C++ESTRUCTURAS DE SELECCIÓN SENTENCIAS IF Y SWITCH EN C++
ESTRUCTURAS DE SELECCIÓN SENTENCIAS IF Y SWITCH EN C++
 
20.estructuras-control.pdf
20.estructuras-control.pdf20.estructuras-control.pdf
20.estructuras-control.pdf
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Lenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de ControlLenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de Control
 
Php04 estructuras control
Php04 estructuras controlPhp04 estructuras control
Php04 estructuras control
 

More from karlalopezbello

03 -fundamentos_de_la_tecnologia_orientada_a_objetos
03  -fundamentos_de_la_tecnologia_orientada_a_objetos03  -fundamentos_de_la_tecnologia_orientada_a_objetos
03 -fundamentos_de_la_tecnologia_orientada_a_objetoskarlalopezbello
 
02 -introduccion_a_la_tecnologia_orientada_a_objetos
02  -introduccion_a_la_tecnologia_orientada_a_objetos02  -introduccion_a_la_tecnologia_orientada_a_objetos
02 -introduccion_a_la_tecnologia_orientada_a_objetoskarlalopezbello
 
Programacion ii modulo3-leccion2
Programacion ii modulo3-leccion2Programacion ii modulo3-leccion2
Programacion ii modulo3-leccion2karlalopezbello
 
Programacion ii modulo3-leccion1
Programacion ii modulo3-leccion1Programacion ii modulo3-leccion1
Programacion ii modulo3-leccion1karlalopezbello
 
Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3karlalopezbello
 
Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2karlalopezbello
 
Programacion ii modulo2-leccion1
Programacion ii modulo2-leccion1Programacion ii modulo2-leccion1
Programacion ii modulo2-leccion1karlalopezbello
 
Programacion ii modulo1-leccion1-
Programacion ii modulo1-leccion1-Programacion ii modulo1-leccion1-
Programacion ii modulo1-leccion1-karlalopezbello
 
Sistemas de comunicacion
Sistemas de comunicacionSistemas de comunicacion
Sistemas de comunicacionkarlalopezbello
 
Introduccion unegvirtual
Introduccion unegvirtualIntroduccion unegvirtual
Introduccion unegvirtualkarlalopezbello
 
Guia para montar_el_aula_1_
Guia para montar_el_aula_1_Guia para montar_el_aula_1_
Guia para montar_el_aula_1_karlalopezbello
 
Configuracion del perfil
Configuracion del perfilConfiguracion del perfil
Configuracion del perfilkarlalopezbello
 
Configuracion del perfil
Configuracion del perfilConfiguracion del perfil
Configuracion del perfilkarlalopezbello
 

More from karlalopezbello (20)

03 -fundamentos_de_la_tecnologia_orientada_a_objetos
03  -fundamentos_de_la_tecnologia_orientada_a_objetos03  -fundamentos_de_la_tecnologia_orientada_a_objetos
03 -fundamentos_de_la_tecnologia_orientada_a_objetos
 
02 -introduccion_a_la_tecnologia_orientada_a_objetos
02  -introduccion_a_la_tecnologia_orientada_a_objetos02  -introduccion_a_la_tecnologia_orientada_a_objetos
02 -introduccion_a_la_tecnologia_orientada_a_objetos
 
Programacion ii modulo3-leccion2
Programacion ii modulo3-leccion2Programacion ii modulo3-leccion2
Programacion ii modulo3-leccion2
 
Programacion ii modulo3-leccion1
Programacion ii modulo3-leccion1Programacion ii modulo3-leccion1
Programacion ii modulo3-leccion1
 
Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3Programacion ii modulo2-leccion3
Programacion ii modulo2-leccion3
 
Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2
 
Programacion ii modulo2-leccion1
Programacion ii modulo2-leccion1Programacion ii modulo2-leccion1
Programacion ii modulo2-leccion1
 
Programacion ii modulo1-leccion1-
Programacion ii modulo1-leccion1-Programacion ii modulo1-leccion1-
Programacion ii modulo1-leccion1-
 
Didactica del chat
Didactica del chatDidactica del chat
Didactica del chat
 
Didactica del foro
Didactica del foroDidactica del foro
Didactica del foro
 
Guia completa de_moodle
Guia completa de_moodleGuia completa de_moodle
Guia completa de_moodle
 
Publicacion de material
Publicacion de materialPublicacion de material
Publicacion de material
 
Sistemas de comunicacion
Sistemas de comunicacionSistemas de comunicacion
Sistemas de comunicacion
 
Actividades en moodle
Actividades en moodleActividades en moodle
Actividades en moodle
 
Plataforma moodle
Plataforma moodlePlataforma moodle
Plataforma moodle
 
Introduccion unegvirtual
Introduccion unegvirtualIntroduccion unegvirtual
Introduccion unegvirtual
 
Guia para montar_el_aula_1_
Guia para montar_el_aula_1_Guia para montar_el_aula_1_
Guia para montar_el_aula_1_
 
Configuracion del perfil
Configuracion del perfilConfiguracion del perfil
Configuracion del perfil
 
Configuracion del perfil
Configuracion del perfilConfiguracion del perfil
Configuracion del perfil
 
Transparencias7
Transparencias7Transparencias7
Transparencias7
 

CONTROL DE FLUJO DEL PROGRAMA

  • 1. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa TEMA 5. CONTROL DE FLUJO DEL PROGRAMA 5.1 Sentencias Una sentencia es una expresión seguida de un punto y coma. Sentencia  Instrucción  Expresión  Operadores + Operandos Sintaxis: Sentencia ; El ; es obligatorio Las sentencias se ejecutan una tras otra, en EL MISMO ORDEN en que han sido escritas  Para cambiar ese orden están las SENTENCIAS DE CONTROL DE FLUJO  En función de una condición deciden qué sentencia, o bloque de sentencias, es la siguiente en ejecutarse. Pueden ser clasificadas en dos categorías:  Estructuras de selección  Estructuras de repetición 5.2 Sentencias compuestas (bloques) Una sentencia compuesta o bloque es un grupo de sentencias agrupadas entre llaves { y }. Son sintácticamente equivalentes a una sentencia simple. Presentan la siguiente sintaxis: { /* comienzo del bloque */ <directivas> /* (#include, #define, etc.) */ <declaraciones> /* declaraciones de variables locales */ <sentencias> /* conjunto opcional de sentencias */ } /* final del bloque */ 5.3 Estructuras de selección (sentencias condicionales) Permiten ejecutar unas sentencias u otras en función de una condición:  if else, switch Página 1 de 15
  • 2. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa 5.3.1 if else Se utiliza para expresar decisiones. Sintaxis general: if (condición) sentencia1; /* se ejecuta si condición es verdadera */ else sentencia2; /* se ejecuta si condición es falsa */ Opcional La forma general del if con bloques de sentencia es: if (condición) { sentencia_1; falso ... sentencia_n; verdad } else { sentencia_n+1; ... Opcional sentencia_n+m; } sentencia_k ... condición == true  se ejecuta sentencias 1, 2, … n y k condición == false  se ejecuta sentencias n+1, n+2,…n+m y k float nota; ... if (nota >= 5) puts("Enhorabuena, has aprobado.n"); else { puts("Lo siento, has suspendido.n"); puts("Bueno, otra vez será"); } ... Como en la parte if tenemos una sentencia simple las '{' '}' no son necesarias, pero en la parte else si hacen falta ya que tenemos un bloque formado por dos sentencias. Página 2 de 15
  • 3. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa 5.3.1.1 if anidados Una sentencia if puede tener anidada otra sentencia if y así sucesivamente. Un if anidado es una sentencia if insertada dentro de otro if o else. Debido a que la parte else es optativa, existe una ambigüedad cuando un else se omite de una secuencia if anidada. float nota; float nota; ... ... if (nota < 5) if (nota < 5) if (practica > 6) { if (practica > 6) nota = nota + 1; nota = nota + 1; else else nota = nota - 0.5; nota = nota - 0.5; printf("La nota es %.2f n", nota); } ... printf("La nota es %.2f n", nota); ... ¿A que if está asociado el else? El else se asocia con el if anterior más cercano que no tenga else. Ambos ejemplos son, por tanto, totalmente equivalentes. En caso de duda, o para realizar una acción diferente (asociar el else con el otro if) podemos utilizar llaves para alterar la asociación: Dependiendo del lugar donde pongamos las llaves, el significado del mismo código fuente varía considerablemente: float nota; ... if (nota < 5) { if (practica > 6) nota = nota + 1; } else nota = nota - 0.5; printf("La nota sacada es %f n", nota); ... Página 3 de 15
  • 4. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa 5.3.1.2 else-if Es la forma más general de escribir una decisión múltiple: if (condición) sentencia o bloque; else if (condición) sentencia o bloque; ... else if (condición) sentencia o bloque; else sentencia o bloque; Opcional ... El último else maneja el caso "si no se cumple ninguno de los anteriores". Este último else no es obligatorio. Ejemplo: float nota; ... if (nota = = 10) { puts("Matricula de Honor n"); puts("Enhorabuena n"); } else if (nota >= 9) puts("Sobresaliente n"); else if (nota >= 7) puts("Notable n"); else if (nota >= 5) puts("Aprobado n"); else { puts("Suspenso n"); puts("Lo siento mucho n"); } Página 4 de 15
  • 5. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa 5.3.2 switch switch (vble/expresión) { case valor1: sentencia1.1; … sentencia1.n; deben ser DIFERENTES break; < Todos los valores case valor2: sentencia2.1; … sentencia2.n; break; < Opcional ... case valorN: sentenciaN.1; … sentenciaN.n; break; < default: sentenciaD.1; … sentenciaD.n; }  valor es un valor o expresión constante entera.  default es opcional, se ejecuta si no se cumple ningún case.  Un switch puede tener anidada otro switch en algun case. Funcionamiento: 1. Se compara el valor de vble/expresión contenida en los paréntesis del switch, con los distintos valores constantes enteros case. 2. Se ejecutarán aquellas sentencias cuyo case tenga un valor igual al de la vble/expresión. 3. El resto de sentencias existentes en los case posteriores (y default si existe) también se ejecutan a menos que se encuentre una sentencia break. 4. Si ningún valor coincide con vble/expresión  Se ejecutarán las sentencias asociadas al apartado default (en caso que exista). 5. Si ningún case coincide y no hay default no se ejecuta nada Página 5 de 15
  • 6. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa  Funcionamiento switch int main() int main() { ... { ... vble=1; vble=2; ... ... switch(vble) switch(vble) { case 1: sentencia1; { case 1: sentencia1; case 2: sentencia2; case 2: sentencia2; sentencia3; sentencia3; break; break; case 3: sentencia4; case 3: sentencia4; break; break; default: sentencia5; default: sentencia5; } } sentencia6; sentencia6; ... ... } } int main() int main() { ... { ... vble=7; vble=5; ... ... switch(vble) switch(vble) { case 1: sentencia1; { case 1: sentencia1; case 2: sentencia2; break; sentencia3; case 2: sentencia2; break; sentencia3; case 3: sentencia4; case 3: sentencia4; break; sentencia5; default: sentencia5; break; } } sentencia6; sentencia6; ... ... } } int main() int main() { ... { ... a=1;b=3; a=1;b=2; switch(a) switch(a) { case 1: sentencia1; { case 1: sentencia1; case 2: if (b == 3) case 2: if (b == 3) { sentencia2; { sentencia2; break; break; } } sentencia3; sentencia3; case 3: sentencia4; case 3: sentencia4; break; break; } } sentencia5; sentencia5; ... ... } } Página 6 de 15
  • 7. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa La sentencia switch se utiliza frecuentemente para procesar selecciones de menú, como la mostrada en el siguiente ejemplo: void ver_menu( ) { char c; printf("1. Añadirn"); printf("2. Modificarn"); printf("3. Eliminarn"); printf("nIntroduzca la opción deseada: "); c = getche( ); // lee una tecla y la muestra en pantalla switch (c) { case '1': insertar( ); // si la tecla pulsada es 1 se ejecuta insertar( ) break; case '2': // si la tecla pulsada es 2 se ejecuta modificar( ) modificar( ); break; case '3': // si la tecla pulsada es 3 se ejecuta borrar( ) borrar( ); break; default: // si no es ninguna de ellas muestra un mensaje printf("nElija una opción correctan"); } } El switch es una alternativa al uso de else if, pero no siempre: La sentencia switch sólo puede comprobar la igualdad, mientras que el if puede evaluar cualquier expresión relacional o lógica. Por ejemplo, no es posible realizar con la sentencia switch el ejemplo realizado con la sentencia else if que consistía en escribir en pantalla la calificación sacada por los alumnos en función de sus notas, ya que una sentencia switch sólo puede comprobar la igualdad, mientras que en ese ejemplo nos hace falta usar operadores relacionales (>=) distintos a los de igualdad (==). Página 7 de 15
  • 8. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa Para ilustrar la equivalencia entre el uso del switch y el uso del else if veamos un ejemplo realizado de las dos formas: Uso de la estructura else if: Uso de la estructura switch: int x, y, op, suma, resta; int x, y, op, suma, resta; float cociente; float cociente; printf("1. Sumar n"); printf("1. Sumar n"); printf("2. Dividir n"); printf("2. Dividir n"); printf("3. Calcular Cociente n"); printf("3. Calcular Cociente n"); printf("4. Restar n"); printf("4. Restar n"); printf("nElija opcion: "); printf("nElija opcion: "); scanf(“%i”, &op); scanf(“%i”, &op); if (op == 1) switch (op) { suma = x + y; case 1 : suma = x + y; break; else if (op == 2 | | op == 3 ) case 2 : { case 3 : if (y = = 0) switch (y) printf("Error: división por 0n"); { case 0: printf("Error: division por 0 n"); else break; { cociente = x / (float)y; default: cociente = (float)x / y; printf(“%g n”, cociente); printf(“%g n”, cociente); } } } break; else if (op == 4) case 4: resta = x - y; resta = x - y; break; else default : printf("Opción incorrecta n"); printf("Opción incorrecta n"); } } ... ... Página 8 de 15
  • 9. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa Del análisis de este ejemplo, se puede ver lo siguiente:  Pueden existir etiquetas case vacías  Un conjunto de sentencias dentro de un case no necesitan '{' y '}'.  Una sentencia switch puede tener anidada otra sentencia switch.  Sin la sentencia break al final del grupo de sentencias de case, el conjunto de sentencias contenidas en el resto de etiquetas case también se ejecutarían. Para comprender mejor estas observaciones veamos este ejemplo: int tecla; ... tecla = toupper( getch( ) ); // lee una tecla sin hacer eco en // pantalla y la pasa a mayusculas switch (tecla) { case 'A': puts(" Has pulsado la A n"); case 'E': case 'I': case 'O': puts("No has pulsado una consonante n"); case 'U': puts("Has pulsado una vocal n"); break; case 'Z': case 'X': puts("Has pulsado la X o la Z n"); puts("Has pulsado una consonante n"); break; default: puts("No has pulsado ni la X ni la Z n"; puts("No has pulsado una vocal n"); } Si pulsamos la tecla A aparece en pantalla los siguientes mensajes: Has pulsado la A No has pulsado una consonante Has pulsado una vocal Si pulsamos la I: Si pulsamos la Z: No has pulsado una consonante Has pulsado la X o la Z Has pulsado una vocal Has pulsado una consonante Página 9 de 15
  • 10. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa 5.4 Estructuras de repetición Permiten iterar el flujo de ejecución de un programa dentro de un bloque de sentencias mientras se verifique una condición. Las estructuras de repetición del lenguaje C son las siguientes:  while, do while, for ¿Conocemos cuántas veces hay que repetir un conjunto de instrucciones (o una sola)?:  Sí  Usamos un bucle for.  No  ¿Esas instrucciones debe ejecutarse al menos una vez ?:  Sí  Usamos un bucle do while.  No Usamos un bucle while. 5.4.1 while La sentencia while se utiliza para expresar bucles. while (condición) while (condición) sentencia; { sentencia1; ... sentencia1; }  Funcionamiento while int main () int main () {... falso {... falso while(condición) verdad while(condición) verdad sentencia; { sentencia1; sentencia; ... sentenciaN; sentencia; } ... sentencia; } sentencia; ... } Página 10 de 15
  • 11. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa Como la expresión es evaluada al principio, si no se verifica la expresión, no se ejecutan las sentencias del bucle while. int suma = 0, num, i = 1; scanf(“%i”, &num); while (num >= 0 && i <= 20) { suma = suma + num; Si la condición i++; no se cumple scanf(“%i”, &num); } printf(“La suma es %i n”, suma); Este programa pide números por teclado y los va sumando hasta que introduzca un número negativo o lleve pedidos 20 números. Si al principio mete un número negativo, no suma ninguno. 5.4.2 do while Similar al while, excepto que 1º se ejecutan las sentencias y luego se evalúa la condición (las sentencias se ejecutan al menos 1 vez). do do sentencia; { sentencia1; ... while (condición) ; sentenciaN; ¡Ojo! } while (condición) ; ¡Ojo!  Funcionamiento do while int main () int main () {... {... do verdad do verdad sentencia; falso { sentencia1; while(condición); ... sentenciaN; falso sentencia; } while(condición); sentencia; sentencia; ... sentencia; } ... } Página 11 de 15
  • 12. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa int suma = 0, num, i = 0; num = 0; do { Si la condición suma = suma + num; se cumple i++; scanf(“%i”, &num); } while (num >= 0 && i <= 20); printf(“La suma es %i n”, suma); La diferencia entre usar do while y while es que con el do while al menos una vez se ejecuta el bucle, con while puede que no. switch + do while  Se utilizan para realizar MENÚS: void ver_menu( ) { char c; int c; do { printf("1. Añadirn"); printf("2. Modificarn"); printf("3. Eliminarn"); printf("4. Salirn"); printf("nIntroduzca la opción deseada: "); c = getche( ); scanf(“%i”, &c); switch (c) { case '1': insertar( ); break; case 1: case '2': modificar( ); break; case 2: case '3': borrar( ); break; case 3: case '4': break; case 4: default: printf("nElija una opción correctan"); } } while ( c != '4' ); } while (c != 4); } Este ejemplo es una mejora del hecho antes ya que muestra de nuevo el menú mientras el usuario no seleccione la opción salir (4). Página 12 de 15
  • 13. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa 5.4.3 for La sentencia for se utiliza cuando el número de veces que debe ser repetido el bucle está definido. Si el número de repeticiones del bucle es indefinido es mejor usar while o do while. for (expr_inic; condición; expr_incr) for (expr_inic; condición; expr_incr) sentencia; { sentencia1; ... sentenciaN; } donde:  expr_inic es una expresión que inicializa el bucle.  condición es una expresión que determina si el bucle se ejecuta o no.  expre_incr es una expresión que incrementa (decrementa) el índice del bucle cada vez que este se itera. Cualquiera de las tres partes del bucle for se puede omitir, aunque deben permanecer los puntos y comas.  Funcionamiento for falso for (expr_inic; condición; expr_incr) { verdad sentencia1; ... sentenciaN; } sentencia; ... } El ejemplo anterior realizado con el while quedaría con el for así: int suma = 0, num, i; scanf(“%i”, &num); for ( i = 1; num >= 0 && i <= 20; i++) { suma = suma + num; scanf(“%i”, &num); } printf(“La suma es %i n”, suma); Página 13 de 15
  • 14. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa Los bucles for y los demás tipos de bucles los podemos anidar. Ejemplo: tabla de multiplicar de los números pares entre el 10 y el 2. #include <stdio.h> #include <conio.h> int main(void) { int i, j; for ( i =10 ; i >= 2 ; i = i–2 ) { printf("La tabla del %d nn", i); for ( j = 1 ; j <= 10 ; j++ ) printf("%i x %i = %i n", i , j , i * j ); printf("nn"); getch( ); } return 0; } El for puede no tener expresión de inicialización y/o de incremento: Ejemplo: Potencias de 2 que hay entre el 2 y el 1000000 #include <stdio.h> #include <stdio.h> #include <conio.h> #include <conio.h> int main(void) int main(void) { float i = 2; { float i; for ( ; i <= 1000000 ; ) for (i = 2; i <= 1000000; i = i * 2) { printf("%7.0f n", i); { printf("%7.0f n", i); i = i * 2; } } getch( ); getch( ); return 0 return 0; } } Algunos bucles especiales son:  Bucles infinitos  Son bucles cuya condición SIEMPRE se cumple  No terminan nunca.  Bucles vacíos  Una sentencia vacía consiste en un ; sin más. Un posible uso sería para producir retardos. Página 14 de 15
  • 15. Ingeniería Técnica Industrial Fundamentos de Informática Tema 5. Control de flujo del programa 5.4.4 El bucle infinito Los bucles while, do while y for pueden ser bucles infinitos. En el bucle for se puede hacer un bucle sin fin teniendo la expresión de condición vacía, como se muestra en este ejemplo: for( ; ; ) // al dejarlo en blanco la condición siempre se cumple printf("Este bucle se ejecuta de manera infinita"); Lo mismo podemos aplicar al bucle while y al do while: while( 1 ) // al ser distinto de cero siempre se cumple printf("Este bucle se ejecuta de manera infinita"); 5.4.5 Bucles vacíos El cuerpo de cualquier bucle puede ser vacío (‘;’). El siguiente ejemplo muestra un bucle de retardo usando for: for( i = 0; i < 100000; i++) ; El ‘;’ al final del for representa a una sentencia vacía (nos indica que en el cuerpo del bucle no se realiza nada). for( i = 1; printf("%i n", i) && i < 10; i++) ; Este ejemplo imprime en pantalla los 10 primeros nº naturales. La condición i<10 no impide que este nº se imprima ya que la evaluación de la condición se realiza de izquierda a derecha y entonces antes de comprobar la condición i<10 se ejecuta el printf. El mayor peligro de la sentencia nula se muestra en este ejemplo: i = 1; i = 1; Ambos son while( i <= 10); while( i <= 10) printf("%d n", i++); Equivalentes ; printf("%d n", i++); Este programa no imprime los números del 1 al 10 (como parece ser que ocurre), sino que nunca termina y no llega a imprimir nada. Página 15 de 15