Scrivere un programma che legge due file di testo,

di il
1 risposte

Scrivere un programma che legge due file di testo,

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..

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte