25
2010 UNAN LEON- FACULTAD DE CIENCIAS Y TECNOLOGIA Programación Estructurada- Sabatino [SENTENCIAS DE CONTROL FOR Y WHILE

for while 2010 - ING.KARINA ESQUIVEL · Los rangos de incremento/decremento de la variable o expresión de control del bucle ... 8- Realice un programa en C para calcular la suma

Embed Size (px)

Citation preview

2010

UNAN LEON- FACULTAD DE

CIENCIAS Y TECNOLOGIA

Programación

Estructurada- Sabatino

[SENTENCIAS DE CONTROL

FOR Y WHILE

sentencias de control for y while

2

INTRODUCCIÓN Una de las características de las computadoras que aumentan considerablemente su potencia es su capacidad para ejecutar una tarea muchas veces con gran velocidad, precisión y fiabilidad. Las tareas repetitivas es algo que los humanos encontramos difíciles y tediosas de realizar. C soporta tres tipos de estructuras de control: bucles for, while y do-while. Un bucle (ciclo) es cualquier construcción de programa que repite una sentencia o secuencia de sentencias un número de veces. La sentencia (o grupo de sentencias) que se repiten en un bloque se denomina cuerpo del bucle y cada repetición del cuerpo se llama iteración del bucle. Las dos principales cuestiones de diseño en la construcción del bucle son: ¿Cuál es el cuerpo del bucle? ¿Cuántas 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 número indeterminado (o No) de veces, hasta que se cumpla una condición.

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

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);

sentencias de control for y while

3

REPETICION: EL BUCLE for

La sentencia for es un método para ejecutar un bloque de sentencias un número fijo de veces. El bucle for se diferencia del bucle while en que las operaciones de control del bloque se sitúan en un solo sitio: la cabecera de la sentencia. for(inicialización; condiciónIteración; Incremento)

sentencias

El bucle for contiene las cuatro partes siguientes: • Parte de inicialización: que inicializa las variables de control del bucle. • Parte de condición: que contiene una expresión lógica que hace que el bucle

realice las iteraciones de las sentencias, mientras que la expresión sea verdadera. • Parte de incremento: que incrementa o decrementa la variable o variables de

control del bucle. • Sentencias: acciones o sentencias que se ejecutarán por cada iteración del bucle.

La sentencia for es equivalente al siguiente código while: inicialización; while(condiciónIteración) { sentencias del bucle for; incremento; }

sentencias de control for y while

4

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 <= val or_límite; exp_incremento) sentencia; //ejemplo 1 #include <stdio.h> int n; void main(void) { for(n=1; n <= 10; n++) printf("%d \n",n); }

Variable_control = Valor_inicial

Variable_control <= valor_limite

Sentencia

Expresión_incremento

verdadera

falso

sentencias de control for y while

5

formato descendente: for(var_control = valor_inicial; var_control >= val or_límite; 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

6

Otros intervalos de incremento/decremento Los rangos de incremento/decremento de la variable o expresión 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("Perímetro es ahora igual a %.2f \n",p); }

sentencias de control for y while

7

sentencia continue La sentencia continue hace que la ejecución 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

8

EJERCICIOS

1- Leer 10 números 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

9

2- Calcular el promedio de un alumno que tiene 5 calificaciones en la materia de Programación.

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

10

3- Calcular e imprimir la tabla de multiplicar de un número 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); } }

sentencias de control for y while

11

4- Hacer un programa que imprima los números pares entre el 1 y el 50. Inicio Hacer para c =1 a 50 si (c mod 2 =0) entonces imprimir “números 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 números, siendo N un número que ingrese el usuario. Utilizar el siguiente diseño de salida suponiendo que el usuario ingreso un dos:

NUMERO CUADRADO CUBO 1 1 1 2 4 8

sentencias de control for y while

12

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); } }

sentencias de control for y while

13

Ejercicios Propuestos:

1- Suponga que se tiene un conjunto de calificaciones de un grupo de 20 alumnos. Realizar un algoritmo para calcular la calificación media y la calificación más baja de todo el grupo.

2- Una persona debe realizar un muestreo con 50 personas para determinar el promedio de peso de los niños, jóvenes, adultos y viejos que existen en su zona habitacional. Se determinan las categorías con base en la sig, tabla: CATEGORIA EDAD Niños 0 - 12 Jóvenes 13 - 29 Adultos 30 - 59 Viejos 60 en adelante

3- Un Zoólogo pretende determinar el porcentaje de animales que hay en las siguientes tres categorías de edades: de 0 a 1 año, de más de 1 año y menos de 3 y de 3 o más años. El zoológico todavía 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 chimpancés tomara 10.

4- Escriba un programa que lea dos números enteros, m y n, con m<n. Debe calcular la suma

1

��

1

� � 1�

1

� � 2��

1

� � �

5- Hacer un programa que imprima los números del 1 al 50, de 5 en 5. 6- Hacer un programa que imprima los números del 50 al 1, de 0.5 en 0.5 7- Realice un programa que permita calcular el factorial de un número. 8- 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. Diseñe 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 día deberá imprimir la cantidad de dinero que debe haber en la caja.

