Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - xNacht.Engelx

Páginas: [1]
1
Hola a todos, estoy intentando resolver un algoritmo en Java, nunca había programado en Java y estoy algo atorada con este problema, dice:

Se tienen "s" cantidad de barras de "x" longitud a las cuales se harán "m" cantidad de cortes de "y" longitud, obtener el residuo de los cortes, además las posibles combinaciones  de corte y calificarlas (cuál es la mejor/más óptima).

Hasta ahorita tengo un código que supuestamente pone las posibles combinaciones, pero al momento de ejecutarlo después de las primeras combinaciones en las demás no aparecen todos los cortes, y estoy pensando en cómo puedo hacer para calificarlas, ¿alguna idea? Gracias

CÓDIGO:
   
Código: [Seleccionar]
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int s, n=0, cont=1, m, i, j, q, a, z;
   
    System.out.print("Numero de barras de las que se obtendran las piezas : ");
    s = scan.nextInt();
    int b[] = new int[s];
   
    do{
        System.out.print("Longitud de la barra " + cont + ": ");
        b[n] = scan.nextInt();
        n++;
        cont++;
    }while (n<s);
 
    System.out.print("Numero de piezas por cortar: ");
        m = scan.nextInt();
        int p[] = new int[m]; //Se designa el numero de piezas a cortar
       
        n=0;
        cont=1;
       
        do{
            System.out.print("Longitud de la pieza " + cont + ": ");
            p[n] = scan.nextInt();
            n++;
            cont++;
        }while (n<m); //controla cuantas longitudes de piezas se van ingresando
       
        int barras[][] = new int[s][s];  //se crean los arreglos bidimensionales para combinaciones
        int piezas[][] = new int[m][m];  //de tamaño de las barras y de las piezas
       
      //PASA EL ARREGLO DE BARRAS AL ARREGLO BIDIMENSIONAL DE BARRAS
        for (n=0; n<s; n++){   //n<num de barras
            q=n;         
            for (cont=0; cont<s; cont++){ //cont< num de barras
                barras[n][q] = b[cont];    //se ingresa en la posicion {n}{q} del bidimensional barras lo que hay en barras{cont}
                q++;
                if (q>=s){     //si control de ingreso de barras es mayor o igual al num de barras
                    q = q - s;      //se resta el control de ingr.barras menos el num de barras
                }
            }
        }
       
       //PASA DEL ARREGLO DE PIEZAS A BIDIMENSIONAL DE PIEZAS       
        for (n=0; n<m; n++){
            q=n;
            for (cont=0; cont<m; cont++){
                piezas[n][q] = p[cont];
                q++;
                if (q>=m){
                    q = q - m;                   
                }
            }
        }
        //SE CREAN ARREGLOS AUXILIARES DE BARRAS Y PIEZAS DE TAMAÑO DEL # DE PIEZAS Y BARRAS
        int auxb[][] = new int[s][s];
        int auxp[][] = new int[m][m];
        int cpb[][]= new int [100][100];  //Almacenará los cortes por pieza
       
        for (i=0; i<s; i++){
            for (j=0; j<m; j++){
               
                for(q=0; q<s; q++){     //pasa lo que hay en el arreglo de barras a auxiliar de barras
                    auxb[i][q] = barras[i][q];
                }
                       
                for(q=0; q<m; q++){     //pasa lo que hay en el arreglo de piezas a auxiliar de piezas
                    auxp[j][q] = piezas[j][q];
                }
               
                q=0;   //restaura en cero a "q"
                for (n=0;n<s;n++){   //cuando n sea menor que la cantidad de barras
                    for (cont=0;cont<m;cont++){  //cuando cont sea menor que la cantidad de cortes
                        if (barras[i][n]>=piezas[j][cont] && piezas[j][cont]!=0){
                            barras[i][n] = (barras[i][n] - piezas[j][cont]);
                            cpb[n][q]=piezas[j][cont]; //guarda el valor de la pieza que se restó o corto
                            piezas[j][cont]=0; //ese lugar se iguala a cero
                            q++;
                            }
                        }
                    }
               
                q=0;
                while(q<m && piezas[j][q]==0){
                    q++;
                }
               
                if (q==m){
                    a=1;
                    z=0;
                    System.out.print("Probabilidad " + i + "," + j + " \n");
                    for (q=0; q<s; q++){
                        System.out.print("El valor del residuo de la barra " + a + " es: " + barras[i][q] + ", con cortes de ");
                        while (cpb[q][z]!=0){
                            System.out.print(cpb[q][z] + ", ");
                            z++;
                        }
                        System.out.print("\n");
                        a++;
                        }
                    System.out.print("\n");
                }
               
                else
                    System.out.print("No se pueden realizar los cortes con las barras dadas \n");
               
                for(q=0; q<s; q++){
                    barras[i][q] = auxb[i][q];
                }
               
                for(q=0; q<m; q++){
                    piezas[j][q] = auxp[j][q];
                }
               
            }
        }
             
    }

Páginas: [1]

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".