Autor Tema: MCD (máximo común divisor por EUCLIDES) Recursividad Java  (Leído 64768 veces)

Mac

  • Intermedio
  • ***
  • Mensajes: 174
  • Java-Php
    • Ver Perfil
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 !  ;) ;)
-------------------------------------------------------------------------------
« Última modificación: 05 de Diciembre 2015, 20:23 por Alex Rodríguez »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 386
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #1 en: 18 de Agosto 2014, 09:59 »
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:

Código: [Seleccionar]

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);
   }
}

Mac

  • Intermedio
  • ***
  • Mensajes: 174
  • Java-Php
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #2 en: 18 de Agosto 2014, 17:16 »
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

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 386
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #3 en: 19 de Agosto 2014, 12:18 »
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.


Mac

  • Intermedio
  • ***
  • Mensajes: 174
  • Java-Php
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #4 en: 21 de Agosto 2014, 02:13 »
Hola  javi Quisiera que me lo calificaras jejej y me digas si esta bien ! Gracias de antemano ! Un saludo
-------------------------------------------------------------------------------------------------

Código: [Seleccionar]
<?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>";
?>

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 386
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #5 en: 21 de Agosto 2014, 12:53 »
Con el mismo código que Java vale:

Código: [Seleccionar]
<?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

Mac

  • Intermedio
  • ***
  • Mensajes: 174
  • Java-Php
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #6 en: 21 de Agosto 2014, 16:53 »
Ah perfecto entendido .. Es por el mensaje ! Perfecto Javi Gracias ! ...

 Quiera una ayuda mas estoy haciendo este pero como lo paso ah PHP ?¿

Código: [Seleccionar]

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

}

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 386
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #7 en: 21 de Agosto 2014, 20:13 »
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

Mac

  • Intermedio
  • ***
  • Mensajes: 174
  • Java-Php
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #8 en: 22 de Agosto 2014, 02:00 »
Aqui tengo estos pero no me realiza la operacion !!!  :o

Que puede estar pasando -->   :(

HTML
---------------------------------------------------------------------------------------------------------------
Código: [Seleccionar]
</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
----------------------------------------------------------------------------------------------------------------
Código: [Seleccionar]
<?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;
}

?>

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #9 en: 22 de Agosto 2014, 10:41 »
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:
Código: [Seleccionar]
$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...:

Código: [Seleccionar]
if ($b == 0) {


otra cosa que veo es el:
Código: [Seleccionar]
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!

 

Mac

  • Intermedio
  • ***
  • Mensajes: 174
  • Java-Php
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #10 en: 22 de Agosto 2014, 23:41 »
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
Código: [Seleccionar]
</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
----------------------------------------------------------------------------------------------------------
Código: [Seleccionar]
<?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.

 

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #11 en: 23 de Agosto 2014, 01:07 »
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!!

Mac

  • Intermedio
  • ***
  • Mensajes: 174
  • Java-Php
    • Ver Perfil
Re:MCD (EUCLIDES) Recursividad Java
« Respuesta #12 en: 23 de Agosto 2014, 02:35 »
Un saludo Dongo !!  :D :D Te envie un  MP
« Última modificación: 23 de Agosto 2014, 02:43 por Mac »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".