Scrivere un programma che legge due file di testo, in cui ciascuno rappresenta una matrice di numeri interi.
Ciascun file contiene inizialmente una riga della forma n;m che indica il numero di righe e di colonne della matrice seguita da n righe, ciascuna contenente m numeri interi separati dal carattere “;”
Il file può contenere delle righe “commento”, che devono essere ignorate durante la lettura della matrice. Le righe commento iniziano per //
Esempio
-------------
-------------
4;4
//questa è una matrice 4 per 4
43;2;321;-21
678;-356;0;0
-123;-234;23;0
//ecco l’ultima riga
678;-356;-4;0
------------
------------
Il programma deve verificare se la prima delle matrici lette da file contiene una sottomatrice contigua uguale alla seconda matrice letta da file.
Per esempio
-------------
------------
La matrice descritta contiene come sottomatrice , la matrice
-356 0
-234 23
-----------
-----------
In caso non ci fosse una sottomatrice uguale alla seconda, deve essere restituita la posizione della sottomatrice più “vicina” alla seconda matrice, dove la distanza tra due matrici è definita come:
\somma_i \somma_j | A (i,j) – A (i,j) |
Ripetere il test anche dopo aver ordinato le righe della prima matrice in ordine lessicografico.
-----------
-----------
La matrice dell’esempio diventa quindi
-123;-234;23;0
43;2;321;-21
678;-356;-4;0
678;-356;0;0
-----------
-----------
Il programma deve poter essere chiamato con il comando >java TestMatrici “nome_primo_file nome_secondo_file” dove il nome della classe è seguito dai nomi dei files da leggere.
(usare il parametro del main).
io ho creato il file ma non funziona aiutatemi Help
import java.io.*;
import javax.swing.JOptionPane;
public class matrici{
public static int [][] TrovaMatrice (String nomeprimofile, String nomesecondofile) throws IOException{
FileReader f=new FileReader("matrice1.txt");
BufferedReader in= new BufferedReader(f);
String [] d = new String [2];
int [] dim= new int [2];
String linea= in.readLine();
d=linea.split(";");
for(int i=0; i<2; i++){
dim[i]=Integer.parseInt(d[i]);
}
int m= dim[0]; int n= dim[1];
linea=in.readLine();
String primoCarattere=linea.substring(0,1);
int [][] matrice1= new int[m][n];
while(primoCarattere!=null){
if(primoCarattere != "/") {
String [] linea1= new String[n];
linea1=linea.split(";");
int k=0;
for(int j=0;j<n;j++){
matrice1 [k][j]=Integer.parseInt(linea1[j]);
}
k++;
}
linea=in.readLine();
primoCarattere=linea.substring(0,1);
}
return matrice1;
f.close();
FileReader z = new FileReader(nomesecondofile);
BufferedReader iv= new BufferedReader(z);
String [] d1 = new String [2];
int [] dim1= new int [2];
String line= iv.readLine();
d1=line.split(";");
for(int l=0; l<2; l++){
dim[l]=Integer.parseInt(d[l]);
}
int m1= dim1[0]; int n1= dim1[1];
line=iv.readLine();
String primoCarattere1=line.substring(0,1);
int [][] matrice2= new int[m1][n1];
while(primoCarattere1 !=null){
if(primoCarattere1 != "/") {
String [] line1= new String[n];
line1=line.split(";");
int s=0;
for(int t=0;t<n1;t++){
matrice2 [s][t]=Integer.parseInt(line1[t]);
}
s++;
}
line=iv.readLine();
primoCarattere=line.substring(0,1);
}
return matrice2;
}
public void confrontoMatrici(int[] [] matrice1, int [][] matrice2){
int m=matrice1.length;int n=matrice1[0].length;
int m1=matrice2.length;int n1=matrice2[0].length;
int x=m-m1+1; int y=n-n1+1;
double [] [] matdiff= new double [x] [y];
double diff;
for (int a=0; a<m1; a++){
for (int b=0; b<n1; b++){
for (int c=a; c<x+a; c++){
for (int d=b; d<y+b; d++){
diff= matrice2[a][b] - matrice1 [c][d];
for (int k=0; k<x; k++){
for (int h=0; h<y; h++){
matdiff [h] [k] += (diff*diff);
}
}
}
}
}
}
double minimo=matdiff [0][0];
int rigaMinima=0; int colonnaMinima=0;
for (int e=0; e<x; e++){
for (int f=1; f<y; f++){
if (matdiff[e][f] < minimo){
minimo=matdiff [e][f];
rigaMinima =e; colonnaMinima =f;
}
}
}
if (minimo ==0) {
System.out.print("La prima matrice contiene esattamente la seconda, nella sottomatrice che ha come primo elemento quello di riga: "+ rigaMinima +" e di colonna: "+ colonnaMinima);
System.out.println();
}
else{
System.out.print("La prima matrice non contiene esattamente la seconda, ma la sottomatrice più vicina ha come primo elemento quello di riga: "+ rigaMinima +"e di colonna: "+ colonnaMinima);
System.out.println();
}
}
public int [] [] ordinaMatrice (int[] [] matrice1){
int m=matrice1.length;int n=matrice1[0].length;
int[][]matriceOrd=new int[m][n];
for(int p=0;p<m;p++){
for(int q=0;q<n;q++){
matriceOrd[p][q]=matrice1[p][q];
}
}
int [] memoRiga=new int[n];
for(int g=0; g<m;g++){
for(int a=0; a<m-1; a++){
if(matriceOrd [a] [0]>matriceOrd [a+1] [0]){
for (int b=0; b<n; b++){
memoRiga [b]=matriceOrd [a] [b];
matriceOrd [a] [b]=matriceOrd[a+1] [b];
matriceOrd [a+1] [b]=memoRiga [b];
}
}
else{
if(matriceOrd [a] [0]==matriceOrd [a+1] [0]){
for (int c=1; c<n; c++){
if (matriceOrd [a] [c]>matriceOrd [a+1] [c]){
for (int b=0; b<n; b++){
memoRiga [b]=matriceOrd [a] [b];
matriceOrd [a] [b]=matriceOrd[a+1] [b];
matriceOrd [a+1] [b]=memoRiga [b];
}
}
}
}
}
}
}
}
}
public static void main(String[] args){
String q=JOptionPane.showInputDialog("inserisci nome primo file");
String p=JOptionPane.showInputDialog("inserisci nome secondo file");
TrovaMatrice (q,p);
System.exit(0);
}
Perdonatemi se son ciuchino..