Logo Studenta

ESTRUCTURAS REPETITIVAS

¡Este material tiene más páginas!

Vista previa del material en texto

ESTRUCTURAS REPETITIVAS
1.1.-ESTRUCTURAS REPETITIVAS
Al plantear la solución de algunos problemas matemáticos nos encontramos que una operación se repite varias veces, es obvio que bajo estas condiciones los datos que se utilizan se modifican en forma gradual de acuerdo al número de veces que se repite la operación, a esta acción se le conoce como ciclo. 
En algunos casos se puede definir el número de ciclos o repeticiones que se ejecutan en la operación, en otros no, a las operaciones que se repiten cíclicamente y que tienen un control del número de ciclos se les conoce como estructuras repetitivas, estas nos ayudarán a resolver problemas tales como calcular el factorial de un número (que es la multiplicación de un numero por todos los que le anteceden hasta llegar al uno), o una suma de n números.
1.2.-ESTRUCTURA REPETITIVA for
Esta es la estructura repetitiva que se emplea para aquellos problemas en que el número de veces que se repite una operación es conocido, la sintaxis que se debe seguir es la siguiente:
……
for (v=vi;v(<,<=,>,>=)vf;v=v(+,-)ID)
{
proceso;
}
Donde vi= inicialización ó valor inicial.
vf=condición ó valor final.
 Id=incremento –positivo o negativo-.
