lunes, 7 de abril de 2014

Examen Parcial Concurrencia 2014

Buenas gente. He tenido examen esta tarde por lo que la entrada de hoy aparece algo más tarde de la cuenta. Espero que sepais perdonarme :p

Hoy os traigo la solución al examen parcial de concurrencia que hemos hecho. Los enunciados estaban en papel por lo que no puedo dároslos, pero es tan simple que no cuesta trabajo explicarlo ;)

El examen pedía crear una class a la cual le pasáramos al menos como parámetro un entero n (Nota: Al menos significa que podemos meterle más cosas) y, de una matriz creada en el main, tomara la fila n y la pusiera en la columna n en otra matriz llamada matrizt y que sería su traspuesta.

El main creará matrices de tamaño y valores aleatorios y, mediante concurrencia con ésta class, creará su traspuesta. Luego la mostrará por pantalla.

Creo que no es muy difícil no? Bueno, si tenéis alguna duda preguntadme ;)

Aquí os dejo lo que hice en el examen:

import java.util.Random;


public class examen extends Thread{

 /**
  * @param args
  */
 
 
 private static int[][]inicial;
 private static int[][]acabada; //volatile??
 private int n;
 
 public examen( int row, int[][]fila, int[][]matrix) {
  inicial = fila;
  acabada = matrix;
  n = row;
 }
 
 public void run() {
  for(int i = 0; i<inicial[n].length; i++) {
   acabada[i][n] = inicial[n][i];
  }
 }
 
 
 
 
 
 
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int max = 9; //Número maximo que pueden tomar los valores, así como filas y columnas
  Random rnd = new Random();
  int filas = rnd.nextInt(max)+1;
  System.out.println("Filas: "+ filas);
  int columnas = rnd.nextInt(max+1); //Dará elementos de 0 a 10
  System.out.println("Columnas: "+ columnas);
  
  int[][] matriz =new int [filas][columnas];
  //Ahora rellenamos la matriz
  for(int f = 0; f < filas; f++) {
   for(int c = 0; c < columnas; c++) {
    matriz[f][c] = rnd.nextInt(max)+1;
    //Imprimo matriz inicial
    System.out.print(matriz[f][c]+ " ");
   }
   System.out.println();
  }
  
  int[][] matrizt = new int [columnas][filas];
  //Ya están definidos todos los valores
  
  if(filas!=0 && columnas!=0) {
   //Por si alguno de los valores es 0, No gasta recursos en vano.
   
   //Creamos array de threads para cada fila
   examen[] threads = new examen[filas];
   for(int i = 0; i< filas; i++) {
    threads[i] = new examen(i, matriz, matrizt);
    threads[i].start();
   }
   for(int i = 0; i< filas; i++) {
    try {
     threads[i].join();
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
  
  //Ya ha acabado de crear la matriz así que la imprimimos
  System.out.println("\n\n");
  for(int f = 0; f < columnas; f++) {
   for(int c = 0; c <filas; c++) {
    System.out.print(matrizt[f][c]+ " ");
   }
   System.out.println();
  }
  
 }

}
Espero que no os haya costado demasiado. Si os soy sincero lo que más me costó fue la impresión de la traspuesta (lo que tiene el obcecarse en un for que está mal y no darse cuenta xD) Saludos gente;)

No hay comentarios:

Publicar un comentario