Está en la página 1de 25

2012

UNAN LEON- FACULTAD DE CIENCIAS Y TECNOLOGIA

Programacin II

[SENTENCIAS DE CONTROL FOR Y WHILE

Ing. en Sistemas Sabatino

sentencias de control for y while


INTRODUCCIN Una de las caractersticas de las computadoras que aumentan considerablemente su potencia es su capacidad para ejecutar una tarea muchas veces con gran velocidad, precisin y fiabilidad. Las tareas repetitivas es algo que los humanos encontramos difciles y tediosas de realizar. C soporta tres tipos de estructuras de control: bucles for, while y do-while. Un bucle (ciclo) es cualquier construccin de programa que repite una sentencia o secuencia de sentencias un nmero de veces. La sentencia (o grupo de sentencias) que se repiten en un bloque se denomina cuerpo del bucle y cada repeticin del cuerpo se llama iteracin del bucle. Las dos principales cuestiones de diseo en la construccin del bucle son: Cul es el cuerpo del bucle? Cuntas veces se iterar el cuerpo del bucle? Existen tres tipos de estructuras: for while. do while. Estas estructuras nos permiten repetir unas instrucciones concretas un nmero indeterminado (o No) de veces, hasta que se cumpla una condicin.
int i; for(i=0;i<3;i++) { printf("i vale %d\n",i); } int i = 0; while(i<3) { printf("i vale %d\n",i); i++; } int i =0; do { printf("i vale %d\n",i); i++; }while(i<3);

Salida: i vale 0 i vale 1 i vale 2 Estos tres ejemplos producen la misma salida, pero su uso general es muy distinto.

sentencias de control for y while


REPETICION: EL BUCLE for
La sentencia for es un mtodo para ejecutar un bloque de sentencias un nmero fijo de veces. El bucle for se diferencia del bucle while en que las operaciones de control del bloque se sitan en un solo sitio: la cabecera de la sentencia. for(inicializacin; condicinIteracin; Incremento) sentencias

El bucle for contiene las cuatro partes siguientes: Parte de inicializacin: que inicializa las variables de control del bucle. Parte de condicin: que contiene una expresin lgica que hace que el bucle realice las iteraciones de las sentencias, mientras que la expresin sea verdadera. Parte de incremento: que incrementa o decrementa la variable o variables de control del bucle. Sentencias: acciones o sentencias que se ejecutarn por cada iteracin del bucle. La sentencia for es equivalente al siguiente cdigo while: inicializacin; while(condicinIteracin) { sentencias del bucle for; incremento; }

sentencias de control for y while


Variable_control = Valor_inicial

falso

Variable_control <= valor_limite

verdadera Sentencia

Expresin_incremento

Existen dos formas de implementar la sentencia for que se utilizan normalmente para implementar bucles de conteo: formato ascendente, en el que la variable de control se incrementa y formato descendente, en el que la variable de control se decrementa. formato ascendente: for(var_control = valor_inicial; var_control <= valor_lmite; exp_incremento) sentencia; //ejemplo 1 #include <stdio.h> int n; void main(void) { for(n=1; n <= 10; n++) printf("%d \n",n); } 4

sentencias de control for y while

formato descendente: for(var_control = valor_inicial; var_control >= valor_lmite; exp_decremento) sentencia; //ejemplo 2 #include <stdio.h> int n; void main(void) { for(n=10; n >5; n--) printf(" %d \n",n); }

sentencias de control for y while


Otros intervalos de incremento/decremento Los rangos de incremento/decremento de la variable o expresin de control del bucle pueden ser cualquier valor y no siempre 1, es decir, 5, 10, 20, 4, , dependiendo de los intervalos que se necesiten. //ejemplo 3 #include <stdio.h> int n; void main(void) { for(n=0; n < 100; n+=20) printf("%d \t %d \n",n,n*n); }

//ejemplo 4 #include <stdio.h> double p; void main(void) { for(p = 0.75; p <= 4; p+=0.25) printf("Permetro es ahora igual a %.2f \n",p); }

sentencias de control for y while

sentencia continue
La sentencia continue hace que la ejecucin de un bucle vuelva a la cabecera del bucle. //ejemplo 5 #include <stdio.h> void main() { int clave, i; puts("Introduce -2 para acabar "); clave = 1; for(i=0; i < 8; i++) { if(clave == -2) continue; scanf("%d",&clave); printf("clave %d\n",clave); } printf("VALORES FINALES i = %d clave = %d",i,clave); }

sentencias de control for y while


EJERCICIOS 1- Leer 10 nmeros e imprimir cuantos son positivos, cuantos negativos y cuantos neutros.

Inicio cn = 0 cp = 0 cneg = 0 Hacer para x = 1 a 20 Leer num Sin num = 0 entonces cn = cn + 1 si no Si num > 0 entonces cp = cp + 1 si no cneg = cneg + 1 Fin-si Fin-si Fin-para Imprimir cn, cp, cneg Fin.

//Programa en C #include<stdio.h> void main(void) { int cn=0, cp=0, cneg=0, x, num; for(x=1; x<=10; x++) { printf("ingrese el numero entero %d:",x); scanf("%d",&num); if(num==0) cn=cn+1; else if(num>0) cp=cp+1; else cneg =cneg +1; } printf("cantidad de numeros positivos: %d\n",cp); printf("cantidad de numeros negativos: %d\n",cneg); printf("cantidad de numeros neutros: %d\n",cn); }

sentencias de control for y while

2- Calcular el promedio de un alumno que tiene 5 calificaciones en la materia de Programacin. Inicio Sum=0 Leer nombre Hacer para i = 1 a 7 Leer calif Sum = sum + calif Fin-para prom = sum /7 Imprimir prom Fin. //Programa en C #include<stdio.h> void main(void) { char nombre[20]; int sum=0, i, calif; float prom; printf("cual es su nombre: "); scanf("%s", &nombre); for(i=1; i<=7;i++) { printf("introduzca calificacion %d: ",i); scanf("%d", &calif); sum=sum+calif; } prom=sum/7; printf(" %s tiene de promedio %.2f ",nombre, prom); }

sentencias de control for y while

3- Calcular e imprimir la tabla de multiplicar de un nmero cualquiera. Imprimir el multiplicando, el multiplicador y el producto. Inicio Leer num Hacer para X = 1 a 10 resul = num * x Imprimir num, * , X, = , resul Fin-para fin. //Programa en C #include<stdio.h> void main(void) { int num, x, resul; printf("introduzca el numero a multiplicar: "); scanf("%d", &num); for (x=1;x<=10;x++) { resul=num*x; printf(" %d * %d = %d\n", num, x, resul); } }

10

sentencias de control for y while


4- Hacer un programa que imprima los nmeros pares entre el 1 y el 50. Inicio Hacer para c =1 a 50 si (c mod 2 =0) entonces imprimir nmeros pares , c fin_si Fin

//Programa en C #include<stdio.h> void main(void) { int c; for (c=1;c<=50;c++) { if(c%2==0) printf(" numeros pares %d\n", c); } }

5- Escribir un programa que visualice una tabla de los N primeros nmeros, siendo N un nmero que ingrese el usuario. Utilizar el siguiente diseo de salida suponiendo que el usuario ingreso un dos:
NUMERO 1 2 CUADRADO 1 4 CUBO 1 8

11

sentencias de control for y while


Inicio Leer num Hacer para n=1 a num cuadrado=n*n cubo=n*n*n Imprimir n, cuadrado, cubo Fin para Fin //Programa en C #include<stdio.h> void main(void) { int n, num, cuadrado, cubo; printf("introduzca el numero: "); scanf("%d",&num); for(n=1; n<=num;n++) { cuadrado= n*n; cubo= n*n*n; printf(" Numero %d } }

Cuadrado %d

Cubo %d\n", n, cuadrado, cubo);

12

sentencias de control for y while


Ejercicios Propuestos: 1- Suponga que se tiene un conjunto de calificaciones de un grupo de 20 alumnos. Realizar un algoritmo para calcular la calificacin media y la calificacin ms baja de todo el grupo. 2- Una persona debe realizar un muestreo con 50 personas para determinar el promedio de peso de los nios, jvenes, adultos y viejos que existen en su zona habitacional. Se determinan las categoras con base en la sig, tabla: CATEGORIA EDAD Nios 0 - 12 Jvenes 13 - 29 Adultos 30 - 59 Viejos 60 en adelante 3- Un Zologo pretende determinar el porcentaje de animales que hay en las siguientes tres categoras de edades: de 0 a 1 ao, de ms de 1 ao y menos de 3 y de 3 o ms aos. El zoolgico todava no est seguro del animal que va a estudiar. Si se decide por elefantes solo tomara una muestra de 20 de ellos; si se decide por las jirafas, tomara 15 muestras, y si son chimpancs tomara 10. 4- Escriba un programa que lea dos nmeros enteros, m y n, con m<n. Debe calcular la suma

1 +
5678-

1 + +1

1 + +2

1 +

Hacer un programa que imprima los nmeros del 1 al 50, de 5 en 5. Hacer un programa que imprima los nmeros del 50 al 1, de 0.5 en 0.5 Realice un programa que permita calcular el factorial de un nmero. Realice un programa en C para calcular la suma siguiente: 100 + 98 + 96 + 94 +. . . + 0 en este orden. 9- Suponga que tiene una tienda y desea registrar sus ventas por medio de una computadora. Disee un programa en C que permita realizar las siguientes operaciones para N clientes: a) El monto de la compra de cada cliente. b) Calcule e imprima el IVA (15% de la compra). c) Calcule e imprima el total a pagar. d) Lea la cantidad con que paga el cliente. e) Calcule e imprime el cambio. Al final del da deber imprimir la cantidad de dinero que debe haber en la caja.

