Вы находитесь на странице: 1из 19

Unidad IV. Estructuras de control iterativas.

Fundamentos de Programacin.
Ingeniera en Sistemas Computacionales.
Departamento: Sistemas y Computacin ITV.
Estructuras de Control Iterativas.
Estructuras bsicas de repeticin.

Estructura while.

Estructura do / while.

Estructura for.

Sentencia break y continue.
Temas :
Lgica de Programacin.
Introduccin.
A menudo es necesario ejecutar una instruccin o un
bloque de instrucciones ms de una vez.

Ejemplo

Implementar un programa que calcule la suma de N
nmeros ledos desde el teclado.

Podramos escribir un programa en el que apareciese
repetido el cdigo que deseamos que se ejecute varias
veces, pero

Nuestro programa podra ser demasiado largo.

Gran parte del cdigo estara duplicado, lo que
dificultara su mantenimiento en caso de que
tuvisemos que hacer cualquier cambio, por trivial
que fuese ste.

Una vez escrito el programa para un nmero
determinado de repeticiones, no podramos utilizar
el mismo programa para realizar un numero distinto
de operaciones.


Lgica de Programacin.
Estructuras bsicas de repeticin.
Representacin algortmica estructuras bsicas de repeticin
Por contador. Por centinela.
Lgica de Programacin.
Estructuras de repeticin en C.
while do / while for
while ( expresion)
sentencia;
do
sentencia;
while ( expresion);

for ( inicializacin ; expresin ; actualizacin )
sentencia;
Lgica de Programacin.
Estructura de Control while.
Lgica de Programacin.
La expresin es verificada al inicio de la ejecucin del bucle, si inicialmente es
false el cuerpo del bucle nunca se ejecutara.
Permite la ejecucin de un conjunto de sentencias mientras se cumpla
una condicin dada por una expresin lgica.

while (expresion)
sentencia;

expresin
Sentencia
SI
(TRUE)
NO
(FALSE)

while (expresion)
{
sentencia1;
.
sentenciaN;
}

Ejemplo- Elabore un programa que determine el promedio de un alumno.
#include "stdio.h"
#include "conio.h"

void main(void)
{
char nombre[40];
int calif, noCalif;
float promedio;

// variables auxiliares.
int cn; // variable de control.
int suma ; // acumulador.

printf("Dame el nombre : ");
gets(nombre);

printf("Dame el no. de Calificaciones : ");
scanf("%d", &noCalif);



/ inicializacion

suma =0;
cn = 1 ;

while ( cn <= noCalif)
{ printf("Dame la calficacion No. %d : ",cn );
scanf("%d", &calif);

suma = suma + calif;

cn++;
}

promedio = (float) suma / noCalif;
printf("%-40s promedio = %5.1f", nombre, promedio);

getch();
}
ones calificaci de Nmero n
n
on calificaci
promedio
n
i
i

.
1
Lgica de Programacin.
Acumulacin y operadores de asignacin.
Lgica de Programacin.
Estructura de control do / while.
Lgica de Programacin.
Este bucle es similar al while, a excepcin de que la condicin que controla el
bucle es verificada al final del bloque del bucle. Esto significa que el cuerpo del
bucle se ejecutara al menos una vez, aun si la expresin es false.
expresion
sentencia

SI
(TRUE)
NO
(FALSE)

do
sentencia;
while (expresion) ;


do {
sentencia 1;
..
sentencia N;
} while (expresion);

Ejemplo- Elabore un programa que determine el promedio de un alumno.
ones calificaci de Nmero n
n
on calificaci
promedio
n
i
i

.
1
#include "stdio.h"
#include "conio.h"
#include "ctype.h"

