• No se han encontrado resultados

UNAN- LEON SENTENCIA DE CONTROL DO WHILE. M.Sc. Ana María Salgado G.

N/A
N/A
Protected

Academic year: 2021

Share "UNAN- LEON SENTENCIA DE CONTROL DO WHILE. M.Sc. Ana María Salgado G."

Copied!
21
0
0

Texto completo

(1)

M.Sc.

UNAN-LEON

S

ENTENCIA DE CONTROL

M.Sc. Ana María Salgado G.

(2)

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

(3)

3 M.Sc. Ana María Salgado G.

El laso do es muy similar al laso while solo quewhile 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); }

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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

(11)

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

(12)

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

(13)

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:

n

m

m

m

m

+

+

+

+

+

+

+

1

...

2

1

1

1

1

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

(14)

Ejercicio #5

El siguiente programa, recibe como dato un número entero N y obtiene el resultado de la siguiente serie:

1

1

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

(15)

15 M.Sc. Ana María Salgado G.

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

(16)

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

(17)

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

(18)

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.

(19)

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

(20)

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

(21)

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.

Referencias

Documento similar