Prodotto righe per colonne

di il
3 risposte

Prodotto righe per colonne

Devo realizzare un programma che svolge il prodotto righe per colonne fra matrici. Finora ho scritto questo:

class ProdottoMatrici {
public static void main(String[] args) {
int[][] a,b;
int i,j,l,z,f,d,m,n;
System.out.println("Inserire l'ordine della prima matrice");
m = Lettore.in.leggiInt();
n = Lettore.in.leggiInt();
a = new int[m][n];
for (i=0; i<m; i++) {
for(j=0; j<n; j++)
a[j] = Lettore.in.leggiInt();
}
System.out.println();
System.out.println("Inserire l'ordine della seconda matrice");
f = Lettore.in.leggiInt();
d = Lettore.in.leggiInt();
System.out.println();
b = new int[f][d];
for (l=0; l<f; l++) {
for(z=0; z<d; z++)
a[l][z] = Lettore.in.leggiInt();
}
nuovo(a,b,m,d);
public static int[][] nuovo(int[][] h, int[][] l, int w, int p) {
int[][] c;
int i,j;
c = new int[w][p];
for (i=0; i<h.length; i++)
prodotto(h, l)
public static int[][] prodotto(int[] a, int[][] b) {
int i;
for (i=0; i<a.length; i++)

a*b

3 Risposte

  • Re: Prodotto righe per colonne

    Fab996 ha scritto:


    Devo realizzare un programma che svolge il prodotto righe per colonne fra matrici. Finora ho scritto questo:
    Il codice è incompleto e abbastanza confuso (da come è scritto, sembra che es. la definizione del metodo nuovo sia dentro il metodo main, cosa che ovviamente è un errore poiche illegale).

    Se vuoi fare il prodotto tra matrici, ottenendo una matrice di risultato, basta che guardi (se non l'hai già fatto) il concetto su Wikipedia: https://it.wikipedia.org/wiki/Moltiplicazione_di_matrici

    La moltiplicazione è fattibile solo ad una certa condizione e questa, tra l'altro, andrebbe anche testata nel tuo codice. Il resto è solo semplice matematica.


    P.S. usi troppe variabili a singola lettera, poco significative. Abituati ad usare nomi più significativi, altrimenti il codice risulta davvero confuso e poco leggibile.
  • Re: Prodotto righe per colonne

    andbin ha scritto:


    Fab996 ha scritto:


    Devo realizzare un programma che svolge il prodotto righe per colonne fra matrici. Finora ho scritto questo:
    Il codice è incompleto e abbastanza confuso (da come è scritto, sembra che es. la definizione del metodo nuovo sia dentro il metodo main, cosa che ovviamente è un errore poiche illegale).

    Se vuoi fare il prodotto tra matrici, ottenendo una matrice di risultato, basta che guardi (se non l'hai già fatto) il concetto su Wikipedia: https://it.wikipedia.org/wiki/Moltiplicazione_di_matrici

    La moltiplicazione è fattibile solo ad una certa condizione e questa, tra l'altro, andrebbe anche testata nel tuo codice. Il resto è solo semplice matematica.


    P.S. usi troppe variabili a singola lettera, poco significative. Abituati ad usare nomi più significativi, altrimenti il codice risulta davvero confuso e poco leggibile.
    import fiji.io.*;
    //Pre - n = f
    class ProdottoMatrici {
    	public static void main(String[] args) {
    		int[][] a,b;
    		int i,j,l,z,f,d,m,n;
    		System.out.println("Inserire l'ordine della prima matrice");
    		m = Lettore.in.leggiInt();
    		n = Lettore.in.leggiInt();
    		a = new int[m][n];
    		for (i=0; i<m; i++) {
    			for(j=0; j<n; j++)
    				a[i][j] = Lettore.in.leggiInt();
    		}
    		System.out.println();
    		System.out.println("Inserire l'ordine della seconda matrice");
    		f = Lettore.in.leggiInt();
    		d = Lettore.in.leggiInt();
    		System.out.println();
    		b = new int[f][d];
    		for (l=0; l<f; l++) {
    			for(z=0; z<d; z++)
    				a[l][z] = Lettore.in.leggiInt();
    		}
    		visualizza(prodotto(a,b));
    	}
    	public static int[][] prodotto(int[][] a, int[][] b) { 
    		int RIGHE,COLONNE,i,j;
    		RIGHE = a.length;
    		COLONNE = b[0].length;
    		int[][] x;
    		x = new int[RIGHE][COLONNE];
    		for (i=0; i<RIGHE; i++) {
    			for (j=0; j<COLONNE; j++)
    				x[i][j] = rigacolonna(a,b,i,j);
    		}
    		return x;
    	}	
    	public static int rigacolonna(int[][] a, int[][] b, int c, int d) {
    		int i,j,prod;
    		prod =0;
    		for (i=0; i<b.length; i++)
    				prod = prod+ a[c][i]*b[i][d];
    		return prod;
    	}
    	public static void visualizza(int[][] a) {
    		int i, j; 
    		for (i=0; i<a.length; i++) {
    			for (j=0; j<a[i].length; j++)
    				System.out.print(a[i][j] + " ");
    		System.out.println();
    		 }
    	} 
    }
    	
    Questo è il codice che ho scritto, però non capisco il perchè stampa sempre la matrice nulla...
  • Re: Prodotto righe per colonne

    Fab996 ha scritto:


    		System.out.println();
    		System.out.println("Inserire l'ordine della seconda matrice");
    		f = Lettore.in.leggiInt();
    		d = Lettore.in.leggiInt();
    		System.out.println();
    		b = new int[f][d];
    		for (l=0; l<f; l++) {
    			for(z=0; z<d; z++)
    				a[l][z] = Lettore.in.leggiInt();     // <----------- SBAGLIATO, assegni in a invece che in b
    		}
    
    Questo è il codice che ho scritto, però non capisco il perchè stampa sempre la matrice nulla...
    L'errore è nell'input, vedi commento.
    Il resto tecnicamente è corretto.
Devi accedere o registrarti per scrivere nel forum
3 risposte