La inicialización o valor inicial es una instrucción que asigna un valor inicial a una variable que servirá como control del ciclo, lo podemos interpretar también como un límite inferior, es decir es el valor del cual va a partir el contador de eventos (ciclos).
 La condición es una expresión relacional que evalúa la variable de control de ciclo contra un valor final o de parada que determina cuando debe acabar el ciclo, de igual manera es un límite superior, es decir el número máximo de eventos que se deben contar (ciclos.
El incremento define la manera en que la variable de control de ciclo debe cambiar cada vez que el computador repite un ciclo.
Estos argumentos deben ser separados con un punto y coma (;)
Ejemplo 1.1.-Elabore un programa que al recibir como datos las 7 calificaciones que obtuvo un estudiante durante un curso de física, y determine su promedio.
#include<stdio.h>
#include<conio.h>
int main ()
{
int i;
float calif,prom,sum;
sum= Ø;
for(i=1;i<=7;i++)
{
printf(""\n \tIngrese la calificación: \t%d",i);
scanf("%f",&calif);
sum=sum+calif;
}
prom=sum/7;
printf(""\n \t Tu promedio es: \t%.2f ",prom);
getch();
return Ø;
}
1.2.1.-EXPRESIONES ABREVIADAS.
En algunos casos los programadores presentan ejercicios de estructuras repetitivas con expresiones abreviadas que pueden confundir a las personas cuando inician en el estudio de la programación, estas expresiones tienen su equivalencia como se muestra a continuación:
TABLA 1.1.-OPERACIONES ABREVIADAS.
	Expresión Abreviada
	Expresión Equivalente
	x+=y
	x=x+y
	x-=y
	x=x-y
	x*=y
	x=x*y
	x/=y
	x=x/y
	x&=y
	x=x&y
	x|=y
	x=x|y
	x^=y
	x=x^y
	x<<=y
	x=x<<y
	x>>=y
	x=x>>y
	
	
Ejemplo 1.2.-Tomando como referencia el ejercicio anterior ahora lo resolveremos con la expresión abreviada, y para su mejor comprensión los siguientes ejercicios se harán de las dos forma –sin y con expresiones abreviadas-.
#include<stdio.h>
#include<conio.h>
int main ()
{
Int i;
float calif,prom,sum;
sum= Ø;
for(i=1;i<=7;i++)
{
printf(""\n \tIngrese la calificación: \t%d",i);
scanf("%f",&calif);
sum+=calif;
}
prom=sum/7;
printf(""\n \t Tu promedio es: \t%.2f ",prom);
getch();
return 0;
}
Ejemplo 1.1.-Resolver el problema anterior, sin expresión abreviada considerando el número de calificaciones definido por el grupo al que se le impartió la clase.
#include<stdio.h>
#include<conio.h>
int main ()
{
Int i,n;
float calif,prom,sum;
sum= Ø;
for(i=1;i<=n;i++)
{
printf(""\n \tIngrese la calificación: \t%d",i);
scanf("%f",&calif);
sum=sum+calif;
}
prom=sum/n;
printf(""\n \t Tu promedio es: \t%.2f ",prom);
getch();
return Ø;
}
Ejemplo 1.4.-Resolver el problema anterior, con expresión abreviada considerando el número de calificaciones definido por el grupo al que se le impartió la clase.
#include<stdio.h>
#include<conio.h>
int main ()
{
Int i,n;
float calif,prom,sum=0;
for(i=1;i<=n;i++)
{
printf(""\n \tIngrese la calificación: \t%d",i);
scanf("%f",&calif);
sum+=calif;
}
prom=sum/n;
printf(""\n \t Tu promedio es: \t%.2f ",prom);
getch();
return Ø;
}
Como podrás ver además de la expresión abreviada, se tienen otros dos detalles primero la variable n es empleada como un límite que cambia de acuerdo a las necesidades del usuario, la segunda es que la variable sum ahora se igualo a cero dese que esta se declaro y no posteriormente, lo cual también es común sin afectar el programa y reduciendo el número de líneas obteniendo un programa más flexible.
Ejemplo 1.4.-Elabora el código para un programa que calcule el factorial de cualquier número.
#include<stdio.h>
#include<conio.h>
int main ()
{
Int i,n,num;
double fact;
printf(""\n \tIngrese un numero entero positivo: \t%d");
scanf("%d",&num);
if(num== Ø || num==1)
{
fact=1;
}
else
{
fact=1;
for(i=1;i<=n;i++)
{
fact=fact*I;
}
printf(""\n \tEl factoriaI de %d es: \t%lf",num,fact);
getch();
return Ø;
}
Ejemplo 1.5.-El presente programa calcula el factorial de cualquier número, pero el incremento o decremento i++ ó i— se indica de la manera i+1 ó i-1, según sea el caso.
#include<stdio.h>
#include<conio.h>
int main ()
{
Int i,n,num;
double fact;
printf(""\n \tIngrese un numero entero positivo: \t%d");
scanf("%d",&num);
if(num== Ø || num==1)
{
fact=1;
}
else
{
fact=1;
for(i=1;i<=n;i+1)
{
fact=fact*i;
}
printf(""\n \tEl factoriaI de %d es: \t%lf",num,fact);
getch();
return Ø;
}
Ejemplo 1.6.-Elabora el código para un programa que al ingresar una cantidad de números cualquiera sume por un lado los pares y por el otro los impares, imprimiendo las respectivas sumas.
#include<stdio.h>
#include<conio.h>
int main ()
{
int i,n,num,sum1,sum2;
double sum1,sum2;
printf(""\n \tIngrese la cantidad de números a sumar: \t%d");
scanf("%d",&n);
sum1= Ø;
sum2= Ø;
for(i=1;i<=n;i++)
{
printf(""\n \tIngrese el dato numero %d:\t",i);
scanf("%d",&num);
if((num%2)== Ø)
{
sum1=sum1+num;
}
else
{
sum2=sum2+num;
}
}
printf(""\n \tLa suma de los números pares es \t%lf",sum1);
printf(""\n \tLa suma de los números impares es \t%lf",sum2);
getch();
return Ø;
}
Ejemplo 1.7.- Resolver el ejemplo anterior utilizando la forma abreviada, así como para la nueva forma de ver el incremento en i, solo que ahora cuando este es negativo, es decir i-1.
#include<stdio.h>
#include<conio.h>
int main ()
{
int i,n,num,sum1,sum2;
double sum1,sum2;
printf(""\n \tIngrese la cantidad de números a sumar: \t%d");
scanf("%d",&n);
sum1= Ø;
sum2= Ø;
for( i=n;i>=1;i-1)
{
printf(""\n \tIngrese el dato numero %d:\t",i);
scanf("%d",&num);
if((num%2)== Ø)
{
sum1+=num;
}
else
{
sum2+=num;
}
}
printf(""\n \tLa suma de los números pares es \t%lf",sum1);
printf(""\n \tLa suma de los números impares es \t%lf",sum2);
getch();
return Ø;
}
Ejemplo 1.8.-Dado un circuito eléctrico con n resistencias conectadas en serie el programa calcula la resistencia total, la corriente total y la potencia total del sistema.
#include <stdio.h>
#include <conio.h>
int main()
int i,n,;
float resist,req,it,vt,pt;
printf(“\n\tIngrese el numero de resistencias en el circuito”);
scanf(“%d”,&n);
printf(“\n\tIngrese el valor del voltaje de la fuente en el circuito”);
scanf(“%f”,&vf);
req= Ø;
for(i=1;i<=n;i+1)
{
printf(“\n\tIngrese el valor de la resistencia %d”,i);
scanf(“%f”,&resist);
req=req+resist;
}
it=vt/req;
pt=vt*it;
printf(“\n\tLa resistencia total del circuito es:\t%.2f”,req);
printf(“\n\tEl voltaje total del circuito es:\t%.2f”,vt);
printf(“\n\tLa corriente total del circuito es:\t%.2f”,it);
printf(“\n\tLa potencia total del circuito es:\t%.2f”,pt);
getch();
return Ø;
}
Ejemplo 1.9.- Dado un circuito eléctrico con n resistencias conectadas en paralelo el programa calcula la resistencia total, la corriente total y la potencia total del sistema.
#include <stdio.h>
#include <conio.h>
int main()
int i,n,r;
float resist,req,it,vt,pt;
printf(“\n\tIngrese el numero de resistencias en el circuito”);
scanf(“%d”,&n);printf(“\n\tIngrese el valor del voltaje de la fuente en el circuito”);
scanf(“%f”,&vf);
req= Ø;
{
printf(“\n\tIngrese el valor de la resistencia %d”,i);
scanf(“%f”,&resist);
req=req + (1/resist);
}
it=vt/req;
pt=vt*it;
printf(“\n\tLa resistencia total del circuito es:\t%.2f”,req);
printf(“\n\tEl voltaje total del circuito es:\t%.2f”,vt);
printf(“\n\tLa corriente total del circuito es:\t%.2f”,it);
printf(“\n\tLa potencia total del circuito es:\t%.2f”,pt);
getch();
return Ø;
}
Generalmente el ciclo for empieza en uno y se incrementa de uno en uno, sin embargo hay casos en que este tiene particularidades como las que se indican a continuación
1.-El valor inicial puede ser diferente de uno, ejemplo:
· for(x=5;x<=15;x=x+1){ etc.};
2.-El valor inicial puede ser negativo, ejemplo:
· for (x = -3 ;x<= 8; x=x+1) { etc.};
· 1.- Los incrementos también pueden ser diferentes al de uno en uno, ej.; 
for (x=1; x<= 2 Ø; x=x+3){ etc. };
4.- Incluso pueden ser decrementos, solo que en este caso, recordar:
· El valor inicial de la variable debe ser mayor que el valor final. 
· Cambiar el sentido de la condición. 
ejemplo:
for (x= 5Ø; x>= 1Ø; x= x-4 ) { etcétera };
5.- Solo para los casos de incrementos y decrementos de una en una unidad se puede sustituir en el for, x = x + 1 por x++, y x = x - 1 por x--.
*Una buena práctica seria construir los diferentes ejercicios mostrados como ejemplo de todas las formas posibles.
1.1.-ESTRUCTURA REPETITIVA WHILE
Esta estructura la empleamos cuando desconocemos totalmente el número de ciclos que ejecuta una operación, de tal manera que cada vez que se ejecuta el ciclo se evalúa una condición, si esta existe se ejecuta el ciclo, de lo contrario el ciclo no es ejecutado y se da término a este .
 La estructura algorítmica repetitiva WHILE al igual que las estructuras anteriores emplea una sintaxis que se presenta a continuación:
pi=Proposición Inicial;
while (pi)
{
proceso;
…
pi=Modificación de pi;
…..
}
Ejemplo 1.10.-Se desea obtener la suma de una serie de números al azar, el programa deberá contarlos en forma indefinida hasta que el usuario concluya con el total de los números.
#include <stdio.h>
#include <conio.h>
Int main()
{
float num,snum;
snum= Ø;
printf(" \t\nIngrese el primer numero:\t”);
scanf(“%f”&num);
while(num)
{
snum=snum+num;
printf(" \t\nIngrese el siguiente numero:\t”);
scanf(“%f”&num);
}
printf(" \t\nLa suma de los números es:\t%f”,snum);
getch();
return Ø;
}
Ejemplo 1.11.-Se desea obtener la suma de los gastos realizados por una compañía, el programa deberá sumar los gastos hasta que el contador no tenga otro gasto que ingresar.
#include <stdio.h>
#include <conio.h>
Int main()
{
floategre,segre;
segre= Ø;
printf(" \t\nIngrese el primer gasto:\t”);
scanf(“%f”&egre);
while(egre)
{
segre=segre+egre;
printf(" \t\nIngrese el siguiente gasto:\t”);
scanf(“%f”&egre);
}
printf(" \t\nEl valor de los gastos totales de la compañíaes:\t%f”,segre);
getch();
return Ø;
}
Ejemplo 1.12.-Se desea obtener la suma de la raíz cuadrada de un conjunto de números que se ingresan en forma no definida.
#include <stdio.h>
#include <conio.h>
Int main()
{
Int num;
float sum,raiz;
sum= Ø;
printf(" \t\nIngrese un numero entero positivo -0 para terminar-:\t”);
scanf(“%d”&num);
while(num)
{
raíz=sqrt(num);
printf(" \t\nLa raíz cuadrada de %d es:\t%f”,num,raiz);
sum=sum+raiz;
scanf(“%d”&num);
printf(" \t\nIngrese un numero entero positivo -0 para terminar-:\t”);
scanf(“%d”&num);
}
printf(" \t\nLa suma de las raíces es:\t%f”,sum);
getch();
return Ø;
}
1.4.-ESTRUCTURA REPETITIVA do-while.
Esta estructura al igual que la while se emplea para resolver problemas donde no sabemos el número de veces que se debe repetir un ciclo, pero conocemos que al menos este se debe realizar una vez.
A continuación presentamos la sintaxis de esta estructura repetitiva.
……….
do
{
Proceso;
………..
modificación de p;
}
while (p)
……….
Ejemplo 1.12.-El programa calcula el promedio de un jugador de boliche durante un torneo.
#include<stdio.h>
#include<conio.h>
Int main()
{
Int tiro,i;
i= Ø;
float sum,prom;
printf(" \t\nIngrese el numero de pinos derribados en el primer tiro:\t”);
scanf(“%d”&tiro);
do
{
sum=sum+tiro;
i=i+1;
printf(" \t\nCuantos pinos derribados en el siguiente tiro – 0 para terminar-:\t”);
scanf(“%d”&tiro);
}
while(tiro);
prom=sum/I;
printf(" \t\nEl promedio del jugador es de:\t%f”,prom);
getch();
return Ø;
}
Ejemplo 1.11.-Utilizando la combinación de las estructuras algorítmica repetitiva do-while y la estructura algorítmica selectiva múltiple switch, realizar un programa donde el usuario elija una figura geométrica de la cual desea calcular el área de la base, el área superficie y el volumen.
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main ()
{
float a,b,ce,d,abase,asup,vol;
int op,e;
do
{ 
printf(" \t Calcular el Area de la Base, AreaSuperficial y Volumen de Prismast\t\t\nIngrese una opción\n\n\t 1.-Poligono Rectangular \n\n\t 2.-Prisma Triángular \n\n\t 1.-Cilindro\n\n\t 4.-Prisma Cuadrangular \n\n\t 5.-Prisma Hexagonal \n\n\t\t\t\t\t\t");
scanf("%d",&op);
switch (op)
{
case 1 : 
printf("\nIngrese el ancho de la base:");
scanf("%f",&a);
printf("Ingrese el largo de la base:");
scanf("%f",&b);
printf("Ingrese la altura del Prisma:");
scanf("%f",&ce);
abase=a*b;
asup=(2*(a*b))+(2*(a*ce))+(2*(b*ce));
vol=a*b*ce;
printf("\n\n\a El área de la Base es =%f",abase);
printf("\n\n El área superficial es =%f",asup);
printf("\n\n El volumen es =%f",vol);
break;
case 2 : 
printf("\nTomar en cuenta que es un triangulo rectangulo:");
printf("\nIngrese cateto opuesto:");
scanf("%f",&a);
printf("Ingrese cateto adyacente:");
scanf("%f",&b);
printf("Ingrese la altura del Prisma:");
scanf("%f",&ce);
printf("La hipotenusa es:%f",d);
abase=(a*b)/2;
d=sqrt((pow(a,2)+pow(b,2)));
asup=2*abase+(a*ce)+(b*ce)+(d*ce);
vol=abase*ce;
printf("\n\n\a El área de la Base es =%f",abase);
printf("\n\n El área superficial es =%f",asup);
printf("\n\n El volumen es =%f",vol);
break;
case 3 : 
printf("\nIngrese el radio:");
scanf("%f",&a);
printf("Ingrese la altura del cilindro:");
scanf("%f",&b);
abase=M_PI*(pow(a,2));
asup=(2*abase)+(2*a*M_PI*ce);
vol=abase*b;
printf("\n\n\a El área de la Base es =%f",abase);
printf("\n\n El área superficial es =%f",asup);
printf("\n\n El volumen es =%f",vol);
break;
case 4 : 
printf("\nIngrese el ancho de la base:");
scanf("%f",&a);
printf("Ingrese la altura del prisma:");
scanf("%f",&b);
abase=pow(a,2);
asup=(2*abase)+(4*a*b);
vol=abase*b;
printf("\n\n\a El área de la Base es =%f",abase);
printf("\n\n El área superficial es =%f",asup);
printf("\n\n El volumen es =%f",vol);
break;
case 5 : 
printf("\nIngrese el radio de la base:");
scanf("%f",&a);
printf("Ingrese la longitud de un lado de la base:");
scanf("%f",&b);
printf("Ingrese la altura del prisma:");
scanf("%f",&ce);
abase=((sqrt(pow(a,2)+pow((b/2),2)))*6*b)/2;
asup=2*abase+(6*b*ce);
vol=abase*ce;
printf("\n\n\a El área de la Base es =%f",abase);
printf("\n\n El área superficial es =%f",asup);
printf("\n\n El volumen es =%f",vol);
break;
 }
printf("\n\t\t\tDesea realizar otro calculo? \n\t SI-Presiona 1 \n\t NO---Presiona 0 \n\t\t\t");
scanf("%d",&e); 
 } 
while(e==1); 
getch ();
return Ø;
}
Ejemplo 1.14.-Utilizando la estructura algorítmica selectiva if/else en combinación con la estructura algorítmica repetitiva do-while realizar un programa que divida a dos números, y que envíe un mensaje de error si el denominador es cero.
# include<stdio.h>
# include<conio.h>
int main ()
{
int d;
float a,b,c; 
printf("\t\t\tPrograma divisor, excepto cero \n\n");
do
 {
printf("\n\tIngrese el dividendo:");
scanf("%f",&a);
printf("\n\tIngrese el divisor:");
scanf("%f",&b);
 c=a/b;
if(b== Ø)
printf("\a\n\t\tLa división entre cero es una indeterminación \n\n"); 
else
printf("\n\n\t\tEl resultado de la división es =%f\n\n",c);
printf("\n\t\t Sidesea realizar otra división presione 1\n\n\t\t");
scanf("%d",&d);
}
while(d==1);getch ();
return Ø;
}
EJERCICIOS DE REFORZAMIENTO
I.-Utilizando la estructura repetitiva for desarrolle los programas que realicen las siguientes operaciones (funciones).
1.- Despliegue los números del 20 al 30.
2.- Desplegar los enteros entre 30 y 50 acompañados de su potencia cuadrada y raíz cúbica respectivamente (revisar el tema de operadores aritméticos).
1.- Desplegar los múltiplos de 5 contenidos entre el número 10 y el 50 con su factorial y logaritmo respectivo (revisar el tema de operadores aritméticos también). 
4.- Desplegar la tabla de multiplicar que el usuario indique.
 5.- Evaluar la función Y=5X2 + 3X + 8 CUANDO X--> -1...10 (rango de -3 hasta 10) 
II.-Utilizando la estructura repetitiva while desarrolle los programas que realicen las siguientes operaciones (funciones).
1.- Despliegue los números enteros entre 50 y 80.
2.- Desplegar los múltiplos de 4 contenidos entre el número 20 y el 60 con su logaritmo de base 10 y su logaritmo de base e (revisar el tema de operadores aritméticos). 
1.- Desplegar la tabla de multiplicar que el usuario indique.
4.- Evaluar una función cualesquiera para el rango de valores de x de -3 a +5
III.-Utilizando la estructura repetitiva do-while desarrolle los programas que realicen las siguientes operaciones (funciones).
1.- Capturar un número cualesquiera e informar si es o no es mayor de 100
2.- Capturar un numero entero cualesquiera e informar si es o no es múltiplo de 4 ( recordar el operador mod(%), analizado en el tema de operadores aritméticos).
1.- Capturar 3 números y ordenarlos de manera descendente y ascendente.
4.- Capturar los cinco datos más importantes de un Empleado, incluyendo el sueldo diario y los días trabajados , desplegarle su cheque semanal solo si ganó más de $500.00 en la semana, en caso contrario desplegarle un bono de despensa semanal de $150.00 .
5.- Capturar los datos más importantes de un estudiante incluyendo tres calificaciones, una página que contiene una boleta de calificaciones es llamada si el estudiante es de la carrera de medicina, en caso contrario otra pagina despliega un oficio citando a los padres del estudiante a una plática amistosa con los maestros de la escuela.
6.- Capturar los datos mas importantes de un producto cualesquiera, incluyendo cantidad, precio, etc., desplegar una orden de compra, solo si el producto es de origen nacional, en caso contrario no hacer nada.
7.- Construir una página que contenga el siguiente menú conversión de pesos a dólares 
conversión de libras a kilogramos conversión de kilómetros a millas 
fin de menú seleccionar opción [ ]? Este es el edit del switch().
8.- Construir un programa que capture un deporte y despliegue dos implementos deportivos apropiados.
9.- Evaluar cualquier función vista para cuando x = 3, -4, 5
10.- Realizar un programa que capture 3 datos, los segundos, los minutos y las horas, y una vez que han sido capturados al dato de hora que se capturo aumentarle un segundo y verificar si ese cambio afecta los otros dos, es decir, a los minutos y a las horas.

Continuar navegando