13

sentencias de control for y while


Ejemplo de Entrada y salida de datos:

SENTENCIA DE CONTROL while Un bucle(ciclo) es cualquier construccin de programa que repite una sentencia o secuencia de sentencias un nmero de veces. La sentencia(o grupo de sentencias) que se repiten en un bloque se denomina cuerpo del bucle y cada repeticin del cuerpo del bucle se llama iteracin del bucle. Un bucle while tiene una condicin del bucle(una expresin lgica) que controla la secuencia de repeticin. La posicin de esta condicin del bucle es delante del cuerpo del bucle y significa que un bucle while es un bucle pretest, de modo que cuando se ejecuta el mismo, se evala la condicin antes de que se ejecute el cuerpo del bucle. El diagrama indica que la ejecucin de la sentencia o sentencias expresadas se repite mientras la condicin del bucle permanece verdadera y termina cuando se hace falsa. Si la condicin es inicialmente falsa , el cuerpo del bucle no se ejecutar. En otras palabras, el cuerpo de un bucle while se ejecutar cero o ms veces.

14

sentencias de control for y while

Sintaxis:

while(condicin_bucle) sentencia;

cuerpo

while(condicin_bucle) { sentencia-1; sentencia-2; . . . sentencia-n; } Donde: condicin_bucle sentencia

