JavaScript - Pasar un codigo de C++ a JavaScript

 
Vista:
Imágen de perfil de José

Pasar un codigo de C++ a JavaScript

Publicado por José (6 intervenciones) el 30/06/2022 03:31:50


Hola amigos.

Actualmente estoy trabajando en un proyecto de Metodo de transporte que se llama Costo Minimo.https://www.ingenieriaindustrialonline.com/investigacion-de-operaciones/metodo-del-costo-minimo/.

En resumen ya tengo el algoritmo que resuelve este tipo de problemas, pero es solo por consola en C++. Me propuse como tarea añadirle una interfaz, y para eso escoji como opcion JavaScript (El cual no domino nada) y Html.

Ya alguien me ayudo recietemente con una consulta con respecto a la interfaz la cual ya la terminé. Ahora lo que necesito es pasar mi algoritmo de C++ a JavaScript, pero se me ha hecho dificil. Para ser esactos el problema que tengo en con las matrices. Desde mi punto de vista son muy diferentes en JavaScript.

No es que quiero que alguien haga todo el trabajo por mi, solo quiero poder pasar al menos la primera parte para así entender como funciona.

Espero alguien me pueda ayudar.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
using namespace std;
 
int main()
{
 
  int costos[20][20],
      i, j,
      min, origenes, rutas, origenes2, rutas2, c2, c1, p, q;
  int demanda[20], oferta[20], rf[20], cf[20], sum = 0, sum2 = 0, sum3 = 0, sum4 = 0;
 
  // Peddimos las rutas y destinos
  cout << "\n Ingrese el numero de origenes: ";
  cin >> origenes;
  cout << "\n Ingrese el numero de rutas: ";
  cin >> rutas;
 
  // Pedimos los costso
  cout << "\n Costos: \n";
  for (i = 0; i < origenes; i++)
  {
    for (j = 0; j < rutas; j++)
    {
      cout << " Ingrese los costos en la poscicion [ " << (i + 1) << "," << (j + 1) << " ]  :";
      cin >> costos[i][j];
    }
  }
 
  // Pedimos las demandas
  cout << "\n  Ingrese las demandas: \n";
  for (i = 0; i < rutas; i++)
  {
    cout << " Demanda : [ " << (i + 1) << " ]:  ";
    cin >> demanda[i];
  }
 
  // Pedimos las ofertas
  cout << "\n Ingrese las Ofertas: \n";
  for (i = 0; i < origenes; i++)
  { //
    cout << " Oferta : [ " << (i + 1) << " ]:  ";
    cin >> oferta[i];
  }
 
  // Imprimimos la matriz para ver que pedo
  cout << "\n Matriz:\n";
  for (i = 0; i < origenes; i++)
  {
    cout << "\n";
    for (j = 0; j < rutas; j++)
    {
      cout << " | " << costos[i][j];
    }
 
    cout << "  " << oferta[i];
  }
  cout << "\n\n";
  for (j = 0; j < rutas; j++)
  {
 
    cout << "  " << demanda[j];
  }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

Pasar un codigo de C++ a JavaScript

Publicado por Ivan (118 intervenciones) el 30/06/2022 20:03:44
Hola,

te pongo un ejemplo de cómo crear una matriz (Array) de dos dimensiones en JavaScript, introducir valores y mostrarlos.
JavasCript es muy flexible y versátil, hay más formas de hacerlo pero esta es la que más se parece a tu código.

Busa en MDN sobre las funciones que no conozcas, no se si prompt es buena solución, pero una vez más, es lo que más se parece a tu código.

Espero que te sea útil.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <script>
    function calcular() {
      // Declara un Array 1 dimensión
      var matrix = [];
 
      // Declara un segundo Array a cada posición (2 dimensiones)
      for (var i=0; i<5; i++ ) matrix[i] = [];
 
      // Recorremos el array e introducimos valores
      for (var i=0; i<5; i++) {
        for (var j=0; j<5; j++) {
          matrix[i][j] = prompt("Ingrese los costos en la posición ["+(i + 1)+","+(j + 1)+"]: ");
        }
      }
 
      // Recorremos el array y mostramos contenidos
      var texto = "";
      for (var i=0; i<5; i++) {
        for (var j=0; j<5; j++) {
          texto += "Datos en la posición ["+(i + 1)+","+(j + 1)+"] : "+(matrix[i][j])+"<br>";
        }
      }
      document.getElementById("resultado").innerHTML = texto;
    }
  </script>
</head>
 
<body>
  <h1>Recorrer array 2 dimensiones</h1>
  <p>Ejemplo de cómo recorrer array 2 dimensiones</p>
  <button onclick="calcular()">Empezar</button>
  <p id="resultado"></p>
</body>
</html>

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de José

Pasar un codigo de C++ a JavaScript

Publicado por José (6 intervenciones) el 01/07/2022 21:34:40
[title]
Hola Ivan, muchas gracias.

Ha sido de gran ayuda tu comentario, lo aprecio mucho.

Te comento que ya lo termine y funciona bien hasta cierto punto. Tengo un bug que te explico ahorita.

He probado la pagina con los 2 ejercicios siguientes.

Una tabla 4*4.

Costosto: 5, 2, 7 3, 3, 6, 6, 1, 6, 1, 2, 4, 4, 3, 6, 6.
Demanda: 70, 40, 70, 35.
Oferta: 80, 30, 60, 45.

Este primer ejercicio deberia darme un resultado de 780. El cual la pagina me da perfectamente.

Una tabla 3*4.

Costos: 10, 0, 20, 11, 12, 7, 9, 20, 0, 14, 16, 18.
Demanda: 5, 15, 15, 10.
Oferta: 15, 25, 5.

Este segundo ejercicio deberia darme un resultado de 335. El cual la pagina me da perfectamente.

El problema que tengo es con el siguiente ejercicio.

Tabla 4*4

Costos: 5, 3, 6, 4, 2, 6, 1, 3, 7, 6, 2, 6, 3, 1, 4, 6.
Demanda: 45, 35, 105, 65.
Oferta: 50, 75, 45, 80.

Este ejercicio deberia darme un resultado de 595. El cual la pagina no me da eso, me da un resultado de 715.

Tengo que aclarar que al algoritmo funciona perfectamente, lo he probado ciento de veces.

Me puse a probar pasando los datos directamente (No por son sola) si no, agregando los arreglos con los datos. Y extrañamente me dio el resultado esperado de 595 lo cual prueba que el algoritmo funciona.

Despues prove nuevamente, pero esta esta vez pasando los costos por el formulario y las ofertas y demandas directamente. Como me lo esperaba me dio el resultado esperado de 595. Puedo asegurar que los datos los obtengo perfectamente.

Despues de muchas pruebas llegue a la conclucion que el problemas es con las demandas y ofertas. Como veras, las demandas y las foertas de los 2 ejercicios anteriores tiene un patron y es que no superan los 100, al contrario de el ultimo ejercicio con el que tengo problemas, hay una demanda de 105. No se si hay algun tipo de problema de trabajar con esas ciifras en los formularios.

O seguramente tengo algo mal. Ya se que es mucho texto, pero me hurge solucionar eso. Te agradeceria cualquier tipo de ayuda.

Te adjunto el codigo. Y sí, ya se el que codigo en sucio, pero es solo en boceto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<div class="content">
 
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Costo mínimo</title>
    </head>
 
    <body>
        <link rel="stylesheet" href="css/styles.css">
 
        <h2>Indique El Numero De Origines Y De Rutas</h2>
 
        <form>
            <label for="origenes">Numero De Origenes:</label><br>
            <input type="number" id="origenes" name="origenes"><br><br>
            <label for="rutas">Numero De Rutas:</label><br>
            <input type="number" id="rutas" name="rutas"><br><br>
            <button type="button" onclick="crearTabla()">Crear</button>
        </form>
 
        <script>
            function crearTabla() {
 
                // Creamos las dos variables globales para poder acceder a ellas en cualquier parte del codigo
                window.origenes = document.getElementById("origenes").value;
                window.rutas = document.getElementById("rutas").value;
 
                document.write("<style> input[type=number], select { width: 10%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; } button[type=button] { width: 10%; background-color: #4CAF50; color: white; padding: 14px 20px; margin: 8px 0; border: none; border-radius: 4px; cursor: pointer; } button[type=button]:hover { background-color: #45a049; } </style>");
 
                // Creamos la tabla para que ingresen los costos
                document.write("Ingrese Los Costos");
                document.write("<br>");
 
                var number1 = 0;
                for (var a = 0; a < origenes; a++) {
                    for (var b = 0; b < rutas; b++) {
                        number1 = number1 + 1;
                        document.write("<input type='number' id='costo" + number1 + "' />    ");
                    }
                    document.write("<br>");
                }
                number1 = 0;
 
                // Creamos la tabla para que ingresen las demandas
                document.write("<br>");
                document.write("Ingrese Las Demandas");
                document.write("<br>");
                for (var a = 0; a < rutas; a++) {
                    number1 = number1 + 1;
                    document.write("<input type='number' id='demanda" + number1 + "' />    ");
 
                }
                document.write("<br>");
                document.write("<br>");
                number1 = 0;
                // Creamos la tabla para que ingresen las ofertas
                document.write("Ingrese Las Ofertas");
                document.write("<br>");
                for (var b = 0; b < origenes; b++) {
                    number1 = number1 + 1;
                    document.write("<input type='number' id='oferta" + number1 + "' />    ");
 
                }
                document.write("<br>");
                document.write("<br>");
 
                document.write("<button type='button' onclick=precentarResultado()>Enviar Datos</button>");
            }
 
 
            function precentarResultado() {
                var number2 = 0;
                var number3 = 0;
 
                // Accedemos a las variables globales
                var origenes = window.origenes;
                var rutas = window.rutas;
 
                // Declaramos todas las variables a usar
                var costos = [];
                var costosdetabla = [];
                var demanda = [];
                var oferta = [];
                var rf = [];
                var cf = [];
                var sum = 0;
                var c2 = 0;
                var c1 = 0;
                var p = 0;
                var q = 0;
                var i = 0;
                var j = 0;
 
                var demanda2 = [];
                var oferta2 = [];
 
 
                for (var i = 0; i < origenes * rutas; i++) costos[i] = [];
                // Recorremos el array e introducimos valores
                for (i = 0; i < origenes; i++) {
                    for (j = 0; j < rutas; j++) {
                        number2 = number2 + 1;
                        costos[i][j] = document.getElementById("costo" + number2).value;
                    }
                }
 
                // demanda = [45, 35, 105, 65];
                // oferta = [50, 75, 45, 80]
               var number3 = 0;
                // Accedemos a las ofertas ingresadas anteriormente
                for (i = 0; i < origenes; i++) {
                    number3 = number3 + 1;
                    oferta2[i] = document.getElementById("oferta" + number3).value;
 
                }
                // Accedemos a las ofertas ingresadas anteriormente
                for (i = 0; i < origenes; i++) {
                    number3 = number3 + 1;
                    oferta[i] = oferta2[i];
 
                }
 
               var number4 = 0;
                // Accedemos a las demandas ingresadas anteriormente
                for (i = 0; i < rutas; i++) {
                    number4 = number4 + 1;
                    demanda2[i] = document.getElementById("demanda" + number4).value;
 
                }
                // Accedemos a las demandas ingresadas anteriormente
                for (i = 0; i < rutas; i++) {
                    number4 = number4 + 1;
                    demanda[i] = demanda2[i];
 
                }
 
 
                // Inicialozamos en 0 estos arreglos
                for (i = 0; i < origenes; i++) {
 
                    rf[i] = 0;
                }
 
                for (i = 0; i < rutas; i++) {
 
                    cf[i] = 0;
                }
 
                var origenes2 = origenes;
                var rutas2 = rutas;
 
                while (origenes2 > 0 && rutas2 > 0) {
 
                    min = 1000;
 
                    for (i = 0; i < origenes; i++) {
 
                        if (rf[i] != 1) {
 
                            for (j = 0; j < rutas; j++) {
 
                                if (cf[j] != 1) {
 
                                    if (min > costos[i][j]) {
 
                                        min = costos[i][j];
                                        p = i;
                                        q = j;
                                    }
                                }
                            }
                        }
                    }
 
                    if (oferta[p] < demanda[q]) {
 
                        c1 = oferta[p];
                    }
                    else {
 
                        c1 = demanda[q];
                    }
 
                    for (i = 0; i < origenes; i++) {
 
                        if (rf[i] != 1) {
 
                            for (j = 0; j < rutas; j++) {
 
                                if (cf[j] != 1) {
 
                                    if (min == costos[i][j]) {
 
                                        if (oferta[i] < demanda[j]) {
 
                                            c2 = oferta[i];
                                        }
                                        else {
 
                                            c2 = demanda[j];
                                        }
 
                                        if (c2 > c1) {
 
                                            c1 = c2;
                                            p = i;
                                            q = j;
                                        }
                                    }
                                }
                            }
                        }
                    }
 
                    // cout<<"\n  %d %d %d ",min,p,q);
                    if (oferta[p] < demanda[q]) {
 
                        sum += costos[p][q] * oferta[p];
                        demanda[q] -= oferta[p];
                        rf[p] = 1;
                        origenes2--;
                    }
                    else if (oferta[p] > demanda[q]) {
 
                        sum = sum + costos[p][q] * demanda[q];
                        oferta[p] -= demanda[q];
                        cf[q] = 1;
                        rutas2--;
                    }
                    else if (oferta[p] == demanda[q]) {
 
                        sum = sum + costos[p][q] * oferta[p];
                        rf[p] = 1;
                        cf[q] = 1;
 
                        origenes2--;
                        rutas2--;
                    }
 
                    // cout<<"\n %d",sum);
                }
 
 
                document.write("<br>");
                document.write("<br>");
                document.write("El costo Minimo es: " + sum);
                console.log(sum);
 
            }
 
 
 
 
 
 
        </script>
 
    </body>
</div>
 
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de José

Pasar un codigo de C++ a JavaScript

Publicado por José (6 intervenciones) el 02/07/2022 03:38:25


Hola, Ivan.

No se si ya leiste el mensaje.

Relei el mensage anterior tuyo y me fui a este Link https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt.

Basicamente solo tenia que aplicar el parseInt() a los valores provenientes del formulario. Ya habia visto meme sobre cuando intentabas sumar valores de un formulario en JavaScript. Si no lo parseas basicamente, solo te concatena los valores.

Fuiste de gran ayuda, gracias.

Si ves el codigo anterior, aceptaria cualquiere tipo de sugerencia de sobre como optimizarlo.

Saludos.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Pasar un codigo de C++ a JavaScript

Publicado por Ivan (118 intervenciones) el 02/07/2022 10:27:45
Hola José,

me alegro que hayas conseguido que funcione ;)

Entender todo el código y optimizarlo es complicado, sólo puedo decirte que en la línea 103

1
for (var i = 0; i < origenes * rutas; i++) costos[i] = [];

Creo que creas más Arrays de los que luego utilizas, (origenes * rutas) es el total sí, pero tú utilizas una primera dimensión (orígenes) y una segunda dimensión (rutas), por lo que después tienes muchas posiciones de la primera dimensión que no utilizas.

Sólo he visto esto a simple vista, pero me parece que lo tienes todo muy bién.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de José

Pasar un codigo de C++ a JavaScript

Publicado por José (6 intervenciones) el 04/07/2022 16:08:58


Muchas gracias Ivan. Has sido de gran ayuda.

Te dejo el LINK de la pagina para que veas el resultado.

Ya sabes, "No es mucho, pero es trabajo honesto"

https://costominimoupn.w3spaces.com

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar