sentencia de control do while 2013 - WordPress.com

21
M UNAN- LEON SENTEN M.Sc. Ana María Salgado G. NCIA DE CONTROL DO WHILE 2013 E

Transcript of sentencia de control do while 2013 - WordPress.com

Page 1: sentencia de control do while 2013 - WordPress.com

M.Sc.

UNAN-

LEON SENTENCIA DE CONTROL

M.Sc. Ana María Salgado G.

ENTENCIA DE CONTROL DO WHILE

2013

DO WHILE

Page 2: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

2

M.Sc. Ana María Salgado G.

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

}

Page 3: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

3

M.Sc. Ana María Salgado G.

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

}

Page 4: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

4

M.Sc. Ana María Salgado G.

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

}

Page 5: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

5

M.Sc. Ana María Salgado G.

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: !3 = 1*2*3 = 6

#include <stdio.h>

long fact=1;

int num,i;

void main(void)

{

printf("Numero = ");

scanf("%d",&num);

if (num>=0)

{

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

}

Page 6: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

6

M.Sc. Ana María Salgado G.

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

}

Page 7: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

7

M.Sc. Ana María Salgado G.

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

}

Page 8: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

8

M.Sc. Ana María Salgado G.

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

Page 9: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

9

M.Sc. Ana María Salgado G.

for(;;) //bucle for que no termina nunca

{

if(contador < max)

{

puts("Hola!");

contador++;

}

else

break;

}

}

Ejemplo #9:

//clave.c

int clave = -9;

int entrada;

#include <stdio.h>

void main(void)

{

printf("Introduzca un entero:");

while(scanf("%d",&entrada))

{

if(entrada != clave)

{

printf("%d\n",entrada);

printf("Introduzca un entero:");

}

else

break;

}

}

Page 10: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

10

M.Sc. Ana María Salgado G.

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

}

}

Page 11: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

11

M.Sc. Ana María Salgado G.

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;

}

Page 12: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

12

M.Sc. Ana María Salgado G.

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

}

Page 13: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

13

M.Sc. Ana María Salgado G.

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:

nmmmm +++

++

++ 1

...2

1

1

11

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

}

Page 14: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

14

M.Sc. Ana María Salgado G.

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

}

Page 15: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

15

M.Sc. Ana María Salgado G.

Ejercicio #6

Escriba un programa para evaluar la función y = 4x

2 – 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 3.00 POSITIVO

1.1 2.24 POSITIVO

.

.

.

2.0 -1.00 NEGATIVO

Solución:

//posnegdo.c

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

float x = 1, y;

void main(void)

{

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

}

Page 16: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

16

M.Sc. Ana María Salgado G.

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

}

Page 17: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

17

M.Sc. Ana María Salgado G.

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)

{

Page 18: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

18

M.Sc. Ana María Salgado G.

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.

Page 19: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

19

M.Sc. Ana María Salgado G.

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

}

}

Page 20: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

20

M.Sc. Ana María Salgado G.

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

}

Page 21: sentencia de control do while 2013 - WordPress.com

Sentencia de control do while

21

M.Sc. Ana María Salgado G.

Bibliografía

� Ceballos Francisco Javier. Curso de Programación C/C++ . Segunda Edición. Editorial

RAMA, Madrid, 2002.

� Joyanes Aguilar Luis, Zahonero Martínez Ignacio. Programación en C. Metodología,

estructura de datos y objetos. Mc Graw Hill.

� 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.