cuerpo

es una expresin lgica o booleana es una sentencia simple o compuesta

15

sentencias de control for y while


El funcionamiento de una sentencia while es: 1. Se evala la condicin_bucle 2. Si condicin_bucle es verdadera(distinto de cero): a) La sentencia especificada, denominada el cuerpo del bucle, se ejecuta. b) Vuelve el control al paso 1. 3. En caso contrario: El control se transfiere a la sentencia siguiente al bucle while. Las sentencias del cuerpo del bucle se repiten mientras que la expresin lgica(condicin del bucle) sea verdadera. Cuando se evala la expresin lgica y resulta falsa, se termina y se sale del bucle y se ejecuta la siguiente sentencia de programa despus de la sentencia while. //ejemplo 1 //contador.c /* cuenta hasta 10 */ #include <stdio.h> void main() { int x = 0; while(x < 10) printf("X: %d\n",x++); }

La variable que representa la condicin del bucle se denomina tambin variable de control del bucle debido a que su valor determina si el cuerpo del bucle se repite. La variable de control del bucle debe ser: 1. inicializada 2. comprobada 3. actualizada para que el cuerpo del bucle se ejecute adecuadamente. Cada etapa se resume as: 1. Inicializacin. contador se establece a un valor inicial(se inicializa a cero, aunque podra ser otro su valor) antes de que se alcance la sentencia while. 2. Prueba/condicin. Se comprueba el valor de contador antes de que comience la repeticin de cada bucle(denominada iteracin o pasada).

16

sentencias de control for y while


3. Actualizacin: contador se actualiza(su valor se incrementa en 1, mediante el operador ++) durante cada iteracin. Si la variable de control no se actualiza el bucle se ejecutar siempre. Tal bucle se denomina bucle infinito. Un bucle infinito se producir cuando la condicin del bucle permanece y no se hace falsa en ninguna iteracin. //ejemplo 2 //bucleinfinito.c #include <stdio.h> void main() { int contador = 1; while(contador < 100) { printf("%d \n", contador); contador--; }/* fin de while */ }

