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

sentencias de control while_2013 - ING.KARINA … · Web viewprintf("\n%s escrita al revés es: ", palabra); while (i >=0) { printf("%c", palabra[i]); i--; }} Bucles controlados por

  • Upload
    doandat

  • View
    218

  • Download
    2

Embed Size (px)

Citation preview

SENTENCIA DE CONTROL WHILE

M.Sc. Ana María Salgado G.

UNAN-

Sentencia de control while

Unidad IV:

Estructuras de control

Sentencia while

La forma general de esta sentencia es: while (expresion)

sentencia;

sentencia se ejecutará mientras el valor de expresión sea verdadero. Primero se evalúa expresión. Lo normal es que sentencia incluya algún elemento que altere el valor de expresión proporcionando así la condición de salida del bucle. Si sentencia es compuesta se encierra entre { }. Primero se evalúa la expresión si ésta es falsa, el control pasa directamente a la instrucción siguiente, pero si es verdadera entonces se ejecuta el cuerpo del laso while devolviendo el control al principio del mismo.

Es evidente que una de las acciones internas del bucle while debe modificar en un momento dado una de las variables que intervienen en la expresión que condiciona el bucle para que dicha condición se haga falsa y se pueda abandonar el bucle. Si el cuerpo del laso está formado por una sola instrucción no necesita las llaves que delimitan el cuerpo del bucle, pero si tiene más de una instrucción entonces las llaves son obligatorias.

E j e m plo # 1 : //digitosdecimales proceso digitosdecimales

Definir numero Como Entero;numero = 0; escribir "DIGITOS DEL SISTEMA DECIMAL";mientras numero < 10 hacer

escribir "digito: ",numero;numero = numero + 1;

finmientrasfinproceso

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

Sentencia de control while

C ód i g o en l en g ua j e C:

//digitosdecimales.c #include <stdio.h> void main(void){

int numero = 0; printf("DIGITOS DEL SISTEMA DECIMAL\n");while(numero < 10){

printf("digito: %d\n",numero); numero = numero + 1;

}

}

Ejemplo # 2

Realice un programa que eleve una base entera x, a una potencia:

P se u do c ódi g o en P S EIN T

Proceso potencia Definir i, p, n, base como entero;i <- 1;p <-1;Escribir "Entero elevado a una potencia";Escribir "Base:";Leer base;Escribir "Potencia:";Leer n;

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

Sentencia de control while

Mientras (i<=n) Hacerp <- p*base;i <- i +1;

FinMientras Escribir base," ^ ", n , " = ", p;

FinProceso

C ód i g o en l en g ua j e C:

//potenciawhile.c#include <stdio.h> void main(void){

int i = 1,p=1,base,n; printf("Entero elevado a una potencia\n");printf("Base:"); scanf("%d",&base); printf("Potencia:");scanf("%d",&n); while (i<=n) {

p=p*base; i++;

} printf("%d^%d = %d\n",base,n,p);

}

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

Sentencia de control while

Ejemplo # 3

Versión utilizando while, del ejercicio resuelto #1 de sentencia for. Página # 4:

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

while (i<=n) {

suma+=1.0/(float)(m+i); i++;

} printf("El resultado de la funcion es %f\n",suma);

}

Ejemplo # 4 Versión utilizando while, del ejercicio resuelto #4 de sentencia for. Página # 7:

//serie2while.c

#include <stdio.h> #include <math.h>int x,n,i = 1; float suma = 1;

void main(void){

printf("Ingrese el valor de n:"); scanf("%d",&n); printf("Ingrese el valor de x:"); scanf("%d",&x);

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

Sentencia de control while

while(i <= n){

suma = suma +i/pow(x,i); i++;

}

printf("suma = %.2f\n",suma); }

Ejemplo # 5

Un estudiante ha escrito un programa en C para evaluar la fórmula:

Para simplificar el programa el estudiante ha definido una nueva variable u, de la siguiente forma:

Con lo que la fórmula se transforma en:

U 2 U 3 U 4 U 5

2 3 4 5

Escribir un programa en C.

S o l uc i ón:

//evalpolinomio.c

#include <stdio.h> #include <math.h>

/*programa para evaluar una formula algebraica*/

