Calcolo del massimo di una riga

di il
4 risposte

Calcolo del massimo di una riga

Salve ,
ho la seguente matrice mi devocalcolare il massimo di ogni riga come faccio?
int a[][]= {
           {1,2,3,4,5,6,7,8,9,0},
           {3,5,6,7,7,8,9,0,0,6},
           {9,5,6,3,2,3,5,6,9,0},
           {1,2,3,4,5,6,7,8,9,0},
           {3,5,6,7,7,8,9,0,0,6},
           {9,5,6,3,2,3,5,6,9,0},
           {1,2,3,4,5,6,7,8,9,0},
           {3,5,6,7,7,8,9,0,0,6},
           {9,5,6,3,2,3,5,6,9,0},
           {1,2,3,4,5,6,7,8,9,0},
           {3,5,6,7,7,8,9,0,0,6},
};

4 Risposte

  • Re: Calcolo del massimo di una riga

    Ecco il codice :

    int numRighe = a.length;
    for(int i = 0; i< numRighe; i++){
    int max = 0;
    for(int j = 0; j< a.length; j++){
    if (a[j] > a[max]) {
    max = j;
    }
    }
    System.out.println("Max riga "+i+" : "+a[max]);
    }

    Saluti.
  • Re: Calcolo del massimo di una riga

    Salve ho svolto un esercizio simile
    ma stampa sempre Massimo Colonna=0
    qualcuno può aiutarmi?
    
    class massimoColonna extends Thread {
    	int mat[][];
    	int max;
    	
    	int lunghezza;
    	
    	public massimoColonna(int mat[][], int n, int m, int lunghezza){
    	this.mat= new int[n][m];
    	this.lunghezza=lunghezza;
    	
    	}
    	
    
    	
    	public void run(){
    		
    		for(int i=0; i<lunghezza; i++){
    			
    			for(int j=0; j<lunghezza; j++)
    				if(mat[j][i]>mat[max][i])
    					max=j;
    						
    		}
    	}
    	
    	public int getMax(){
    		try{
    			this.join();
    		}catch(InterruptedException e){System.out.println(e);}
    		return max;
    	}
    
    }
    
    
    public class esercizio1 {
    	
    
    	
    	public static void main (String args[]) {
    		
    		int m=2;
    		int n=2;
    		int matr[][]=new int[n][m];
    
    			matr[0][0]=5;
    			matr[0][1]=6;
    			matr[1][0]=7;
    			matr[1][1]=8;
    
    			int lunghezza=matr.length;
    		
    		
    		massimoColonna c[]=new massimoColonna[n];
    	
    		
    		
    		for(int i=0; i<lunghezza;i++){
    
    				c[i]=new massimoColonna(matr,n,m,lunghezza);
    				c[i].start();
    		
    		}
    		
    		for(int i=0; i<lunghezza;i++){
    			int massimo=c[i].getMax();
    			System.out.println ("Massimo Colonna = "+massimo);
    		}
    	}
    }
    
    
  • Re: Calcolo del massimo di una riga

    Non sono molto esperto dei thread, pero' non riesco a capire la neccessita' di dover usare piu' flussi che analizzano preaticamente la stessa matrice ogni volta da zero, l'esercizio che aveva proposto a me era cercare il pi greco sempre con una matrice, ma era semplicemente un conteggio, in quel caso io avevo delegato a diversi flussi ciascuna colonna, e come suggerimento ti consiglierei di fare altrettanto. potresti fare una ricerca massimoColonna che cerca il valore massimo solo della colonna, e insieme passi anche un array che praticamente memorizza il massimo di tutte le colonne e infine fare una ricerca del massimo di quest'ultimo array, se non vuoi creare un array di supporto potresti semplicemente tenere la posizione zero di ogni riga vuota che poi poi sara occupato dal massimo trovato da massimoColonna, per la sincronizzazione il joint lo lanci da main, e quando tutti hanno terminato l'esecuzione trovi il massimo lenna colonna zero.
    Ma ricontrollando il tuo codice non riesco a capire il tuo sistema per trovare il massimo, penso che sia li il tuo problema. un suggerimento di codice per trovare solo la colonna potrebbe essere questo:
    
    int max = 0;   // il valore maggiore
    int maxCol = 0;   // la colonna dove si trova il valore piu' grande
    int maxRig = 0;   // la riga dove si trova il valore massimo
    
    for( int i = 0; i < lunghezza; i++){
       for( int j = 0; j < lunghezza2; j++ ){
          if( mat[i][j] > max ){
             max = mat[i][j];
             maxCol = j;
             maxRig = i;
    }}}
    
    ho messo 2 lunghezze doverse perche non e' detto che siano sempre matrici quadrate, c'e' per forza bisogno di una variabile che memorizza il valore massimo trovato perche' andra confrontato con tutti gli elementi della matrice, e ogni volta che l'elemento della matrice e' maggiore di max, memorizziamo il nuovo valore come maggiore e prendiamo nota dento a maxCol la colonna e maxRig la riga, alla fine di tutta la colonna troveremo il valore maggiore.
    se lo vuoi a piu flussi dovresti togliere la for del piu interna che richiamera la classe dove metterai il suo contenuto.
    Un altro consiglio, i nomi delle classi sono preferibili iniziate con la lettera maioscola, esistono delle piccole regole tipo queste per capire a unica occhiata se quel richimao e' riferito a classe, metodo o variabile.
    se inizia con maiuscolo dovrebbe essere una classe
    se inizia in minuscolo composto solo da nomi dovrebbe essere una variabile
    se e' tutto in maiuscolo dovrebbe essre una variabile costate a cui non si puo cambiare il contenuto
    se inizia per minuscolo e con un verbo dovrebbe essere un metodo.
    ciao
    Lingyong Sun

    ps. mi era sfuggito che doveva essere fatto a goni riga.
  • Re: Calcolo del massimo di una riga

    Ecco ho trovato veramente l'errore stavolta, ti sei dimenticato di copiare il contenuto della matrice all'interno della classe massimoColonna, infatti se fai una stampa di mat risulteranno tutti 0. In ogni caso devi sempre correggere i for perche non dovranno essere 2 ma uno soltato che ti scansiona la colonna con indice passato come parametro per ciascun thread che coincide poi con la for che lancia i thread.
    Ti ho fatto un po di modifiche dentro il codice con piccole stampe per vedere detro i thread ma non sono sicuro sia quello che cercavi ecco il codice modificato
      class massimoColonna extends Thread {
           int mat[];
           int max;
           int lunghezza;
           
           public massimoColonna(int mat[], int lunghezza){
           this.mat= mat;
           this.lunghezza=lunghezza;
           
           }
           
    
           
           public void run(){
              
              for(int i=0; i<lunghezza; i++){
                 
                
                    if(mat[i]>mat[max]){
                       max=i;
                       System.out.println( "Ciao");}
                       System.out.printf( "i %d, valore i %d, valore max %d\n",i, mat[i], mat[max]);
                       }
                          
              
           }
           
           public int getMax(){
              try{
                 this.join();
              }catch(InterruptedException e){System.out.println(e);}
              return mat[max];
           }
    
        }
    
    
        public class esercizio1 {
           
    
           
           public static void main (String args[]) {
              
              int m=2;
              int n=2;
              int matr[][]=new int[n][m];
    
                 matr[0][0]=5;
                 matr[0][1]=6;
                 matr[1][0]=7;
                 matr[1][1]=8;
    
                 int lunghezza=matr.length;
              
              
              massimoColonna c[]=new massimoColonna[n];
           
              
              
              for(int i=0; i<lunghezza;i++){
    
                    c[i]=new massimoColonna(matr[i],lunghezza);
                    c[i].start();
              
              }
              
              for(int i=0; i<lunghezza;i++){
                 int massimo=c[i].getMax();
                 System.out.println ("Massimo Colonna = " + i + "= " +massimo);
              }
           }
        }
    
    
    output
    i 0, valore i 5, valore max 5
    i 0, valore i 7, valore max 7
    Ciao
    i 1, valore i 8, valore max 8
    Ciao
    i 1, valore i 6, valore max 6
    Massimo Colonna = 0= 6
    Massimo Colonna = 1= 8

    030366 ha scritto:


    salve ho svolto un esercizio simile
    ma stampa sempre Massimo Colonna=0
    qualcuno può aiutarmi?
    
    class massimoColonna extends Thread {
    	int mat[][];
    	int max;
    	
    	int lunghezza;
    	
    	public massimoColonna(int mat[][], int n, int m, int lunghezza){
    	this.mat= new int[n][m];
    	this.lunghezza=lunghezza;
    	
    	}
    	
    
    	
    	public void run(){
    		
    		for(int i=0; i<lunghezza; i++){
    			
    			for(int j=0; j<lunghezza; j++)
    				if(mat[j][i]>mat[max][i])
    					max=j;
    						
    		}
    	}
    	
    	public int getMax(){
    		try{
    			this.join();
    		}catch(InterruptedException e){System.out.println(e);}
    		return max;
    	}
    
    }
    
    
    public class esercizio1 {
    	
    
    	
    	public static void main (String args[]) {
    		
    		int m=2;
    		int n=2;
    		int matr[][]=new int[n][m];
    
    			matr[0][0]=5;
    			matr[0][1]=6;
    			matr[1][0]=7;
    			matr[1][1]=8;
    
    			int lunghezza=matr.length;
    		
    		
    		massimoColonna c[]=new massimoColonna[n];
    	
    		
    		
    		for(int i=0; i<lunghezza;i++){
    
    				c[i]=new massimoColonna(matr,n,m,lunghezza);
    				c[i].start();
    		
    		}
    		
    		for(int i=0; i<lunghezza;i++){
    			int massimo=c[i].getMax();
    			System.out.println ("Massimo Colonna = "+massimo);
    		}
    	}
    }
    
    
Devi accedere o registrarti per scrivere nel forum
4 risposte