void main(void)
{ char nombre[40];
int calif, noCalif;
float promedio;

// variables auxiliares.
int suma ;
char respuesta;

printf("Dame el nombre : ");
gets(nombre);

// inicializacion
suma =0;
noCalif = 0 ;



do
{ printf("Dame la calficacion No. %d : ",noCalif );
scanf("%d", &calif);

suma = suma + calif;

noCalif++;

printf("Existe otra calificacion (s/n) : ");
respuesta = tolower(getche());

}while ( respuesta != 'n');

promedio = (float) suma / noCalif;

printf("%-40s promedio = %5.1f", nombre, promedio);

getch();
}

Lgica de Programacin.

for (inicializacion ; expresion; actualizacion)
{
sentencia1;

sentenciaN;
}

Estructura de control for.
Lgica de Programacin.
expre
sion
sentencia
SI
(TRUE)
NO
(FALSE)
inicializacion
actualizacion

for (inicializacion ; expresion; actualizacion)
sentencia;

Se suele emplear en sustitucin del bucle while cuando se conoce el nmero de
iteraciones que hay que realizar.
Ejemplo- Elabore un programa que determine el promedio de un alumno.
ones calificaci de Nmero n
n
on calificaci
promedio
n
i
i

.
1
#include "stdio.h"
#include "conio.h"

void main(void)
{ char nombre[40];
int calif, noCalif;
float promedio;

// variables auxiliares.
int cn, suma ;

printf("Dame el nombre : ");
gets(nombre);

printf("Dame el no. de Calificaciones : ");
scanf("%d", &noCalif);




// inicializacion
suma =0;

for( cn = 1 ; cn <= noCalif ; cn++)
{ printf("Dame la calficacion No. %d : ",cn );
scanf("%d", &calif);

suma = suma + calif;

}

promedio = (float) suma / noCalif;
printf("%-40s promedio = %5.1f", nombre, promedio);

getch();
}

Lgica de Programacin.
Bucles dentro de Bucles.
Ejemplo . Para un grupo de alumnos, los cuales presentaron N unidades de evaluacin, Determine:
Promedio de cada alumno.
El porcentaje de alumnos aprobados.
Promedio general del grupo.
Unid <=
noUnid
Input
calif
suma = suma +calif
unid = unid +1
unid = 1
suma = 0
promedio = suma/noUnid
Output
promedio
Respuesta == s
Para un
alumno
noAlumno ++
Input
(otro alumno)
respuesta
noAlumno = 0
Para un alumno.
solo ilustrativo, faltan:
Acumulador para el promedio general.
Contador de alumnos aprobados.
Lgica de Programacin.
Codificacin
#include "stdio.h"
#include "conio.h"

void main(void)
{ char nombre[40];
int calif, noCalif;
float promedio;
char respuesta;


// variables auxiliares.
int cn, suma ;
int numeroAlumnos, numeroAprobados;
float porcentajeAprobados;


printf("Dame el no. de Calificaciones : ");
scanf("%d", &noCalif);

numeroAprobados = 0;
numeroAlumnos =0;



do
{ fflush(stdin);
printf("Dame el nombre : ");
gets(nombre);

// inicializacion
suma =0;

for( cn = 1 ; cn <= noCalif ; cn++)
{ printf("Dame la calficacion No. %d : ",cn );
scanf("%d", &calif);
suma = suma + calif;
}

promedio = (float) suma / noCalif;
printf("%-40s promedio = %5.1f\n\n", nombre, promedio);

if (promedio >= 70)
numeroAprobados++;

numeroAlumnos++;

printf("Existe otro alumno (s/n) : \n");
respuesta = getche();

} while (respuesta == 's');

porcentajeAprobados = (float) numeroAprobados / numeroAlumnos *100.0f;

printf("\nPorcentaje de aprobados : %10.2f %%\n", porcentajeAprobados);

getch();
}
Ejercicio.

Modifique el programa para determinar el
promedio general del grupo
Lgica de Programacin.
Control general del flujo.
Sentencia break

La sentencia break nos permite salirnos de un bloque de sentencias o
del bucle que estamos ejecutando, sin ejecutar las sentencias que
resten para el final o las restantes iteraciones del bucle. Por ejemplo:

