Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
cambia5
i1
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);
}
INICIO
i2
primotrue
MIENTRAS i<(num/2) HACER
SI num es divisible por i ENTONCES
primofalse
SALIR MIENTRAS
FINSI
ii+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
sum0
i1
MIENTRAS (i<X) HACER
ii+1
SI el resto de dividir i entre 2 es 0 ENTONCES
sumsum+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
aux1a
aux2b
SINO
aux1b
aux2a
FINSI
MIENTRAS aux1!=aux2 HACER
SI aux1>aux2 ENTONCES
aux1aux1-aux2
SINO
aux2aux2-aux1
FINSI
FINMIENTRAS
mcdaux1
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
axx
IMPRIMIR ax
SINO
an-10
an1
i2
MIENTRAS ix HACER
ax an-1+ an
an-1 an
an ax
ii+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);
}