BUCLES while CON CERO ITERACIONES El cuerpo de un bucle no se ejecuta nunca si la condicin de repeticin del bucle no se cumple, es falsa(es cero en C), cuando se alcanza while la primera vez. contador = 10; while(contador > 100) { } El bucle anterior nunca se ejecutar ya que la condicin del bucle (contador > 100) es falsa la primera vez que se ejecuta. El cuerpo del bucle nunca se ejecutar.

17

sentencias de control for y while


BUCLES CONTROLADOS POR CENTINELAS Normalmente, no se conoce con exactitud cuntos elementos de datos se procesarn antes de comenzar su ejecucin. Esto se produce bien porque hay muchos datos a contar normalmente o porque el nmero de datos a procesar depende de cmo prosigue el proceso de clculo. Un medio para manejar esta situacin es instruir al usuario a introducir un nico dato definido y especificado denominado valor centinela como ltimo dato. La condicin del bucle comprueba cada dato y termina cuando se lee el valor centinela. En realidad el centinela es un valor que sirve para terminar el proceso del bucle. En el siguiente fragmento de cdigo hay un bucle con centinela; se introducen notas mientras que sta sea distinta de centinela. //ejemplo 3 //centinela.c /*entrada de datos numricos, centinela -1 */ #include <stdio.h> void main() { int nota,suma = 0; const int centinela = -1; printf("Introduzca primera nota: "); scanf("%d",&nota); while(nota != centinela) { suma += nota; printf("Introduzca la siguiente nota:"); scanf("%d",&nota); }/* fin de while*/ puts("Final"); printf("La suma de las notas es %d \n",suma); }

18

sentencias de control for y while


EJERCICIOS 1- Realice un programa en C que permita: Obtener el promedio de calificaciones de un grupo de N alumnos.
Inicio Leer n_alumnos Hacer mientras a<= n_alumnos Leer calif Suma=suma +calif a=a+1 prom= suma/n_alumnos imprimir prom Fin

// Programa en C #include<stdio.h> #include<stdlib.h> void main() { int suma=0,a=1,n_alumnos; float calif, prom; printf("Introduzca el numero de alumnos: "); scanf("%d",&n_alumnos); while(a<=n_alumnos) { printf("Calificacion [%d]: ",a); scanf("%f",&calif); suma = suma + calif; a++; } prom = suma /n_alumnos; printf("\nEL PROMEDIO DE NOTAS ES:%.2f",prom); }

19

sentencias de control for y while


2- Una persona desea invertir su dinero en un banco, el cual le otorga un 2% de inters. Realice un programa en C que le permita a esa persona saber: Cual ser la cantidad de dinero que tendr al cabo de un ao si la ganancia de cada mes es reinvertida? Inicio Leer cant_diner Hacer mientras mes<=12 Inters= cant_diner *0.02 cant_diner=cant_diner + inters mes=mes+1 fin_mientras imprimir cant_diner fin //Programa en C #include<stdio.h> #include<stdlib.h> #include<string.h> void main() { int mes=1; float cant_diner, intereses=0; printf("Introduzca la cantidad de dinero: "); scanf("%f",&cant_diner); while(mes<=12) { intereses = cant_diner * 0.02; cant_diner = cant_diner + intereses; printf("En el mes %d tiene en el banco %.2f\n",mes,cant_diner); mes++; } printf("\n\nDESPUES DE %d MESES-->TIENE EN EL BANCO:%f\n",mes1,cant_diner); }

20

sentencias de control for y while


3- Determinar cuntos hombres y cuantas mujeres se encuentran en un grupo de n personas, suponiendo que los datos son extrados alumnos por alumnos. Inicio Leer alum Hacer mientras ne<=alum Leer sexo si (sexo=femenino) nm=nm+1 si no si (sexo=masculino) nh=nh+1 si no imprimir sexo invalido fin si fin si ne = ne+1 Fin mientras imprimir nm, nh Fin //Programa en C #include<stdio.h> #include<string.h> #include<stdlib.h> void main(void) { int alum, ne=1, nh=0, nm=0; char sexo[10]; printf("Ingrese la cantidad de alumnos:\n"); scanf("%d",&alum); while (ne<=alum) { printf("Seleccione el sexo (femenino o masculino):\n"); fflush(stdin); gets(sexo); if(!strcmp(sexo,"femenino")) nm=nm+1; else if(!strcmp(sexo,"masculino")) nh=nh+1; else puts("sexo invalido"); ne=ne+1; } printf(" Numero de estudiantes del sexo femenino: %d\n", nm); printf(" Numero de estudiantes del sexo masculino: %d\n", nh); }