i = 5;
do {

i--;
if (i == 3) break;
}while (i > 0);


Sentencia continue

La sentencia continue solo es valida para bucles, sirve para no ejecutar
las sentencias que restan para la finalizacin de una iteracin de ese
bucle, continuando despus con las siguientes iteraciones del bucle.
Lgica de Programacin.
Ejemplo.- Para un grupo de N alumnos, los cuales presentaron Ne
unidades de evaluacin. Elabore un programa que determine: El
porcentaje de alumnos aprobados en cada unidad.

Una unidad es aprobada si la calificacin es mayor o igual a 70.
#include "stdio.h"
#include "conio.h"

void main(void)
{ int numeroAlumnos, numeroUnidades;
int na, nu;
int alumnosAprobados;
int calificacion;
float porcentaje;

printf("Numero de alumnos : ");
scanf("%i",&numeroAlumnos);

printf("Numero de unidades : ");
scanf("%i", &numeroUnidades);







for(nu= 1 ; nu <=numeroUnidades ; nu++)
{
printf("Unidad no. %i \n",nu);
alumnosAprobados =0;
for (na = 1 ; na <= numeroAlumnos; na++)
{ printf("Califiacion del alumno no %i ",na);
scanf("%i",&calificacion);
if( calificacion >= 70)
alumnosAprobados++;
}
porcentaje = (float) alumnosAprobados /numeroAlumnos
*100.0;

printf("unidad %i porcentaje %10.2f \n",nu,porcentaje);
}

getch();
}

Lgica de Programacin.
Ejemplo. Elabore un algoritmo para determinar el valor aproximado de e
x
, a
partir de la siguiente serie.
#include "stdio.h"
#include "conio.h"

void main(void)
{ float x , ex ;
int nt , n, k ;
double factn;
float termino,suma ;

printf("Valor de x : ");
scanf("%f",&x);

printf("Numero de Terminos : ");
scanf("%d", &nt);



Calculo del factorial

! 4 ! 3 ! 2
1
4 3 2
x x x
x e
x
Considere que:

A) El nmero de trminos a incluir en la serie ser definido por el usuario.
for(suma =0, n = 0; n <= nt - 1 ; n++)
{
for( factn = 1 , k = 1 ; k <= n ; k++)
factn *= k;

termino = pow( x , n ) / factn ;

suma += termino;
}

ex = suma ;

printf("exp(%f ) = %10.2f \n",x,ex);
printf("valor exacto = %10.2f \n",exp(x) );

getch();
}
Lgica de Programacin.
Contador.
Versin no. 2

n=0;
do {
for( factn = 1 , k = 1 ; k <= n ; k++)
factn *= k;

termino = pow( x , n ) / factn ;

suma += termino;
n++;
} while ( fabs(termino) > eps);

ex = suma ;

printf("exp(%f ) = %10.2f \n",x,ex);
printf("No. de terminos necesarios = %d\n", n);
printf("valor exacto = %10.2f \n",exp(x) );

getch();
}
Centinela.
B) El usuario indicara un margen de error (psilon) y tomara como.
epsilon
k
x
paro de criterio
k

!
:
#include "stdio.h"
#include "conio.h"
#include "math.h"

void main(void)
{ float x , ex, eps ;
int n, k ;
double factn;
float termino,suma ;

printf("Valor de x : ");
scanf("%f",&x);

printf("Margen de error ");
scanf("%f", &eps);

Lgica de Programacin.
Ejercicio. Elabore un algoritmo para determinar el valor aproximado de seno
x, a partir de la siguiente serie.

! 7 ! 5 ! 3
7 5 3
x x x
x x seno
Considere que:

A) El nmero de trminos a incluir en la serie ser definido por el
usuario.
Codificacin.
FIN
Lgica de Programacin.

Вам также может понравиться