Salve a tutti,
il mio professore mi ha assegnato questa tesina...ma ogni volta che vado a ricevimento non riesco a capire perchè a lui non va bene eppure se lo eseguo funziona.Dunque devo calcolare n punti in d dimensioni nell'intervallo [0,1)^d studiare al variare di d ed n:
-distanza massima tra due punti grandi
-distanza minima
-mediare su più esperimenti con stessi d ed n
Input: variabili d,n
Output:su un file visualizzare n d max min
Io l'ho scrittto in questo modo:
codice:import javax.swing.*; //PER I VARI JOPTIONPANE import java.util.*; //PER ORDINARE L'ARRAY (sort) import java.io.*; //PER I FILESTREAM public class programma{ /** * @param args */ // CREAZIONE METODO PER IL CALCOLO DEL FATTORIALE static long fattoriale(long x){ long f=x; for (long i=x; i>1; i--){ f*=(i-1); } return f; } // CREAZIONE METODO PER SCRIVERE SUL FILE public static void salva(String cosa, String cosa_b){ try{ FileOutputStream file = new FileOutputStream("file.txt"); PrintStream Output = new PrintStream(file); Output.println(cosa); Output.println(cosa_b); System.out.println("Scrittura su file eseguita correttamente"); } catch (IOException e){ System.out.println("Errore: "+ e); System.exit(1); } } public static void main(String[] args) { int d, n; // CREO CICLO PER VERIFICARE CHE I NUMERI IMMESSI SIANO ENTRAMBI MAGGIORI DI 0 E N<20 do{ n=Integer.parseInt(JOptionPane.showInputDialog("Inserisci il numero di punti (massimo 20):")); d=Integer.parseInt(JOptionPane.showInputDialog("Inserisci il numero della dimensione:")); }while (n<0 || d<0 || n>20); long combinazioni_l = fattoriale(n)/(fattoriale(n-2)*fattoriale(2)); //CALCOLO COMBINATORIO int combinazioni = new Long(combinazioni_l).intValue(); //PER INDICE ARRAY double [][] punti_b = new double[n][d]; // CREO L'ARRAY MULTIDIMENSIONALE CONTENTE I PUNTI // RIEMPIO L'ARRAY DEI PUNTI for (int i=0; i<n; i++){ for (int j=0; j<d; j++){ punti_b[i][j]=Math.pow(Math.random(), d); // PUNTI NELL'INTERVALLO [O,1)^d } } double [] sottrazione = new double[combinazioni]; //CREO L'ARRAY PER SALVARE LA DISTANZA int puntatore_b = 0; // CREO VARIABILE PER INCREMENTO INDICI ARRAY SOTTRAZIONE double valore=0; //VAR PER LA SOMMATORIA DELLA DIFFERENZA DELLE COORDINATE //CALCOLO E SALVO LA DIFFERENZA DI TUTTI I PUNTI for (int i=0; i<n-1; i++){ //N-1 DATO CHE NON DEVO SOTTRARRE L'ULTIMO ELEMENTO for (int x=i+1; x<n; x++){ for (int f=0; f<d; f++){//PER FARE LA DIFFERENZA DI OGNI COORDINATA valore += Math.pow(Math.abs(punti_b[i][f]-punti_b[x][f]), 2); //DIFFERENZA COORDINATE } double diff = Math.sqrt(valore); valore=0; //PER AZZERRARE LA SOMMATORIA PRECEDENTE sottrazione[puntatore_b]=diff; //SALVO NELL'ARRAY LA DIFFERENZA puntatore_b++; } } Arrays.sort(sottrazione); //ORDINO L'ARRAY IN MANIERA CRESCENTE System.out.println("La distanza massima tra i punti random scelti a caso è: " +sottrazione[sottrazione.length-1]); System.out.println("La distanza minima tra i punti random scelti a caso è: " +sottrazione[0]); String massimo, minimo; massimo = "La distanza massima tra i punti random scelti a caso è: " +String.valueOf(sottrazione[sottrazione.length-1]); minimo = "La distanza minima tra i punti random scelti a caso è: "+ String.valueOf(sottrazione[0]); salva(massimo, minimo); System.exit(0); } }

Rispondi quotando