sentencias de control for y while

14

Ejemplo de Entrada y salida de datos:

SENTENCIA DE CONTROL while Un bucle(ciclo) es cualquier construcción de programa que repite una sentencia o secuencia de sentencias un número de veces. La sentencia(o grupo de sentencias) que se repiten en un bloque se denomina cuerpo del bucle y cada repetición del cuerpo del bucle se llama iteración del bucle. Un bucle while tiene una condición del bucle(una expresión lógica) que controla la secuencia de repetición. La posición de esta condición 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 evalúa la condición antes de que se ejecute el cuerpo del bucle. El diagrama indica que la ejecución de la sentencia o sentencias expresadas se repite mientras la condición del bucle permanece verdadera y termina cuando se hace falsa. Si la condición es inicialmente falsa , el cuerpo del bucle no se ejecutará. En otras palabras, el cuerpo de un bucle while se ejecutará cero o más veces.

sentencias de control for y while

15

Sintaxis: while(condición_bucle) sentencia; cuerpo while(condición_bucle) { sentencia-1; sentencia-2; . . . sentencia-n; } Donde:

• condición_bucle es una expresión lógica o booleana • sentencia es una sentencia simple o compuesta

Condición__bucle

sentencia

falsa

verdadera

cuerpo

sentencias de control for y while

16

El funcionamiento de una sentencia while es: 1. Se evalúa la condición_bucle 2. Si condición_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 expresión lógica(condición del bucle) sea verdadera. Cuando se evalúa la expresión lógica y resulta falsa, se termina y se sale del bucle y se ejecuta la siguiente sentencia de programa después 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 condición del bucle se denomina también 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. Inicialización. contador se establece a un valor inicial(se inicializa a cero,

aunque podría ser otro su valor) antes de que se alcance la sentencia while. 2. Prueba/condición. Se comprueba el valor de contador antes de que comience la

repetición de cada bucle(denominada iteración o pasada).

sentencias de control for y while

17

3. Actualización: contador se actualiza(su valor se incrementa en 1, mediante el operador ++) durante cada iteración.

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 condición del bucle permanece y no se hace falsa en ninguna iteración.

//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 condición de repetición 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 condición del bucle (contador > 100) es falsa la primera vez que se ejecuta. El cuerpo del bucle nunca se ejecutará.

sentencias de control for y while

18

BUCLES CONTROLADOS POR CENTINELAS Normalmente, no se conoce con exactitud cuántos elementos de datos se procesarán antes de comenzar su ejecución. Esto se produce bien porque hay muchos datos a contar normalmente o porque el número de datos a procesar depende de cómo prosigue el proceso de cálculo. Un medio para manejar esta situación es instruir al usuario a introducir un único dato definido y especificado denominado valor centinela como último dato. La condición 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 código hay un bucle con centinela; se introducen notas mientras que ésta sea distinta de centinela.

//ejemplo 3

//centinela.c /*entrada de datos numéricos, 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); }

sentencias de control for y while

19

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); }

sentencias de control for y while

20

2- Una persona desea invertir su dinero en un banco, el cual le otorga un 2% de interés. Realice un programa en C que le permita a esa persona saber: Cual será la cantidad de dinero que tendrá al cabo de un año si la ganancia de cada mes es reinvertida? Inicio Leer cant_diner Hacer mientras mes<=12 Interés= cant_diner *0.02 cant_diner=cant_diner + interés 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",mes-1,cant_diner); }

sentencias de control for y while

21

3- Determinar cuántos hombres y cuantas mujeres se encuentran en un grupo de n personas, suponiendo que los datos son extraídos 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); }

sentencias de control for y while

22

4- Encontrar el menor valor de un conjunto de n números 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 número menor es:%d\n", menor); }

sentencias de control for y while

23

5- Programa para calcular el número de calorías que se consume en un día. #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); }

sentencias de control for y while

24

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 México, cuantos entran con calcomanía de cada color. Conociendo el último dígito de la placa de cada automóvil se puede determinar el color de la calcomanía utilizando la sig. relación: DÍGITO COLOR 1 o 2 amarilla 3 o 4 rosa 5 o 6 roja 7 o 8 verde 9 o 0 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 números dados. 4- En un supermercado un cajero captura los precios de los artículos que los

clientes compran e indica a cada cliente cual es el monto de lo que deben pagar. Al final del día le indica a su supervisor cuanto fue lo que cobro en total a todos los clientes que pasaron por su caja.

5- Una compañía de seguros tiene contratados a n vendedores. Cada uno hace tres ventas a la semana. Su política de pagos es que un vendedor recibe un sueldo base, y un 10% extra por comisiones de sus ventas. El gerente de su compañía desea saber cuánto 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 nómina de la empresa, considerando este nuevo aumento.

9- Supóngase que en una reciente elección hubo cuatro candidatos (con identificadores 1, 2, 3, 4). Usted habrá de encontrar, mediante un programa, el número de votos correspondiente a cada candidato y el porcentaje que obtuvo respecto al total de votantes. El usuario tecleara los votos de manera

sentencias de control for y while

25

desorganizada, tal y como se obtuvieron en la elección, 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.