Foros aprenderaprogramar.com
Aprender a programar => De todo un poco... => Mensaje iniciado por: Mac en 17 de Agosto 2014, 19:48
-
Explicación de cómo se calcula el máximo común divisor en Java.
Ya sé quien es (EUCLIDES) .. Pero ¿cómo aplico MCD en Java en la temática de Recursividad?
Su vida es poco conocida, salvo que vivió en Alejandría (ciudad situada al norte de Egipto) durante el reinado de Ptolomeo I. Ciertos autores árabes afirman que Euclides era hijo de Naucrates y se barajan tres hipótesis:
Euclides fue un personaje matemático histórico que escribió Los elementos y otras obras atribuidas a él.
Euclides fue el líder de un equipo de matemáticos que trabajaba en Alejandría. Todos ellos contribuyeron a escribir las obras completas de Euclides, incluso firmando los libros con el nombre de Euclides después de su muerte.
Las obras completas de Euclides fueron escritas por un equipo de matemáticos de Alejandría quienes tomaron el nombre Euclides del personaje histórico Euclides de Megara, que había vivido unos cien años antes.
Proclo, el último de los grandes filósofos griegos, quien vivió alrededor del 450, escribió importantes comentarios sobre el libro I de los Elementos, dichos comentarios constituyen una valiosa fuente de información sobre la historia de la matemática griega. Así sabemos, por ejemplo, que Euclides reunió aportes de Eudoxo en relación a la teoría de la proporción y de Teeteto sobre los poliedros regulares.
En que consiste el algoritmo de Euclides.?¿ :o
Y como lo puedo aplicar en Java en el entorno de netbeans en la temática de Recursividad:o
De antemano Muchismas Gracias ! ;) ;)
-------------------------------------------------------------------------------
-
Hola, el algoritmo parte de dos números a y b y realiza la operación resto (%) entre ambos. Por ejemplo 8 y 12, si hacemos 8%12 cabe a cero y el resto es 8. Ahora vuelve a realizar la operación resto entre el segundo, 12, y el resto, 8, es decir 12%8 y resulta 4. Ahora hace 4%8 y cabe a cero con resto 4. Ahora hace 4%4 y cabe a 1 con resto 0. Ahora tocaría 4%0 pero como b==0 ya no hace la operación, sino que devuelve el primero de estos dos números, es decir, 4. Este es el máximo común divisor entre los dos números originales.
Por ejemplo:
¿Cuál es el mcd de 4 y 12? Es 4
¿Cuál es el mcd de 8 y 12? Es 4
¿Cuál es el mcd de 4 y 17? Es 1
¿Cuál es el mcd de 96 y 36? Es 12
Y el código:
public class testRecursivoMCD
{
public static void main (String[] Args) {
System.out.println("¿Cuál es el mcd de 4 y 12? Es "+obtener_mcd(4,12));
System.out.println("¿Cuál es el mcd de 8 y 12? Es "+obtener_mcd(8,12));
System.out.println("¿Cuál es el mcd de 4 y 17? Es "+obtener_mcd(4,17));
System.out.println("¿Cuál es el mcd de 96 y 36? Es "+obtener_mcd(96,36));
}
static int obtener_mcd(int a, int b) {
if(b==0)
return a;
else
return obtener_mcd(b, a % b);
}
}
-
Hola javi Gracias De Antemano !! Excelente ahora lo practicare ..
Solo una pregunta mas! .. Sabes como pasar este mismo código a Php ! :o
Saludos Javi
-
Hola pues bastante similar, lo único que al ser programación php tendrás que tener una url con el formulario donde pidas el dato para calcular el mcd y otra url donde recibas el dato del formulario y hagas el cálculo del mcd. Si tienes problemas pega el código para ver dónde falla. Saludos.
-
Hola javi Quisiera que me lo calificaras jejej y me digas si esta bien ! Gracias de antemano ! Un saludo
-------------------------------------------------------------------------------------------------
<?php
function mcd($a, $b) {
$a = abs($a);
$b = abs($b);
if ($b == 0)
$resultado = $a;
else
$resultado = mcd($b, $a%$b);
echo " vale $a % $b es: $resultado<br>";
return $resultado;
}
$resultado = mcd(50,34);
echo "el mcd de 50 el mcd es: $resultado<br>";
?>
-
Con el mismo código que Java vale:
<?php
function obtener_mcd($a, $b) {
if($b==0)
return $a;
else
return obtener_mcd($b, $a%$b);
}
echo("Cual es el mcd de 4 y 12? Es ".obtener_mcd(4,12));
echo("<br/>Cual es el mcd de 8 y 12? Es ".obtener_mcd(8,12));
echo("<br/>Cual es el mcd de 4 y 17? Es ".obtener_mcd(4,17));
echo("<br/>Cual es el mcd de 96 y 36? Es ".obtener_mcd(96,36));
?>
El resultado es el mismo,
¿Cuál es el mcd de 4 y 12? Es 4
¿Cuál es el mcd de 8 y 12? Es 4
¿Cuál es el mcd de 4 y 17? Es 1
¿Cuál es el mcd de 96 y 36? Es 12
Aquí has escrito esto mal: echo "el mcd de 50 el mcd es: $resultado<br>";, el mcd se calcula para dos números, no tiene sentido que escribas el mcd de 50 sólo, tendrías que decir el mcd de 50 y 34 es tanto.
Saludos
-
Ah perfecto entendido .. Es por el mensaje ! Perfecto Javi Gracias ! ...
Quiera una ayuda mas estoy haciendo este pero como lo paso ah PHP ?¿
package potencia;
import javax.swing.*;
public class Potencia {
public static void main(String[] args) {
// TODO code application logic here
int n, m;
n = Integer.parseInt(JOptionPane.showInputDialog(" -- Señor Usuario Digite El Numero Base -- "));
m = Integer.parseInt(JOptionPane.showInputDialog(" -- Señor Usuario Digite El Numero a Elevar -- "));
JOptionPane.showMessageDialog(null, " El Factorial Es " + funcionp(n, m));
}
public static int funcionp(int m, int n) {
if (n == 0) {
return 1;
} else {
return m * funcionp(m, n - 1);
}
} //Cierre del método
}
-
En php haz la petición de datos usando un formulario, una vez tengas los datos con el formulario los procesas cuando se pulse el botón enviar ;D
-
Aqui tengo estos pero no me realiza la operacion !!! :o
Que puede estar pasando --> :(
HTML
---------------------------------------------------------------------------------------------------------------
</head>
<body>
<form name="potencial1"method="GET"action="potencia1.php">
<p> Potencia </p>
<br/>
Introduzca la base : <input type="text"name="b">
<br/> <br/>
Introduzca nuemero a elevar: <input type="text"name="e">
<br/> <br/>
<input value="Calcular" type="submit" />
</form>
</body>
</html>
PHP
----------------------------------------------------------------------------------------------------------------
<?php
$b = $_GET['b'];
$e = $_GET['e'];
function potencial($b, $e) {
if ($b == 0) {
return 1;
} else {
return $p= $b * potencial($b, $e - 1);
}
echo" potencia es ".$p;
}
?>
-
Buenos días, bueno te comento.
Como primer punto, en el html, no dejas espacios entre atributos, te recomiendo que por claridad dejes espacios.
segunda cosa, recoges los datos del formulario, pero después no invocas a la función. La función no se invocará sola por el echo de escribirla...XDD debes hacer una llamada a ella:
$base=$_GET['b'];
$exp=$_GET['e'];
$p =potencial($base,$exp);//llamada a la función
echo $p;
function potencial($b, $e) { //declaracion de la funcion
...
}
Otro fallo es este if, no es $b la que llegará a 0, es $e...:
if ($b == 0) {
otra cosa que veo es el:
echo" potencia es ".$p;
Eso no tiene sentido dentro de la función, mas que nada porque eso nunca llegará a ejecutarse, ya que los return hacen que la ejecución de la función se detenga...
Intenta arreglar estas cosas a ver que tal. Otra recomendación es que uses nombres mas descriptivos para las variables.
Bueno y ahora al margen de todo esto, tengo una curiosidad... ¿Que estas estudiando todos los lenguajes de programación a la vez?
Me resulta curioso que cuando has conseguido realizar un ejercicio por ejemplo en java, quieres traducirlo a php, y por eso esta pregunta, jeje.
Bueno un saludo!
-
Hola muchísimas Gracias Por Tu Ayuda ;D ;D excelente aclaración y explicación ! .. pegare el código para que lo mires y me digas si esta correcto, me funciona perfectamente.
Si estoy estudiando por mi propia cuenta los lenguajes, me gusta mucho esto !. y quiero aprender Java como Php :D :D
Colocare el codigo y esta duda que tengo y no entiendo por que sale ?¿ si funciona bien el código :o :o
---------------------------------------------------------------------------------------------------
HTML
</head>
<body>
<form name="potenciahtml" method="GET" action="potenciaPhp.php">
<p> Potencia </p>
<br/>
Introduzca la base : <input type="text" name="b">
<br/> <br/>
Introduzca nuemero a elevar: <input type="text" name="e">
<br/> <br/>
<input value="Calcular" type="submit" />
</form>
</body>
</html>
PHP
----------------------------------------------------------------------------------------------------------
<?php
$base = $_GET['b']; //
$exp = $_GET['e'];
$p = potenciaPhp($base, $exp);
echo $p;
function potenciaPhp($b, $e) {
if ($e == 0) {
return 1;
} else {
return $p = $b * potenciaPhp($b, $e - 1);
}
}
?>
Anexo Captura de pantalla signo de Advertencia en el código.
-
Estupendo!! lo del error, es simplemente un warning, supongo que usas netbeans... Bueno netbeans es que es muy listo y sabe que hay mejores formas de obtener los datos de un formulario y te avisa que lo podrías hacer de esa otra manera.
Para la funcionalidad que tiene tu formulario no te es necesario andar filtrando datos y demás, eso es ya para formularios que requieran una seguridad extra y demás... supongo que en su momento ya llegarás a eso...
Un saludo!!
-
Un saludo Dongo !! :D :D Te envie un MP