void main(void){

float u,x,y = 0; M.Sc. Ana María Salgado G.

X Y = +

X 2 X 3 X 4 X 5 X

2 3 4 5

+ + +X -1 1 X -1 1 X -1 1 X -1

X

U =X

Y = U + + + +

-1 1

-1

Sentencia de control while int n = 5, i = 1; /*leer datos de entrada*/ printf("x="); scanf("%f",&x);u=(x-1)/x;

/*realizar los calculos*/ while(i <= n){

y = y + pow(u,i)/i; i++;

}

/*escribir la salida*/ printf("x = %f y = %f\n",x,y);

}

Ejemplo # 6

Escriba un programa en lenguaje C que, al recibir como datos los N lanzamientos del martillode la atleta cubana ganadora de la medalla de oro en las últimas olimpiadas celebradas enAtenas, calcule el promedio de dichos lanzamientos.

P se u do c ódi g o en P S EIN T

Proceso lanzamientosprom Definir lanzamientos, i Como Entero;Definir suma, media, longitud como real;i <- 1; suma <-0;

Escribir "Cuantos lanzamientos de martillo realizo la atleta?:"; Leer lanzamientos;

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

Sentencia de control while

Mientras (i <= lanzamientos ) HacerEscribir "Longitud del lanzamiento ",i,"?:";Leer longitud; suma <- suma + longitud; i <- i + 1;

FinMientras

media <- suma/lanzamientos; Escribir "El promedio de lanzamientos es ",media;

FinProceso

C ód i g o en l en g ua j e C

FinProceso

//lanzamientosprom.c

#include<stdio.h> int lanzamientos, i = 1;float suma=0, media, longitud;

void main(void){

printf("Cuantos lanzamientos de martillo realizo la atleta?:\n");scanf("%d",&lanzamientos);

while(i <= lanzamientos ) {

printf("Longitud del lanzamiento %d?:",i); scanf("%f",&longitud); suma = suma + longitud;i++;

}

media = suma/lanzamientos; printf("El promedio de lanzamientos es %g\n",media);

}

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

Sentencia de control while

Ejemplo #7:

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

11 – 22 + 33 - … ± NN

P se u do c ódi g o en P S EIN T

Proceso serie5_whileDefinir N, i como entero;Definir suma como real; i<-1; suma <- 0;

Escribir "Ingrese el valor de N: "; Leer N; Mientras (i<=N) Hacer

Si i % 2 <> 0 Entoncessuma <- suma + (i^i);

Sino Si i % 2 = 0 Entonces

suma <- suma - i^i;FinSi

FinSi

Escribir "i= ", i, " suma = ",suma; i<- i + 1;

FinMientras Escribir "El resultado final de la serie es ",suma;

FinProceso

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

Sentencia de control while

C ód i g o en l en g ua j e C

//serie5_while.c #include <stdio.h> #include <math.h>

int N,i = 1;float suma=0;

void main(void){

printf("Ingrese el valor de N: "); scanf("%d",&N);while(i<=N) {

if(i % 2 != 0) suma= suma + pow(i,i);

elseif(i % 2 == 0)

suma= suma - pow(i,i);

printf("i= %d\t suma = %g\n",i,suma);i++;

}

printf("\nEl resultado final de la serie es %g\n\n",suma);}

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

Sentencia de control while

Ejemplo #8:

/*Lee una palabra y la escribe al reves */ #include <stdio.h>

void main (void) {

char palabra[20]; int i; printf("Teclee una palabra (sin espacios) de menos de 20 letras:"); scanf("%s", palabra); i = 0;while(palabra[i] !='\0')

i++; printf("\n%s tiene %d letras.", palabra, i); printf("\n%s escrita al revés es: ", palabra);while (i >=0) {

printf("%c", palabra[i]); i--;

}

}

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.

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

Sentencia de control while

En el siguiente código hay un bucle con centinela; se introducen notas mientras que ésta sea distinta de centinela.

Ejemplo #9:

P se u do c ódi g o en P S EIN T

Proceso centinela Definir nota, suma, centinela como entero; suma <- 0; centinela <- -1; Escribir "Introduzca primera nota: ";Leer nota; Mientras (nota <> centinela) Hacer

suma <- suma + nota;Escribir "Introduzca la siguiente nota:";Leer nota;

FinMientras

Escribir "Final";Escribir "La suma de las notas es ",suma;

FinProceso

C ód i g o en C :

//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*/

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

Sentencia de control while

