Está en la página 1de 6

CI-2125

Práctica 4: Iteraciones

1. 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.
SOLUCIÓN:

El algoritmo sería:
INICIO
LEER N
cambia5
i1

MIENTRAS iN HACER


cambiacambia+1
FINMIENTRAS

IMPRIMIR cambia
FIN

El programa en lenguaje C:
#include <stdio.h>
main()
{
int N; // Entrada
int cambia; // Salida

int i;
printf(“Escriba el numero de dias para cambiar barajitas ”);
scanf(“%d”,&N);
cambia=5; // La cantidad de barajitas que cambia el primer dia
for (i=1; i<=N; i++)
{
cambia=cambia+1; // Cada día siguiente cambia una barajita más que
// el día anterior
}
printf(“El número de barajitas cambiadas es %d”,cambia);
}

2. ¿Qué pasaría en el programa anterior si la condición del for fuese i N y N no fuese un


entero?
SOLUCION: Se podría generar un ciclo infinito, porque i siempre sería distinta de N.

3. Desarrolle un programa que permita determinar si un número entero positivo es primo


utilizando un while, luego un for y un do-while.
SOLUCIÓN:
Escribiendo primero el algoritmo:

INICIO
i2
primotrue
MIENTRAS i<(num/2) HACER
SI num es divisible por i ENTONCES
primofalse
SALIR MIENTRAS
FINSI
ii+1
FINMIENTRAS

IMPRIMIR primo
FIN

Ahora en lenguaje C.
El encabezado del programa es el mismo para las tres versiones:

#include <stdio.h>
#define true 1
#define false 0

main()
{
int num,mitad; // Entrada
int primo; // Salida
int i;

Utilizando un while:
mitad=(num+1)/2;
i=2;
primo=true;
while (primo && i<mitad) //mientras i no divida a num
{
if (num%i==0) // si num es divisible por i, entonces num
// no es primo
{
primo=false;
}
i=i+1;
}
if (primo)
printf(“%d es primo”,num);
else
printf(“%d no es primo”,num);
}
Utilizando un for
mitad=(num+1)/2;
primo=true;
for(i=2;i<mitad && primo; i=i+1)
{
if(num%i==0)
primo=false;
}
if (primo)
printf(“%d es primo”,num);
else
printf(“%d no es primo”,num);
}

Utilizando un do-while:

i=2;
mitad=(num+1)/2;
primo=true;
do {
if (num%i==0)
primo=false;
i=i+1;
} while(primo && i<mitad);
if (primo)
printf(“%d es primo”,num);
else
printf(“%d no es primo”,num);
}

4. 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

SOLUCIÓN :
Corrida en frío
 sum = 0, i = 1
 i = 2; resto(i/2)=0  sum=2
 i=3; resto(i/2)=1
 i=4; resto(i/2)=0  sum=2+4
 i=5; resto(i/2)=1
 i=6; resto(i/2)=0  sum=2+4+6
 i=7; resto(i/2)=1
 etcétera
La función computada por el algoritmo es f(x) = la suma de los números pares enteros
positivos, menores o iguales a X.

5. 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

SOLUCIÓN:

El algoritmo sería:
INICIO
LEER a,b
SI a>b ENTONCES
aux1a
aux2b
SINO
aux1b
aux2a
FINSI
MIENTRAS aux1!=aux2 HACER
SI aux1>aux2 ENTONCES
aux1aux1-aux2
SINO
aux2aux2-aux1
FINSI
FINMIENTRAS
mcdaux1
FIN

El programa en C sería :

#include <stdio.h>
main()
{
int a,b; // Entradas
int mcd; // Salida
int aux1,aux2;
printf(“Introduzca dos números enteros :”);
scanf(“%d %d”,&a,&b);
if (a>b)
{
aux1=a;
aux2=b;
}
else
{
aux1=b;
aux2=a;
}
while (aux1!=aux2)
{
if (aux1>aux2)
aux1=aux1-aux2;
else
aux2=aux2-aux1;
}
mcd=aux1;
printf(“El máximo común divisor de %d y %d es %d”,a,b,mcd);
}

6. La serie de Fibonacci se define de la siguiente manera a n = an-1 + an-2. Con a0=0 y a1=1.
Elabore un programa que determine el término a x de la serie.

SOLUCIÓN:

El algoritmo es
INICIO
LEER x
SI x<2 ENTONCES
axx
IMPRIMIR ax
SINO
an-10
an1
i2
MIENTRAS ix HACER
ax  an-1+ an
an-1 an
an  ax
ii+1
FINMIENTRAS
IMPRIMIR ax
FINSI
FIN
El programa en C:
#include <stdio.h>
main()
{
int x; // Entrada
int ax; // Salida

int i;
printf(“Introduzca un entero positivo:”);
scanf(“%d”,&x);
if(x<2)
ax=x;
else
{
an_1=0;
an=1;
}
for(i=2;i<x+1;i++)
{
ax=an_1+an;
an_1=an;
an=ax;
}
printf(“El elemento %d de la serie es %d ”,x,ax);
}

También podría gustarte