21

sentencias de control for y while

4- Encontrar el menor valor de un conjunto de n nmeros dados. Inicio d=1, menor=999 leer ndatos hacer mientras(d<=ndatos) leer num si (num<menor) entonces menor=valor fin si d=d+1 fin mientras imprimir menor Fin

//Programa en C #include<stdio.h> #include<stdlib.h> void main(void) { int ndatos, d=1, menor=999, num; printf("Introducir la cantidad de numeros:"); scanf("%d",&ndatos); while (d<=ndatos) { printf("Introduzca el numero:\n"); scanf("%d", &num); if(num<menor) menor=num; d=d+1; } printf("el nmero menor es:%d\n", menor); }

22

sentencias de control for y while

5- Programa para calcular el nmero de caloras que se consume en un da. #include<stdio.h> void main(void) { int num_elem, cuenta, calorias, total; printf("Cuantos alimentos has comido hoy?: "); scanf("%d",&num_elem); total=0; cuenta=1; printf(" Introducir el numero de calorias por "); printf(" %d %s", num_elem, "alimentos tomados: \n"); while (cuenta++<=num_elem) { scanf("%d", &calorias); total+=calorias; } printf("las calorias totales consumidas hoy son:"); printf("%d\n", total);

23

sentencias de control for y while


Ejercicios Propuestos (While) 1- El Depto. de Seguridad Publica y Transito del D.F. desea saber, de los n autos que entran a la ciudad de Mxico, cuantos entran con calcomana de cada color. Conociendo el ltimo dgito de la placa de cada automvil se puede determinar el color de la calcomana utilizando la sig. relacin: DGITO 1o2 3o4 5o6 7o8 9o0 COLOR amarilla rosa roja verde azul

2- Calcular el promedio de edades de hombres, mujeres y de todo un grupo de alumnos. 3- Encontrar el mayor valor de un conjunto de n nmeros dados. 4- En un supermercado un cajero captura los precios de los artculos que los clientes compran e indica a cada cliente cual es el monto de lo que deben pagar. Al final del da le indica a su supervisor cuanto fue lo que cobro en total a todos los clientes que pasaron por su caja. 5- Una compaa de seguros tiene contratados a n vendedores. Cada uno hace tres ventas a la semana. Su poltica de pagos es que un vendedor recibe un sueldo base, y un 10% extra por comisiones de sus ventas. El gerente de su compaa desea saber cunto dinero obtendr en la semana cada vendedor por concepto de comisiones por las tres ventas realizadas, y cuanto tomando en cuenta su sueldo base y sus comisiones. 6- Realizar la tabla de multiplicar de un numero entre 0 y 10 de forma que se visualice de la siguiente forma: 4x1=4 4x2=8 .. Use while 7- Codificar en C un programa que lea un texto. Luego de la lectura indicar cuantas a se ingresaron, cuantas e, i, o, u. Use While. 8- Calcule el aumento de sueldo para un grupo de empleados de una empresa, teniendo en cuenta el siguiente criterio: Si el sueldo es inferior a C$ 1000 : aumento 15% Si el sueldo es mayor o igual a C$1000 : aumento 12% Imprima el sueldo nuevo del trabajador y el total de nmina de la empresa, considerando este nuevo aumento.

24

sentencias de control for y while


9- Supngase que en una reciente eleccin hubo cuatro candidatos (con identificadores 1, 2, 3, 4). Usted habr de encontrar, mediante un programa, el nmero de votos correspondiente a cada candidato y el porcentaje que obtuvo respecto al total de votantes. El usuario tecleara los votos de manera desorganizada, tal y como se obtuvieron en la eleccin, el final de datos esta representado por un cero. Observe, como ejemplo, la siguiente lista: 1 4 3 1 2 4 4 2 1 2 3 4 3 4 3 3 0 Donde 1 representa un voto del candidato 1; 3 un voto para el candidato 3; y as sucesivamente. Use while.

25

También podría gustarte