puts("Final"); printf("La suma de las notas es %d \n",suma);

}

Ejemplo #10:

P se u do c ódi g o en P S EIN T : Proceso Nterminos

Definir NT, TER, CONT, BAN como entero;Escribir "Numero de terminos a generar:"; Leer NT; TER <- 17;CONT <- 0; BAN <- 1;Mientras CONT <= NT Hacer

Escribir TER; SI BAN = 1 Entonces

TER <-TER - 2;BAN <-2;

Sino TER <- TER + 3;BAN <- 1;

FinSi CONT <- CONT +1;

FinMientras FinProceso

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

Sentencia de control while

C ód i g o en l en g ua j e C:

//Nterminos.c #include <stdio.h> int TER, CONT, BAN,NT;

void main(void){

printf("Numero de terminos a generar:\n"); scanf("%d",&NT); TER = 17; CONT = 0;BAN = 1; while(CONT <= NT) {

printf("%d\n",TER);if(BAN == 1){

TER =TER - 2; BAN = 2;

} else{

TER = TER + 3;BAN = 1;

}

CONT = CONT +1;}

}

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

Sentencia de control while

Ejemplo # 11

Hacer un programa que encuentre la suma de los valores de un conjunto de números enteros, la cantidad de valores negativos, positivos, iguales a cero y el total de números en el conjunto.

P se u do c ódi g o en P S EIN T

C ód i g o en l en g ua j e C

//GrupoNumEnteros.c #include <stdio.h> #include <string.h>

int VALN = 0, VAL0 = 0, VALP = 0, SUMA = 0, TOTALN, NUM; char SIGA[3] = {"SI"};

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

Sentencia de control while

void main(void){

while(strcmp(SIGA,"SI") == 0) {

printf("Ingrese un numero entero: "); fflush(stdin); scanf("%d",&NUM);SUMA = SUMA + NUM; if(NUM > 0)

VALP = VALP + 1; else{

if(NUM == 0) VAL0 = VAL0 + 1;

else VALN = VALN +1;

}

printf("Desea seguir? "); fflush(stdin); gets(SIGA);

} TOTALN = VALP + VALN + VAL0;printf("SUMA DE LOS NUMEROS: %d\n",SUMA); printf("NUMEROS POSITIVOS: %d \n", VALP);printf("NUMEROS NEGATIVOS: %d \n", VALN);printf("NUMEROS NULOS: %d \n", VAL0); printf("TOTAL DE NUMEROS INGRESADOS: %d\n",TOTALN);

}

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

Sentencia de control while

Ejemplo #12

Se tiene una serie de N números enteros. Se quiere saber si dentro de ellos existe, por lomenos, uno cuyo valor sea cero.

C ód i g o en l en g ua j e C

//NnumerosEnteros.c #include <stdio.h> int CONTA = 1, NN, NUM;char ENCONTRADO ='F';void main(void){

printf("Cuantos numeros?"); scanf("%d",&NN); while((CONTA <= NN) && (ENCONTRADO == 'F')) {

printf("Ingrese un numero:"); scanf("%d",&NUM);if(NUM == 0)

ENCONTRADO = 'V';else

CONTA = CONTA + 1; }

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

Sentencia de control while

if(ENCONTRADO == 'V')printf("SI HAY UN CERO ENTRE LOS NUMEROS \n");

else printf("NO HAY UN CERO ENTRE LOS NUMEROS \n");

}

Ejemplo # 13:

#include <stdio.h> #include <conio.h>#define FIN '*'

void main(void){

char ch = '\0';int contador = 0;printf("Ingrese una cadena de caracteres. Escriba * para finalizar\n");ch=getchar();

while(ch != FIN) {

contador++;ch=getchar();

}

printf("La cadena tiene %d caracteres\n",contador);}

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

Sentencia de control while

Ejemplo# 14://centinela3.c

#include <stdio.h>

void main(void){

int c;printf("Ingrese una cadena. Presione ^Z para terminar.\n");while((c=getchar()) != EOF)

putchar(c);}

Ejercicios resueltos

Ejercicio # 1

Suponga que el usuario quiere encontrar la suma de 15 + 47 + 43 + 64 + 29 Con el siguiente programa, el usuario puede ingresar un número cada vez y después introducir el centinela de datos -1 para indicar que ya no hay más datos. La computadora no agregará el-1 a la suma, si no que lo tomará como una señal de salida del ciclo.

