Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Blazjker en 28 Febrero 2019, 23:42 pm



Título: Ayuda para pasar ESTE código hecho en JAVA A C++
Publicado por: Blazjker en 28 Febrero 2019, 23:42 pm
Buenas tardes a todos, el problema que tengo es que quiero pasar el siguiente código hecho en JAVA A C++, lo he intentado hacer,pero los resultados que me son dados DIFIEREN uno del otro.

A mi entender el de "JAVA" funciona bien, es decir, cumple con los requisitos. En cambio el de C++ no lo hace de forma completa.

Sin más preámbulos adjuntaré ambos códigos, para que si pueden, ayudarme a entender cuáles son los errores que he cometido en el "intento" de trasladar las líneas de código  a C++.


VERSIÓN JAVA

Código
  1. public class Ejerciciooo
  2. {
  3. public static void main(String[] args)
  4. {
  5. Scanner scan = new Scanner(System.in);
  6.  
  7. System.out.print("Enter the number of points: ");
  8. final int numOfPoints = scan.nextInt();
  9.  
  10. double[][] points = new double[numOfPoints][2];
  11. double shortestDistance=0;
  12. double distance=0;
  13. String closestPoint1="";
  14. String closestPoint2="";
  15.  
  16. //enter x,y coords into the ix2 table points[][]
  17. for (int i=0; i<numOfPoints; i++)
  18. {
  19. System.out.print("Enter point x" + i + ": ");
  20. points[i][0] = scan.nextDouble();
  21. System.out.print("Enter point y" + i + ": ");
  22. points[i][1] = scan.nextDouble();
  23. }
  24.  
  25. //get the distance between the point in the ith row and the (m+1)th row
  26. //and check if it's shorter than the distance between 0th and 1st
  27. for (int i=0; i<numOfPoints; i++)
  28. {
  29. //use m=i rather than 0 to avoid duplicate computations
  30. for (int m=i; m<numOfPoints-1;m++)
  31. {
  32. double dx = points[i][0] - points[m+1][0];
  33. double dy = points[i][1] - points[m+1][1];
  34. distance = Math.sqrt(dx*dx + dy*dy);
  35.  
  36. //set shortestDistance and closestPoints to the first iteration
  37. if (m == 0 && i == 0)
  38. {
  39. shortestDistance = distance;
  40. closestPoint1 = "(" + points[0][0] + "," + points[0][1] + ")";
  41. closestPoint2 = "(" + points[1][0] + "," + points[1][1] + ")";
  42. }
  43. //then check if any further iterations have shorter distances
  44. else if (distance < shortestDistance)
  45. {
  46. shortestDistance = distance;
  47. closestPoint1 = "(" + points[i][0] + "," + points[i][1] + ")";
  48. closestPoint2 = "(" + points[m+1][0] + "," + points[m+1][1] + ")";
  49. }
  50. }
  51. }
  52. System.out.println("The shortest distance is: " + shortestDistance);
  53. System.out.println("The closest points are " + closestPoint1 + " and " + closestPoint2);
  54. }  
  55. }


VERSIÓN C++

Código
  1. #include <conio.h>
  2. #include <math.h>
  3. #include <sstream>
  4. #include <string>
  5. using namespace std;
  6.  
  7. int main () {
  8.  
  9. int cantidad;
  10. cout<<"Digite la cantidad de puntos que desea: "; cin>>cantidad;
  11.  
  12. double puntos [cantidad][2];
  13. double dX = 0, dY = 0 , distancia = 0, distMasCorta = 0;
  14.  
  15. ostringstream osA,osB;
  16.  
  17. for (int i=0; i<cantidad; i++) {
  18. cout<<"Digite el valor correspondiente a X '"<<i+1<<"': "; cin>>puntos[i][0];
  19. cout<<"Digite el valor correspondiente a Y '"<<i+1<<"': "; cin>>puntos[i][1];
  20.  
  21. cout<<endl;
  22. }
  23.  
  24. for (int i=0; i<cantidad; i++) {
  25. for (int m=i; m<cantidad-1; m++) {
  26.  
  27. dX = puntos[i][0] - puntos[m+1][0];
  28. dY = puntos[i][1] - puntos[m+1][1];
  29.  
  30. distancia = sqrt (dX * dX + dY * dY);
  31.  
  32. if (distancia < distMasCorta) {
  33.  
  34. distMasCorta = distancia;
  35.  
  36. osA << "(" << puntos[i][0] << "," << puntos[i][1] << ")";
  37. osB << "(" << puntos[m+1][0] << "," << puntos[m+1][1] << ")";
  38. }
  39. }
  40. }
  41.  
  42. cout<<"La distancia mas corta es de '"<<distMasCorta<<"'"<<endl;
  43. cout<<"Los puntos más cercanos son: "<<osA.str()<<" y "<<osB.str()<<endl;
  44.  
  45. getch();
  46. return 0;
  47. }
  48.  
  49.  
  50.  
  51.  


