sentencias de control while_2013

Anuncio
2013
UNANLEON
SENTENCIA DE CONTROL WHILE
M.Sc. Ana María Salgado G.
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.
Ejemplo #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;
finmientras
finproceso
2
M.Sc. Ana María Salgado G.
Sentencia de control while
Código en lenguaje 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:
Pseudocódigo en PSEINT
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) Hacer
p <- p*base;
i <- i +1;
FinMientras
Escribir base," ^ ", n , " = ", p;
FinProceso
Código en lenguaje 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:
 x −1 1  x −1 1  x −1 1  x −1 1  x −1
y =
+ 
 + 
 + 
 + 

 x  2 x  3 x  4 x  5 x 
2
3
4
5
Para simplificar el programa el estudiante ha definido una nueva variable u, de la siguiente
forma:
 x −1
u=

 x 
Con lo que la fórmula se transforma en:
y=u+
u2 u3 u 4 u5
+ +
+
2
3
4
5
Escribir un programa en C.
Solución:
//evalpolinomio.c
#include <stdio.h>
#include <math.h>
/*programa para evaluar una formula algebraica*/
void main(void)
{
float u,x,y = 0;
6
M.Sc. Ana María Salgado G.
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 martillo
de la atleta cubana ganadora de la medalla de oro en las últimas olimpiadas celebradas en
Atenas, calcule el promedio de dichos lanzamientos.
Pseudocódigo en PSEINT
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 ) Hacer
Escribir "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ódigo en lenguaje 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 la
siguiente serie:
11 – 22 + 33 - … ± NN
Pseudocódigo en PSEINT
Proceso serie5_while
Definir 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 Entonces
suma <- 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ódigo en lenguaje 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);
else
if(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:
Pseudocódigo en PSEINT
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ódigo 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:
Pseudocódigo en PSEINT:
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ódigo en lenguaje 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.
Pseudocódigo en PSEINT
Código en lenguaje 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 lo
menos, uno cuyo valor sea cero.
Código en lenguaje 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 cantidad
comprada. Puesto que el cajero no sabe de antemano el número de los artículos que se van a
comprar, 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, cuando
el 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;
else
n=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. 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.
23
M.Sc. Ana María Salgado G.
Descargar