//sumacentinela.c #include <stdio.h>

int suma=0, num;void main(void){

printf("Escriba un numero entero ó -1 para salir: ");scanf("%d",&num);

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

Sentencia de control while while(num!=-1){

suma+=num; printf("Escriba un numero entero ó -1 para salir: ");

scanf("%d",&num); }

printf("La suma es %d\n",suma);}

Ejercicio # 2

Como entrada al siguiente programa, un cajero teclea los datos de las compras de un cliente.Cada grupo de datos consiste del nombre del artículo, el precio del mismo y la cantidadcomprada. Puesto que el cajero no sabe de antemano el número de los artículos que se van acomprar, para producir el recibo de venta el programa usa un ciclo while con el centinela“xyz”

//recibocentinela.c #include <stdio.h> #include <string.h>

char artic[30];int cant; float precio, suma=0, costo;

void main(void){

printf("Escriba nombre de articulo o xyz para terminar\n"); gets(artic); while(strcmp(artic,"xyz")){

fflush(stdin); printf("Escriba precio unitario y cantidad\n"); scanf("%f %d",&precio,&cant); costo=precio * cant; suma+=costo;printf("%d %s cuesta %f\n",cant,artic,costo); printf("\n\nEscriba nombre de articulo o xyz para terminar\n");fflush(stdin); gets(artic);

}

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

Sentencia de control while printf("Total = %f\n",suma);

}

Ejercicio # 3

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, cuandoel entero inicial es 26, la secuencia será: 26 13 40 20 10 5 16 8 4 2 1

//ulam.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); while(n!=1){

if(n%2==0) n=n/2;

elsen=3 * n + 1;

printf("%d ",n); }

}

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

Sentencia de control while

Ejercicios propuestos

1. Construya un programa que, al recibir como datos la clave del empleado y los seis primeros sueldos del año, calcule el ingreso total semestral y el promedio mensual, e imprima la clave del empleado, el ingreso total y el promedio mensual.

2. Todos los lunes, miércoles y viernes, una persona corre la misma ruta y cronometra los tiempos obtenidos. Determinar el tiempo promedio que la persona tarda en recorrer la ruta en una semana cualquiera.

3. Realice una nueva versión utilizando while, del ejercicio resuelto # 5 de for, página # 8.

4. Ejercicios propuestos for #1, 2, 4, 5, 6.

5. A lo largo de un día un cajero procesa a las personas que llegan a efectuar movimientos bancarios. Estos movimientos son esencialmente depósitos y retiros. Determinar la cantidad total de dinero obtenido por concepto de depósitos y retiros en todo el día, lo mismo que un balance que indique si hubo más retiros que consignaciones.

6. Suponga que el usuario quiere encontrar la suma: 15 + 47 + 43 + 64 + 29 Escriba un programa donde el usuario no sepa de anticipado la cantidad de números a sumar. En vez de ello, el usuario escribe cada número, uno después de otro y termina la escritura de datos por medio del centinela n(de no). Consejo: Use como centinela el siguiente rótulo: “Teclee s para continuar, n para parar:”

7. Construya un programa que al recibir como datos el nombre, las horas trabajadas, el sueldo por hora, calcule e imprima el pago para cada uno de los empleados de una empresa. Además, calcule la nómina total, pero no sabemos exactamente cuántos empleados existen.

8. Escribir un programa interactivo que lea un valor entero positivo y determine lo siguiente:

• Si el entero es un número primo. • Si el entero es un número de Fibonacci.

Escribir el programa de forma que se ejecute de forma repetida, hasta que se introduzca como valor de entrada un cero.

9. En una elección realizada en Piedra Dura se presentaron tres candidatos: Pedro, Pablo y Vilma. Por cada votante se tiene la siguiente información:

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

Sentencia de control while Piedracédula: Número de cédula del votante. Dentro de sus posibles valores no tiene uno que sea cero o negativo. El ciclo de entrada de datos terminará cuando encuentre un valor de cero para el campo piedracédula.

Opción: Campo que indica el candidato escogido, si el valor del campo es:

1: votó por Pedro

2: votó por Pablo

3: votó por Vilma

4: votó en blanco

Elaborar un programa que muestre el número de votos depositados por cada cantidato y el total de votantes.

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.

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