Domanda sulle matrici

di il
12 risposte

Domanda sulle matrici

Buonasera a tutti mi chiamo Felice
qualcuno sa dirmi come posso inserire due matrici per verificare il sotto riportato programma.
Grazie anticipatamente

public class prodMatrice{
static boolean prodottoMatrice(double [][] A, double [][] B, double [][] C){
if (A.length != B[0].length || A.length != C.length || B[0].length != C[0].length)
return false;
for (int i=0 ; i<A.length ; i++)
for(int j=0 ; j<B.length ; j++){
C[j]=0;
for (int k=0 ; k<A[0].length; k++)
C[j]= A[j]*B[j];
}
return true;
}
}

12 Risposte

  • Re: Domanda sulle matrici

    Cioè???
  • Re: Domanda sulle matrici

    Ad esempio voglio inserire due matrci

    A=
    2 5 6
    4 8 1
    5 2 3

    B=
    3 4 1
    3 2 1
    5 2 3

    e ricavare i prodotto C
  • Re: Domanda sulle matrici

    Se non ricordo male dovrebbe essere:
    int[][] a = {{11, 12, 13},{21, 22, 23},{31, 32, 33}}
    se questo non va puoi usare questo che sicuramente va;
    int[][]a = new int[righe][colonne];
    a[0][0] = 11;
    a[0][1] = 21;
    ecc...
  • Re: Domanda sulle matrici

    La mia domanda era "ironica"...nel senso che era una domanda troppo generica e non si capisce che cosa volesse.

    non sai creare le matrici? non sai richiamare i metodi? cosa ti serve sapere?
  • Re: Domanda sulle matrici

    Grazie benfa,
    avevo già provato ma non va.
    vi scrivo tutto il programma da me fatto
    ditemi dove sbaglio perfavore.
    PS: Questo programma mi deve restituire a video solo o True o false.

    public class prodMatrice{
    static boolean prodottoMatrice(double [][] A, double [][] B, double [][] C){
    if (A.length != B[0].length || A.length != C.length || B[0].length != C[0].length)
    return false;
    for (int i=0 ; i<A.length ; i++)
    for(int j=0 ; j<B.length ; j++){
    C[j]=0;
    for (int k=0 ; k<A[0].length; k++)
    C[j]= A[k]*B[k][j];
    }
    return true;
    }
    public static void main (String [] args){
    double [][] A={
    {1, 3, 4},
    {4, 2, 1},
    {1, 5, 3}
    };
    double [][] B={
    {3, 5, 7},
    {4, 2, 1},
    {3, 7, 1}
    };
    System.out.println(prodottoMatrice(A,B));
    }
    }
  • Re: Domanda sulle matrici

    Ci credo, il metoro riceve 3 matrici e tu gliene passi 2.

    utilizza il tag code per inserire il codice

    [code"]
    [/code"]

    senza gli apostrofi ovviamente
  • Re: Domanda sulle matrici

    An ma il poroblema è il programma... tu vuoi che faccia il prodotto delle matrici e ritorni true se invece non è possibile ritorni false.
    allora:
    
    public class prodMatrice{
    static boolean prodottoMatrice(double [][] A, double [][] B, double [][] C){
         if (A.length != B[0].length || A.length != C.length) //se a.length==b.length e a.length==c.length è 
              return false;
         scontato che b.length==c.length
         for (int i=0 ; i<A.length ; i++)
               for(int j=0 ; j<A[0].length ; j++)
                      C[i][j]=a[i][j]*b[i][j];
         return true;
    }
    
    
    così dovrebbe andare
    ti boltiplica ogni elemento di a per il corrispondente in b e lo mette in c nella posizione corretta
  • Re: Domanda sulle matrici

    Benfa anche così non va,
    cmq hai capito bene cosa mi serve.
    il programma che io ho scritto borebbe essere corretto ma quando lo test mi ritorna solo un errore che ti riporto in calce .
    come faccio a eliminarlo?

    D:\Fondamenti\prodMatrice.java:24: error: method prodottoMatrice in class prodMatrice cannot be applied to given types;
    System.out.println(prodottoMatrice(A,B));
    ^
    required: double[][],double[][],double[][]
    found: double[][],double[][]
    reason: actual and formal argument lists differ in length
    1 error

    Procedura completata con codice di uscita 1

    Fhenik ha scritto:


    Grazie benfa,
    avevo già provato ma non va.
    vi scrivo tutto il programma da me fatto
    ditemi dove sbaglio perfavore.
    PS: Questo programma mi deve restituire a video solo o True o false.

    public class prodMatrice{
    static boolean prodottoMatrice(double [][] A, double [][] B, double [][] C){
    if (A.length != B[0].length || A.length != C.length || B[0].length != C[0].length)
    return false;
    for (int i=0 ; i<A.length ; i++)
    for(int j=0 ; j<B.length ; j++){
    C[j]=0;
    for (int k=0 ; k<A[0].length; k++)
    C[j]= A[k]*B[k][j];
    }
    return true;
    }
    public static void main (String [] args){
    double [][] A={
    {1, 3, 4},
    {4, 2, 1},
    {1, 5, 3}
    };
    double [][] B={
    {3, 5, 7},
    {4, 2, 1},
    {3, 7, 1}
    };
    System.out.println(prodottoMatrice(A,B));
    }
    }
  • Re: Domanda sulle matrici

    Quando chiami il metodo prodottoMatrice (A,B) devi apssare anche una matrice C in cui mettere il risulato quidni devi inizializzare una matrice double[][] C = new double[3][3]; echiamare il metodo prodottoMatrice(A,B,C)
    prova così.
    P.S. il tuo programma non fa proprio un prodotto fa una cosa strana che non so descrivere poi magari è quelllo che vuoi ottenere cmq l'errore è che non passi il terzo parametro
  • Re: Domanda sulle matrici

    Ok così funziona benfa così funziona.
    però se non ti disturbo voglio capire una cosa.
    Inanzitutto ti spiego cosa fa il programma
    Il programma dice se due matrici sono CONFORMI cioè se il numero di colonne di A è pari alle righe di B e il numero di righe di A è pari al numero di colonne di B.
    Se questo è vero ritorna TRUE altrimenti False.

    allora nel programma che ho scritto anche grazie al tuo aiuto
    io insrisco le matrici A e B
    e definisco double [][]C = new double C[3][3]
    quindi se la mia matrice A e di dimensione 3x3 e anche B è 3x3
    miritorna TRUE.
    non appena modifico ad esempio B 2x3 il programma non mi restituisce nulla ammeno che io non imposti nuovamente double [][] C= new double [2][3];

    Come posso fare affinche il double [][] C= new double [2][3] vari da solo?
  • Re: Domanda sulle matrici

    Allora puoi fare così:
    crei una variabile righe = a.length
    e una colonne = a[1].length
    poi fai double[][] c = new double[righe][colonne]

    in questo modo c avrà le stesse dimensioni di A

    il tuo programma non ritorna nulla se le matrici sono diverse perchè luifacendo a.length ti ritorna il numero di right quindi tu nel tuo controllo controlli che le matrici abbiano lo stesso numero di righe ma dovresti controllare anche il numero di colonne. per farti ritornare il numero di colonne devi fare:

    prendi una riga a caso della matrice e gli chiedi l alunghezza a[1].length in questo modo ottieni il numero di colonne

    quindi nell if devi controllare anche che le colonne siano uguali in tutte le matrici
  • Re: Domanda sulle matrici

    Ciao, penso che questo ti potrebbe dare qualche idea.
    
    public class MoltiplicaMatrici {
    	
    	int A[][];
    	int B[][];
    	
    	//Costruttore
    	public MoltiplicaMatrici() {
    		//Modificare i valori tra parentesi quadre
    		//per effettuare vari test
    		A = new int[3][2];
    		B = new int[2][3];
    		
    		//Riempiamo le matrici con "0"
    		for (int i = 0; i < A.length; i++) {
    			for (int j = 0; j < A[i].length; j++) {
    				A[i][j] = 0;
    			}
    		}
    		
    		for (int i = 0; i < B.length; i++) {
    			for (int j = 0; j < B[i].length; j++) {
    				B[i][j] = 0;
    			}
    		}
    	}
    	
    	//Metodo che ritorna true se sono conformi
    	public boolean sonoConformi() {
    		boolean conformi;
    		
    		if (A[0].length == B.length && A.length == B[0].length) {
    			conformi = true;
    		} else {
    			conformi = false;
    		}
    		return conformi;
    	}
    	
    	
    	public static void main(String[] args) {
    		MoltiplicaMatrici dueMatrici = new MoltiplicaMatrici();
    		
    		if (dueMatrici.sonoConformi()) {
    			System.out.println("...Le matrici sono conformi...\n"
    					+ "PROGRAMMA FINITO");
    		} else {
    			System.out.println("...Le matrici NON sono conformi...\n"
    					+ "PROGRAMMA FINITO");
    		}
    
    	}
    
    }
    
    EDIT: la classe si chiama MoltiplicaMatrici, ma in realtà non le moltiplica, dice se sono conformi o meno.
Devi accedere o registrarti per scrivere nel forum
12 risposte