Parcial (estructuras repetitivas"for y while" - herrmanientas case)
sentencia de control do while 2013 - ING.KARINA … · Un ejemplo de uso de esta sentencia es el...
Transcript of sentencia de control do while 2013 - ING.KARINA … · Un ejemplo de uso de esta sentencia es el...
SENTENCIA DE CONTROL DO WHILE
M.Sc. Ana María Salgado G.
UNAN-
LEON
Sentencia de control do while
Unidad IV:
Estructuras de control
Sentencia do-while
La forma general de esta sentencia es:
do
sentencia;
while (expresion);
sentencia se ejecutará mientras el valor de expresion sea verdadero.
sentencia siempre se ejecuta al menos una vez.
Si sentencia es compuesta se encierra entre { }.
Nota: Lo normal es que sentencia incluya algún elemento que altere el valor de condición de
salida del bucle.
Para la mayoría de las aplicaciones es mejor y más natural comprobar la condición antes de
ejecutar el bucle, por ello se usa más la sentencia while.
Un ejemplo de uso de esta sentencia es el siguiente programa, que pide un número igual a 0:
#include <stdio.h>
int numero;
void main(void)
{
do
{
printf("Introduce el numero 0:\n");
scanf("%d", &numero); /* Se lee el numero */
} while (numero != 0);
}
2 M.Sc. Ana María Salgado G.
Sentencia de control do while
El laso do es muy similar al laso while solo que while verifica el test y luego ejecuta el cuerpo
del laso. En cambio el laso do ejecuta el cuerpo del laso y luego verifica el test. Por lo tanto el
cuerpo del laso do se ejecuta al menos una vez.
Ejemplo #2
Construya un programa en C que, al recibir como datos los pagos efectuados en el último mes,
permita obtener la suma de los mismos, pero no sabemos exactamente cuántos fueron.
//sumapagos.c
#include <stdio.h>
void main(void)
{
float pag, spa = 0;
printf("Ingrese el primer pago:\t");
scanf("%f",&pag);
do
{
spa= spa + pag;
printf("Ingrese el siguiente pago, 0 para terminar: ");
scanf("%f",&pag);
}while(pag!=0);
printf("\nEl total de pagos del mes es:%.2f\n",spa);
}
3 M.Sc. Ana María Salgado G.
Sentencia de control do while
Ejemplo #3
Escriba un programa en C que, al recibir como datos los salarios de los profesores de una
universidad, obtenga tanto la nómina como el promedio de los salarios.
//salarioprom.c
#include <stdio.h>
void main(void)
{
int i = 0;
float sal, prom, nomina = 0;
printf("Ingrese el salario del profesor: ");
scanf("%f",&sal);
do
{
nomina= nomina + sal;
i++;
printf("Ingrese el salario del profesor, 0 para terminar: ");
scanf("%f",&sal);
}while(sal!=0);
prom = nomina/i;
printf("\nNomina: %.2f \t Promedio de salarios: %.2f\n",nomina, prom);
}
4 M.Sc. Ana María Salgado G.
if(num == 1 || num == 0)
{
fact=1;
printf("!%d = %ld\n\n",num,fact);
}
else
{
i = 1;
do
{
fact = fact * i;
i++;
}while(i<=num);
printf("!%d = %ld\n\n",num,fact);
}
}
else
printf("A los valores negativos no se le calcula el factorial.");
}
5
Sentencia de control do while
Ejemplo #4:
La función factorial se aplica a enteros positivos. El factorial de un entero positivo n es (!n) es
igual al producto de los enteros positivos del 1 al n. Escriba un programa que calcule el factorial
de un entero. Ejemplo:
#include <stdio.h>
long fact=1;
int num,i;
void main(void)
{
printf("Numero = ");
scanf("%d",&num);
if (num>=0)
{
!3 = 1*2*3 = 6
M.Sc. Ana María Salgado G.
Sentencia de control do while
Ejemplo #5
Realice un programa que, al recibir como datos n números enteros, obtenga la suma de los
números pares y el promedio de los impares.
//sumprompar_impar.c
#include <stdio.h>
void main(void)
{
int i = 1, n, num, spa = 0, sim = 0, cim = 0;
printf("Ingrese el numero de datos que se van a procesar: ");
scanf("%d",&n);
if(n > 0)
{
do
{
printf("\nIngrese el numero %d: ",i);
scanf("%d",&num);
if(num != 0)
{
if(num % 2 == 0)
spa = spa + num;
else
{
sim = sim + num;
cim++;
}
}
i++;
}while(i <= n);
printf("\nLa suma de los numeros pares es: %d\n",spa);
printf("\nEl promedio de los numeros impares es %5.2f\n\n",(float)(sim/cim));
}
else
printf("\n El valor de N es incorrecto\n");
}
6 M.Sc. Ana María Salgado G.
Sentencia de control do while
Ejemplo #6:
Lo siguiente se llama conjetura de Ulam en honor del matemático S. Ulam:
Empiece con cualquier entero positivo.
Si es par, divídase entre 2; si es impar, multiplíquese por 3 y agréguese 1.
Obtenga enteros sucesivamente repitiendo el proceso hasta que el entero en curso no sea 1.
Al final se obtendrá el número 1, independientemente del entero inicial. Por ejemplo, cuando
el entero inicial es 26, la secuencia será:
26 13 40 20 10 5 16 8 4 2 1
//ulam2.c
#include <stdio.h>
int n;
void main(void)
{
do
{
printf("Escriba un entero positivo:");
scanf("%d",&n);
}while(n<=0);
printf("Sucesion de Ulam para %d\n",n);
do
{
if(n%2==0)
n=n/2;
else
n=3 * n + 1;
printf("%d ",n);
}while(n!=1);
printf("\n\n");
}
7 M.Sc. Ana María Salgado G.
Sentencia de control do while
Sentencia break
La sentencia break se utiliza para terminar la ejecución de bucles o salir de una sentencia switch.
Es necesaria en la sentencia switch para transferir el control fuera de la misma. En caso de
bucles anidados, el control se transfiere fuera de la sentencia más interna en la que se
encuentre, pero no fuera de las externas.
Ejemplo #7:
//break2.c
#include <stdio.h>
void main(void )
{
int x;
for (x = 1; x <= 10; x++)
{
if (x == 5)
break;
printf("%d\t", x);
}
printf("\n");
}
Ejemplo #8:
//breakinfinito.
#include <stdio.h>
void main(void)
{
int contador = 0;
int max;
printf("Cuantos holas?:");
scanf("%d",&max);
8 M.Sc. Ana María Salgado G.
Sentencia de control do while
for(;;) //bucle for que no termina nunca
{
if(contador < max)
{
puts("Hola!");
contador++;
}
else
break;
}
}
Ejemplo #9:
#include <stdio.h>
//clave.c
int clave = -9;
int entrada;
void main(void)
{
printf("Introduzca un entero:");
while(scanf("%d",&entrada))
{
if(entrada != clave)
{
printf("%d\n",entrada);
printf("Introduzca un entero:");
}
else
break;
}
}
9 M.Sc. Ana María Salgado G.
Sentencia de control do while
Sentencia continue
Obliga a ejecutar la siguiente iteración del bucle while, do o for donde está contenida.
Ejemplo #10:
//continue2.c
#include <stdio.h>
void main(void )
{
int x;
for (x = 1; x <= 10; x++)
{
if (x == 5)
continue;
printf("%d\t", x);
}
printf("\n\nUso de continue para omitir la impresion del valor 5\n\n");
}
Ejemplo #11:
//pares.c
/* imprime numeros pares del 1 al 100*/
#include <stdio.h>
void main(void)
{
int x;
for(x=1; x<=100; x++)
{
if(x%2)
continue;
printf("%d\n", x);
}
}
10 M.Sc. Ana María Salgado G.
Sentencia de control do while
Ejercicios resueltos break y continue
Ejercicio #1 :
//continue3.c
#include <stdio.h>
void main(void)
{
int i = 0, x = 0;
for(i = 1; i < 10; i++)
{
if(i % 2 == 1)
x += i;
else
x--;
printf("%d\t",x);
continue;
}
printf("\nx = %d\n\n",x);
}
Ejercicio #2 :
//break3.c
#include <stdio.h>
void main(void)
{
int i = 0, x = 0;
for(i = 1; i < 10; i++)
{
if(i % 2 == 1)
x += i;
else
x--;
printf("%d\t",x);
break;
}
11 M.Sc. Ana María Salgado G.
Sentencia de control do while
printf("\nx = %d\n\n",x);
}
Ejercicio 3:
/* Calcular la media de los números no negativos de una lista de n números */
//continue.c
#include <stdio.h>
void main(void)
{
int n, cont, nmedia=0;
float x, media, suma=0;
/* inicializar y leer el valor de n*/
printf("Cuantos numeros?");
scanf("%d",&n);
/* leer los numeros */
for(cont = 1; cont <=n; cont ++)
{
printf("x= ");
scanf("%f",&x);
if(x<0)
continue;
suma+=x;
nmedia++;
}
/* calcular la media y escribir la respuesta */
media = suma /nmedia;
printf("La media es %f\n",media);
}
12 M.Sc. Ana María Salgado G.
Sentencia de control do while
Ejercicios resueltos do while
Ejercicio #4
Escriba un programa que reciba dos parámetros enteros, m y n, con m<n. Se debe calcular la
suma:
1 1 1 1
M M+1 M+2 M+N
//seriem_n.c
#include <stdio.h>
int m,n,i = 0;
float suma=0;
void main(void)
{
do
{
printf("Introduzca los enteros m y n:\n");
scanf("%d %d",&m,&n);
}while(m>n);
do
{
suma= suma + 1.0/(float)(m+i);
i++;
}while(i<=n);
printf("El resultado de la funcion es %g\n",suma);
}
13 M.Sc. Ana María Salgado G.
+ + +...+
Sentencia de control do while
Ejercicio #5
El siguiente programa, recibe como dato un número entero N y obtiene el resultado de la
siguiente serie:
11 + 2
2 - 3
3 - … ± N
N
//seriepar_imp.c
#include <stdio.h>
#include <math.h>
int N,i = 2;
float suma=1;
void main(void)
{
printf("Ingrese el valor de N: ");
scanf("%d",&N);
do
{
if(i % 2 == 0)
suma= suma + pow(i,i);
else
{
if(i % 2 != 0)
suma= suma - pow(i,i);
}
printf("i= %d\t suma = %g\n",i,suma);
i++;
}while(i<=N);
printf("\nEl resultado final de la serie es %g\n\n",suma);
}
14 M.Sc. Ana María Salgado G.
printf("Valor de x\tValor de y\tSigno\n");
printf("-------------------------------------\n");
do
{
y = 4 * pow(x,2) - 16 * x + 15;
if(y > 0)
printf("%.2f\t\t%.2f\t\tPositivo\n",x,y);
else if(y < 0)
printf("%.2f\t\t%.2f\t\tNegativo\n",x,y);
x+=0.1;
}while(x <= 2);
}
15
Sentencia de control do while
Ejercicio #6
Escriba un programa para evaluar la función y = 4x2 – 16x + 15, donde x toma los valores de 1 a 2, en
incremento de 0.1. Para cada x la salida debe dar el valor de y. Además debe imprimir el mensaje
POSITIVO o NEGATIVO, según el signo de y. El formato de salida debe ser:
Valor de x Valor de y Signo
1.0
1.1
.
.
.
2.0
Solución:
//posnegdo.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float x = 1, y;
void main(void)
{
3.00 POSITIVO
2.24 POSITIVO
-1.00 NEGATIVO
M.Sc. Ana María Salgado G.
Sentencia de control do while
Ejercicio #7
Escriba un programa que calcule la nómina total de una empresa, sin saber con anticipación
cuántos empleados tiene ésta. Use como centinela una pregunta.
//nominacentinela.c
#include <stdio.h>
void main(void)
{
float pago, phora, nominatot=0;
int htrab;
char nombre[100], resp='S';
do
{
fflush(stdin);
printf("\n\nIntroduzca el nombre del empleado:\n");
gets(nombre);
printf("Horas trabajadas y sueldo por hora:");
scanf("%d %f",&htrab,&phora);
pago=htrab*phora;
printf("El empleado %s tiene un salario de %g\n",nombre,pago);
nominatot+=pago;
printf("\nDesea introducir otro empleado?(S/N)\n");
fflush(stdin);
resp=getchar();
}while(resp=='S' || resp=='s');
printf("\nNomina total: %f\n",nominatot);
}
16 M.Sc. Ana María Salgado G.
Sentencia de control do while
Ejercicio #8:
Una solicitante para un empleo de secretaria recibirá un máximo de 5 pruebas de
mecanografía. Será contratada tan pronto como logre teclear más de 50 palabras por minuto
en dos pruebas. Escriba un programa que permita al supervisor teclear la calificación de cada
prueba después de que aquella sea completada. El programa deberá imprimir “Contratar” tan
pronto como el solicitante califique, sin hacer más pruebas. Después de que 5 pruebas hayan
sido hechas, si todavía el solicitante no ha reunido las condiciones, el programa deberá
imprimir “Rechazar”.
//mecanografa.c
#include <stdio.h>
void main(void)
{
int puntaje, masdecincuenta=0,pruebas=0;
do
{
pruebas++;
printf("Teclear puntaje:");
scanf("%d",&puntaje);
if(puntaje>50)
masdecincuenta++;
}while((pruebas<5)&&(masdecincuenta<2));
if(masdecincuenta==2)
printf("Contratar\n");
else
printf("Rechazar\n");
}
Ejercicio #9:
Las potencias de dos son 1, 2, 4, 8, 16, 32, 64,etc. Para obtener la siguiente potencia de 2, se
multiplica la anterior por 2. Usando un ciclo do while, escriba un programa que imprima la
primera potencia de 2 que es más de 1000.
//potencentinela.c
#include <stdio.h>
int r=1;
void main(void)
{
17 M.Sc. Ana María Salgado G.
Sentencia de control do while
do
{
printf("%d\t",r);
r = r*2;
}while(r<1000);
printf("La primera potencia de 2 mayor de 1000 es %d\n",r);
}
Ejercicios propuestos
1. Realizar una nueva versión usando do while, de los ejercicios propuestos while del 5 al 9.
2. Elaborar un programa que encuentre la suma de los primeros N términos de la sucesión de
FIBONACCI. Esta se genera empezando por los números 0 y 1 y calculando cada nuevo
miembro como la suma de los dos miembros precedentes de la sucesión, así:
0 1 1 2 3 5 8 13…
3. Dados N valores, diseñe un programa que haga el siguiente proceso:
• Si el valor es menor que cero calcular su cubo.
• Si el valor está entre 0 y 100 calcular su cuadrado.
• Si el valor está entre 101 y 1000 calcular su raíz cuadrada.
4. Un vendedor desea calcular la comisión total sobre la venta de varios artículos. Al vendedor
le corresponde el 10% de comisión sobre artículos, cuyo precio es menor o igual a $1000 y el
7% de comisión sobre aquellos artículos cuyo precio sea mayor de $1000. Elabore un
programa para obtener la comisión total, si se conoce que el vendedor hizo N ventas.
5. Una oficina de seguros ha reunido datos concernientes a todos los accidentes de tránsito
ocurridos en el área metropolitana de Medellín en el último año. Por cada conductor
involucrado en un accidente se toman los siguientes datos: año de nacimiento, sexo(1:
Femenino, 2: Masculino), registro del carro(1: Medellín, 2: Otras ciudades). Hacer un
programa en C que muestre:
• El porcentaje de conductores menores de 25 años.
• Porcentaje de conductores del sexo femenino.
• Porcentaje de conductores masculinos con edades entre 12 y 30 años.
• Porcentaje de conductores cuyos carros están registrados fuera de Medellín.
18 M.Sc. Ana María Salgado G.
Sentencia de control do while
6. Un restaurante paga a sus meseros dos clases de comisiones:
• Una comisión del 7% sobre toda venta.
• Otra comisión que depende del tipo de venta: 15% si la venta es de contado, 10% si la
venta se hizo en cheque y, 5% si se hizo con tarjeta de crédito.
El restaurante tiene por cada venta:
Identificación del vendedor(1, 2, 3)
Tipos de ventas(1: contado; 2: cheque; 3: tarjeta)
Cuantía de la venta.
Elaborar un programa que obtenga el total a pagar a cada uno de los empleados.
7. Se tiene la siguiente información por cada uno de los N estudiantes de la universidad:
Edad
Sexo(1: masculino; 2: femenino)
Carrera (1: Ingeniería; 2: otra carrera)
Hacer un algoritmo que obtenga:
• Promedio de edad de los estudiantes de Ingeniería.
• Porcentaje de hombres en la universidad.
• Porcentaje de mujeres que estudian Ingeniería.
8. En una tienda de artículos para caballeros al final del día se carga en la computadora las
boletas que confeccionaron los distintos vendedores para saber cuanto fue la comisión del día
de cada uno de ellos. Los datos que se ingresan (por boleta) son: el número de vendedor y el
importe. Cuando no hay más boletas para cargar se ingresa 0. Teniendo en cuenta que el
negocio tiene 3 vendedores y que el porcentaje sobre las ventas es del 5%, indicar cuánto ganó
cada vendedor en el día.
9. Realice la simulación y salida de los siguientes incisos:
#include <stdio.h>
void main(void )
{
int n;
for (n = 0; n <= 100; n++)
{
if (n % 5 != 0)
continue;
printf("%d ", n);
}
}
19 M.Sc. Ana María Salgado G.
Sentencia de control do while
//break.c
#include <stdio.h>
void main(void)
{
int i, j, x=0;
for(i=0;i<5;i++)
{
for(j=0;j<1;j++)
x+=(i+j-1);
printf("%d",x);
break;
}
printf("\nx=%d",x);
}
//break2.c
#include <stdio.h>
void main(void)
{
int i, j, x=0;
for(i=0;i<5;i++)
for(j=0;j<3;j++)
{
x+=(i+j-1);
printf("%d ",x);
break;
}
printf("\nx=%d",x);
}
20 M.Sc. Ana María Salgado G.
Sentencia de control do while
Bibliografía
Ceballos Francisco Javier. Curso de Programación C/C++ . Segunda Edición.
RAMA, Madrid, 2002.
Editorial
Joyanes Aguilar Luis, Zahonero Martínez Ignacio.
estructura de datos y objetos. Mc Graw Hill.
Programación en C. Metodología,
Byron S. Gottfried . Programación en C. Mc Graw Hill.
H.M. Dietel – P. J. Dietel . Como Programar en C/C++ . Segunda Edición. Prentice Hall.
Hernández María Lourdes. Diseño estructurado de algoritmos. Diagramas de flujos y
pseudocódigos. Universidad de Teuxtepe, México.
Cairó Osvaldo. Fundamentos de programación. Piensa en C. Prentice Hall. Primera
edición, 2006.
21 M.Sc. Ana María Salgado G.