Desde ya muchísimas gracias !


Título: Re: Ayuda para pasar ESTE código hecho en JAVA A C++
Publicado por: K-YreX en 1 Marzo 2019, 00:08 am
Si puedes especificar un poco más cuando dices que los resultados difieren o que no lo hace de forma completa... En principio estoy dando por supuesto que ambos compilan sin problemas. :-X


Título: Re: Ayuda para pasar ESTE código hecho en JAVA A C++
Publicado por: Blazjker en 1 Marzo 2019, 01:00 am
Si puedes especificar un poco más cuando dices que los resultados difieren o que no lo hace de forma completa... En principio estoy dando por supuesto que ambos compilan sin problemas. :-X


En el código de Java, ingreso por ejemplo las siguientes coordenadas.
 x y

(1,2)

(5,10)

(3,4)

Y me dice que los puntos más cercanas entre sí son (1,2) y (3,4)

En cambio, en el de C++ , directamente ni me los toma , ya que cuando se ejecuta el "cout" no me marca los puntos ni nada.


Título: Re: Ayuda para pasar ESTE código hecho en JAVA A C++
Publicado por: K-YreX en 1 Marzo 2019, 01:21 am
Vale, a ver, los errores son varios y te los voy dejando por aquí:
  • Antes de nada no está incluido <iostream> para poder hacer las entradas/salidas de pantalla <cin> y <cout>.
  • Si inicializas <distMasCorta = 0> y luego buscas dos puntos cuya distancia sea menor a eso, no creo que los encuentres nunca... :silbar:
  • Los dos bucles <for> anidados están al revés. El exterior es el que tiene que acabar antes y el interior el que tiene que llegar hasta el final.

Y ahora unos consejos que nunca están de más :-X:
  • No utilices <conio.h>. No es estándar por lo que algunos compiladores no lo admiten.
  • El <getch()> que usas de <conio.h> sustitúyelo por <cin.get()> que está en <iostream>.
  • Las librerías que acaban en ".h" (versión C) tienen su versión de C++ sin el ".h" y empezando por "c" <cmath>.
  • El bucle <for> interno en vez de inicializar <m = i> y después usar siempre <m+1>; inicialízalo en <m = i+1> y así sólo tendrás que usar <m> luego.


Título: Re: Ayuda para pasar ESTE código hecho en JAVA A C++
Publicado por: Blazjker en 1 Marzo 2019, 02:01 am
Siguiendo los pasos que mencionaste, el código funciona similar a Java, desde ya muchísimas gracias por haberme ayudado , hay alguna manera para recompensarte ,es decir, hay algún modo para colocar puntajes o algo parecido, en forma de agradecimiento ?


Título: Re: Ayuda para pasar ESTE código hecho en JAVA A C++
Publicado por: K-YreX en 1 Marzo 2019, 03:00 am
Siguiendo los pasos que mencionaste, el código funciona similar a Java, desde ya muchísimas gracias por haberme ayudado , hay alguna manera para recompensarte ,es decir, hay algún modo para colocar puntajes o algo parecido, en forma de agradecimiento ?
No, no hay ningún sistema de valoración. Pero para eso es el foro, para prestar ayuda voluntariamente. :-X