Documentos de Académico
Documentos de Profesional
Documentos de Cultura
- Diseña algoritmo del programa que determine el MCD de dos números enteros por el
algoritmo de Euclides: consiste en realizar divisiones sucesivas; en la primera división, se
toma como dividendo el mayor de los números y como divisor el otro; luego, el divisor y el
resto sirven respectivamente de dividendo y divisor de la siguiente división. El proceso termina
cuando se obtiene un resto nulo. Elm cd es entonces el penúltimo resto del algoritmo.
inicio
leer A, B
si (A>B) entonces
dividendo = A
divisor = B
si_no
dividendo = B
divisor = A
fin_si
resto = dividendo%divisor
mientras (resto<>0) hacer
dividendo = divisor
divisor = resto
resto = dividendo%divisor
fin_mientras
visualizar divisor
fin
10.- Diseñar el algoritmo del programa que determina si una palabra introducida por teclado es
palíndromo o no. Un palíndromo es una palabra que se lee igual en ambos sentidos, como por
ejemploradar
Con esta regla se puede sacar un algoritmo muy sencillo para esto (los guiones bajos
son para hacer sangría nomás, es que no me pone los espacios al principio de la
linea):
Código:
inicio
leer n
si (n % 2 <> 0) entonces
_si (n % 3 <> 0) entonces
__si (n % 5 <> 0) entonces
___escribir "'n' es número primo"
__fin si
_fin si
fin si
escribir "'n' no es número primo".
fin
y de hecho podrías ponerlo en una sola sentencia if en caso de que solamente quieras
determinar si es primo o no. Por ejemplo en C/C++:
Código:
Begin
a -> int
b -> int
c -> int
temporal -> int
vec [3] -> int
Print "Por favor digite el primer número"
read a
vec [0] = a
Print "Por favor digite el segundo número"
read b
vec [1] = b
Print "Por favor digite el tercer número"
read c
vec [2] = c
if ( a = b ^ b = c) do
Print "Los tres números ingresados son iguales"
else
if ( vec [0] < vec [1]) do
temporal = vec [1]
vec [0] = vec [1]
vec [1] = temporal
else
if ( vec [1] < vec [2]) do
temporal = vec [1]
vec [1] = vec [2]
vec [2] = temporal
end if
Print "El valor más grande es:" + Vec[0] + "Y el menor valor es:" + Vec [2]
End
1. Primero pide al usuario los números y los almacena en una variable ya sea a,
b o c y a su vez los envia a un vector para luego ordenarlos y verificar cual es
el mayor y cual el menor.
2. Luego analiza si el primer número del vector es mayor al segundo, de ser asi
simplemente asigna el segundo a una variable temporal e invierte los números
enviando el de la segunda casilla a la primera y el de la primera que ahora está
en una variable a la segunda
4. Luego de esto tendras en las 3 casillas del vector los 3 números ordenados
de mayor a menor lo unico que falta es decirle que le imprima al usuario el
primer número que es el mayor y el ultimo que seria el menor
PD: Para analizar si son iguales solo se usa una regla matematica que dice que
si a = b y b = c entonces a = c
Else =además
Print=Impresión
int cociente=numero;
int resto;
String inverso=”";
int contador=0;
int div = 1;
for(contador=0;cociente!=0;contador++){
//Formula
inverso += String.valueOf(resto);
//Restamos el cociente
cociente=cociente/10;
System.out.println(“Inverso: ” + inverso);
esto el lo mejor
//Declaracion
int u,d,c,num,numInv,aux;
//Ingreso
num=321;
//Proceso
aux=num;
c= num/100;//4
num=num%100;
d=num/10;
u=num%10;
numInv=u*100+d*10+c;
//Salida
1. // Vector donde estan almacenados los numeros de los que se hallara su MCD
2. Entero[] vector
3. // Obtenemos el menor elemento del vector, el cual sera el maximo valor
por el que dividiremos cada elemento del vector.
4. Entero menor = MenorElemento( vector )
5. // Menor de todos los exponentes del factor primo actual
6. Entero menorExponente = 0
7. // Valor que almacena el MCD divisor de los numeros
8. Entero MCD = 1
9. // Indica si el factor primo actual es un divisor comun de todos los
numeros
10. Booleano esDivisorComun
11.
12. // "i", indica el factor que verificaremos si es factor comun ( divisor ) a
todos los numeros
13. Para i desde 2 hasta i*i <= menor hacer
14.
15. esDivisorComun = verdad
16. j = 1
17. menorExponente = 0
18.
19. Mientras( esDivisorComun )
20. Si( j = n + 1 ) // Si el divisor "i", es comun a todos
entonces el menorExponente aumenta 1
21. menorExponente = menorExponente + 1
22. j = 1
23.
24. // Como el i es divisor comun, pasamos a dividir todos los
numeros entre i,
25. // esto tambien afecta a "menor"
26. Para h de 1 hasta n hacer
27. vector[ h ] = vector[ h ] / i
28. FinPara
29.
30. menor = menor / i
31. FinSi
32.
33. Si( vector[ i ] mod i != 0 ) // Si el divisor actual no es
comun a todos, pasamos al siguiente divisor
34. esDivisorComun = falso
35.
36. Fin_Mientras
37.
38. // Actualizamos el MCD
39. MCD = MCD * Potencia( i, menorExponente )
40.
41. Fin_Para
42. Entero MCD = 1;
43.
44. // MaximoComunDivisor( a, b ) es el algoritmo de euclides usado para
45. // hallar el Maximo Comun Divisor de dos enteros positivos.
46. Para i de 2 hasta n hacer
47. MCD = MaximoComunDivisor( MCD, x[i] )
48.
49. Retornar MCD
50. Descripción
51. Sean n1 y n2 los números para calcularles el mcd
52. Mediante la sentencia Input se pide al usuario que los introduzca en la
Classpad
53. Establecemos un bucle que se va a repetir mientras n1≠n2 con While n1≠n2
54. Si n1>n2 entonces introducimos en n1 la diferencia n1-n2
55. y al contrario si n2>n1
56. El bucle termina cuando n1=n2
57. Al final con la orden PrintNatural sacamos en pantalla el resultado que será n1
(o bien n2)
58. Justificación matemática
59. Llamemos mcd al máximo común divisor de n1 y n2
60. n1= mcd . p (1)
61. n2= mcd . q (2)
62. Es decir n1 Ξ n2 (mod. mcd)
63. Se lee n1 y n2 son congruentes módulo mcd y significa que
64. dan el mismo resto al dividirlos por mcd, en este caso 0.
65. ----
66. Hacemos (1) - (2)
67. n1 - n2= mcd (p-q)
68. Con lo cual la diferencia de n1 con n2 será también un múltiplo de mcd.
69. Ahora nos quedamos con esta diferencia y con el menor de los dos números
iniciales n1 y n2
70. (asignamos de nuevo esa diferencia al mayor de n1 y n2)
71. Así vamos obteniendo dos números n1 y n2 que son múltiplos de mcd.
72. Continuamos el proceso hasta que ambos números sean iguales
73. que será el caso en que ambos sean igual al mcd multiplicado por 1,
74. con lo cual cualquiera de ellos es igual al mcd de ambos.
75. (es lógico, puesto que el mcd de un nº es él mismo)
76.
77. Si queremos hallar el mcd de varios números, por ejemplo n1,n2 y n3
78. hacemos primero el mcd de n1 y n2
79. y luego el de n3 con el resultado anterior.
80.Programa para calcular el mínimo común múltiplo de dos números.
81. (es una modificación del anterior en el que se aplica la relación
82. entre el mcd y el mcm con el producto de dos números)
83. Sean a y b dos números,
84. su mcm (a,b) = a . b / mcd (a,b)
85.
86. aún no lo has hecho, te recomiendo que repases la parte que he dedicado a
Fibonacci
87. y el nº de oro. La puedes encontrar aquí:
88. Fibonacci y el nº de oro
89. Allí propongo una función llamada fibo(n) para calcular cualquier nº de la
sucesión
90. de Fibonacci mediante una fórmula ideada por el matemático francés Binet y en
la
91. que interviene el nº de oro.
92. Aquí voy a afinar un poco la función fibo(n) que tenía algunos pequeños fallos
93. como no dar bien el resultado para fibo(1).
94. Para no tener que eliminar la función fibo(n) que tenemos almacenada
95. en la Classpad, he denominado a la nueva función pisa(n) en honor
96. de la ciudad natal de Leonardo de Pisa "Fibonacci".
97.
98. Recuerda que para que se quede almacenada y la puedas utilizar
99. mediante la pestaña Cat de la Classpad, tienes que anteponer library\
100. al nombre de la función cuando la definas:
101.
102. Utilizando la nueva función y la notación sigma (para realizar
sumatorios)
103. podemos comprobar una de las numerosísimas propiedades de la
sucesión
104. de Fibonacci:
105. "La suma de los n primeros elementos de la sucesión más la
unidad es
106. igual al elemento de lugar n+2"
107.
INICIO
sino
(n2) > (n1) y (n3)
imprimir "el numero mayor es:" (n2)
sino
imprimir "el numero mayor es:" (n3)
fin si
FIN
Proceso Mayor
Escribir 'Ingrese el primer numero: ';
Leer Numero1;
Escribir 'Ingrese el segundo numero: ';
Leer Numero2;
Escribir 'Ingrese el tercer numero: ';
Leer Numero3;
Si (Numero1>Numero2) Entonces
Si (Numero1>Numero3) Entonces
mayor<-Numero1;
Si (Numero2>Numero3) Entonces
menor<-Numero3;
Sino menor<-Numero2;
FinSi
Sino mayor<-Numero3;
menor<-numero2;
FinSi
Sino Si (Numero2>Numero3) Entonces
mayor<-Numero2;
Si (Numero3>Numero1) Entonces
menor<-Numero1;
Sino menor<-Numero3;
Finsi
Sino mayor<-Numero3;
menor<-Numero1;
FinSi
Finsi
Escribir 'Mayor: ',mayor;
Escribir 'Menor: ',menor;
FinProceso
• inicio
leer a,b,c
si(a>b)y(a>c)entonces
max=a
si(b>a)y(b>c)entonces
max=b
si(c>a)y(c>b)entonces
max=c
imprimir "El número mayor es: max"
fin si
en caso contrario
imprimir "Los numeros son iguales"
fin
el menor de
tres números
La serie de fibonacci
#include <iostream>
La definición recursiva para encontrar todos los primeros números de la serie Fibonacci
es:
En el siguiente código, la solución que propone la recursividad resulta en una programación
elegante, aunque costosa. El código que hace esto es:
( 1) #include <iostream>
( 2) //====================
( 3) int fib(int val){
( 4) if ((val==1)||(val==2))
( 5) return 1;
( 6) else
( 7) return (fib(val-1)+fib(val-2));
( 8) }
( 9) //====================
(10) int main (int argc, char * const argv[]) {
(11) int n;
(12) std::cout<<"Numero entero:"; std::cin>>n;
(13) std::cout<<"\nEl "<< n
(14) <<"-esimo numero fibonacci es: "<< fib(n);
(15) return 0;
(16) }
import javax.swing.JOptionPane;
public class Aplicacion
{
public static void main(String[] args)
{
int numero =
Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese el número
a transformar"));
int base =
Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese la base"));
Base bases = new Base(numero,base);
bases.transformar();
JOptionPane.showMessageDialog(null,"El número "+numero+" en base
"+base+"
es:\n"+bases.getResultado());
}
}
class Base
{
String equivalente;
int posicion;
int numero;
int base;
int[] digitos;
int[] auxiliar;
= Orden de complejidad =
= Pruebas =
{| {{tablabonita}}
|+ '''Ejemplos'''
|-
! Numero!! Base!!Resultado
|-
|10||2||1010
|-
|10||8||12
|-
|16||16||10
|-
|15455456||2||111010111101010011100000
|-
|-
|1089978205||16||40F7BF5D
|-
|35655||9||53816
|-
|-
|554455||2||10000111010111010111
|-
|}
= Conclusiones =
Otro ejemplo:
#include "iostream"
#include "conio.h"
cout<<endl;
system("PAUSE");
return 0;
Otro ejemplo:
import javax.swing.JOptionPane;
sabemos representar a un número en base 10 cuando está en cualquier otra base, ahora
veremos el paso contrario; esto es, si está en base 10 convertirlo a una base b.
Si observamos las actividades que realizan los niños en primaria para comprender el
sistema decimal, podemos ver que una de ellas es separar en decenas una cantidad de
objetos.
Para convertir a cualquier base es exactamento lo que vamos a hacer pero reparando o
dividiendo entre b que es la base.
Esto es: {$ \large 1 \times 5^2 + 4 \times 5^1 + 2 \times 5^0 $} por lo que la
representación en base 5 es 1425
Podemos construir una tabla empezando con el número que queremos convertir en la parte
superior izquierda, dividimos entre la base b y colocamos el cociente abajo y el residuos a
la derecha, aplicamos sucesivamente este procedimiento hasta que el cociente es 0.
47 2
9 4
1 1
0
4325 5
270 E
16 0
1 1
0
Por lo tanto 4325= 10E5 16
\\Analizaremos en general como convertir de una base b arbitraria a base 10 y viseversa. asi
por ejemplo:
450267= 4*744+5*73+0*72+6*70=4*2401+5*343+0*49+2*7+6=11339
Asi es para convertir de una base b a base 10 basta con aplicar la definicion.
Para convertir de base 10 a una base b solamente debemos de aplica el proceso contrario, es
decir dividir.