con solución - LDC - Universidad Simón Bolívar

Anuncio
 Universidad Simón Bolívar
Dpto. de Computación y Tecnología de la Información
CI­2125, Computación I
Práctica 5: ESTRUCTURAS DE REPETICIÓN
Como ya hemos visto, el procedimiento desarrollado para resolver un problema debe ser formulado como UNA SECUENCIA DETALLADA DE PASOS SIMPLES. Tal procedimiento es llamado algoritmo. Los algoritmos estructurados y los programas son diseñados utilizando tres métodos de control básicos: i.
secuencia: los pasos son realizados de una manera estrictamente secuencial, siendo cada paso ejecutado sólo una vez. ii.
selección: (Condicional)una o un número de acciones alternativas es seleccionado y ejecutado iii.
repetición: (Ciclos) uno o más pasos son realizados repetidamente.
Cada uno de estos métodos utilizados en forma individual son simples, pero el efecto de ellos hace que cualquier algoritmo puede ser construido utilizando combinaciones de estos.
Las estructuras de repetición o CICLO es un grupo de instrucciones que la computadora ejecuta en forma repetida hasta que queda satisfecha cierta condición de terminación.
Las repeticiones deben ser controladas para que estas instrucciones sean ejecutadas un número FINITO de veces.
Existen 2 tipos de instrucciones de repetición: • Repetición controlada por contador: Denominada a veces repetición definida, pues se sabe con anticipación cuantas veces se ejecutará el ciclo.
• Repetición controlada por “centinela” denominada a veces repetición indefinida, porque no se conoce con anticipación cuantas veces el ciclo se repetirá.
1. Escriba un enunciado en C que dado n, realice la suma de esos n primeros números. SOLUCIÓN
#include <stdio.h>
#include <stdlib.h>
#define N 10
int main()
{
int x, suma=0;
/* ejercicio */
for (x = 1; x <= N ; x++ ) {
printf("%d\n ", x);
suma=suma + x;
}
printf("%d\n ", suma);
system("PAUSE");
return 0;
}
2. Escriba un enunciado en C que realice la suma de los números impares comprendidos entre 1 y 99.
SOLUCION
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main()
­ 1 ­
CI­2125, Computación I
Práctica 5­ 14/02/yyyy
Práctica 5­ 14/02/yyyy
{
int x, suma=0;
float y;
/* ejercicio SUMA DE IMPARES ENTRE 1 Y 99*/
for (x = 1; x < N ; x=x+2 ) {
printf("%d\n ", x);
suma=suma + x;
}
printf("%d\n ", suma);
system("PAUSE");
return 0;
}
3. Encuentre el error en cada uno de los segmentos de código siguientes y explique como corregirlos:
a. x = 1;
while (x<= 10) ;
x++;
printf(“%d\n ”, x);
Solución: el ; después de la condición genera un ciclo infinito. Si lo eliminamos corre y da como resultado 11.
Ejercicio modificado
x = 1;
while (x<= 10) x++;
printf(“%d\n ”, x);
b. for (y = .1; y != 1.0; y += .1)
printf(“%f\n ”, y);
Solución: Se genera un ciclo infinito, por la representación de los valores reales no se llega al valor 1.0 jamas, si cambiamos por for (y = .1; y <= 1.0; y += .1)
printf(“%f\n ”, y); da los valores 0.1, 0.2,0.3,0.4,0.5,0.6, 0.7, 0.8, 0.9 y finaliza.
c.
for (x = 100, x <= 1 , x++)
printf(“%d\n ”, x);
Solución: Da error pues los separadores de las diferentes partes del for son , en vez de ;
for (x = 100; x <= 1 ; x++)
printf(“%d\n ”, x);
Este ciclo no se realiza ni una sola vez pues la x <= 1 es FALSA .
d. for (x = 999; x >= 1 ; x +=2 )
printf(“%d\n ”, x);
Solución: Ciclo infinito. La condición x >= 1 siempre sera verdadera.
4. Diga que valores de la variable de control x se imprimen para cada uno de los ennciados for
siguientes:
a. for (x = 2; x <= 13 ; x += 2 )
printf(“%d\n ”, x);
­ 2 ­
CI­2125, Computación I
Práctica 5­ 14/02/yyyy
Práctica 5­ 14/02/yyyy
IMPRIME : 2 4 6 8 10 12
b. for (x = 5; x <= 22 ; x += 7)
printf(“%d\n ”, x);
IMPRIME : 5 12 19
c.
for (x = 3; x <= 15 ; x += 3)
printf(“%d\n ”, x);
IMPRIME : 3 6 9 12 15
d. for (x = 12; x >= 2 ; x ­= 3 )
printf(“%d\n ”, x);
IMPRIME : 12 9 6 3
5. Escriba un programa que calcule el promedio de una lista de números leídos. El final de la lista es el valor 9999.
SOLUCION 1
#include <stdio.h>
#include <stdlib.h>
#define FIN 9999
int main()
{
int x, cont=0, acum=0; float promedio=0.0;
/* ejercicio promedio de valores leidos fin lista 9999*/
printf("por favor introduzca un valor, se finaliza con el valor 9999\n");
scanf("%d",&x);
while (x!=FIN) {
cont+=1;
acum=acum+x;
printf("por favor introduzca un valor, se finaliza con el valor 9999\n");
scanf("%d",&x);
}
promedio=acum/cont;
printf(" Promedio es =%f\n",promedio);
system("PAUSE");
­ 3 ­
CI­2125, Computación I
Práctica 5­ 14/02/yyyy
Práctica 5­ 14/02/yyyy
return 0;
}
6. Escriba un programa que calcule el factorial de n, donde n es leído. El factorial de un número n es igual al producto de los enteros positivos del 1 hasta el n.
SOLUCION
#include <stdio.h>
#include <stdlib.h>
#define FIN 9999
int main()
{
int i, n, fact=1; /* ejercicio factorial de N ) */
printf("por favor introduzca el valor de N\n");
scanf("%d",&n);
if (n == 0 || n==1 )fact= 1;
else for (i=1;i<= n; i++)
{
fact= fact*i;
}
printf(" El Factorial de N =%d es %d\n",n, fact);
system("PAUSE");
return 0;
}
7. Escriba un programa que localice el más pequeño de varios números enteros. Suponga que el primer valor leído especifica la cantidad de valores que restan. SOLUCIÓN
#include <stdio.h>
#include <stdlib.h>
#define FIN 9999
int main()
{ int i,x, n, menor; /* ejercicio Menor de una lista de números ) */
printf("por favor introduzca la cantidad de valores a leer N\n");
­ 4 ­
CI­2125, Computación I
Práctica 5­ 14/02/yyyy
Práctica 5­ 14/02/yyyy
scanf("%d",&n);
printf("valor leido= %d\n", n);
if (n == 0 || n==1 ) printf(" El valor debe ser mayor de 1\n");
else {
printf("por favor introduzca un valor \n");
scanf("%d",&x);
menor=x;
for (i=1;i< n; i++)
{
printf("por favor introduzca un valor \n");
scanf("%d",&x);
printf("valor leido= %d\n", x);
if (x <menor ) menor= x;
}
printf(" el valor menor es =%d \n",menor);
}
system("PAUSE");
return 0;
}
8. Suponga que un estudiante cambia 5 barajitas en un día. Cada día siguiente cambia una barajita más que el día anterior. Realice un programa que determine cuántas barajitas cambiará en N días. ¿Qué pasaría en el programa si la condición del for fuese i ≠N y N no fuese un entero? 9. Desarrolle un programa que permita determinar si un número entero positivo es primo utilizando un while, luego un for y un do-while. 10. Determine la función f(x) computada por el siguiente algoritmo y realice la corrida en frío para f(7) Entrada: X. (entero Positivo). Algoritmo: INICIO
sum←0
i←1
MIENTRAS (i<X) HACER
i←i+1
SI el resto de dividir i entre 2 es 0 ENTONCES
sum←sum+i
FINSI
FINMIENTRAS
FIN
­ 5 ­
CI­2125, Computación I
Práctica 5­ 14/02/yyyy
Práctica 5­ 14/02/yyyy
11. Elabore un programa en C que determine el Máximo Común Divisor entre dos números enteros. Una manera de calcular el Máximo Común Divisor es mediante la definición:
MCD(a,a)=a
MCD(a,b)=MCD(b,a)
MCD(a,b)=MCD(b,(a­b)) si a>b
12. La serie de Fibonacci se define de la siguiente manera an = an­1 + an­2. Con a0=0 y a1=1. Elabore un programa que determine el término ax de la serie. ­ 6 ­
Descargar