Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    chiarimenti tesina di informatica

    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);		
    	}
    }
    "....il numero sette è un numero magico,si avvicina all'equilibrio di un quadrato e al vertice di un triangolo"

  2. #2
    ciao
    forse potresti dirci che cosa il tuo professore ti contesta per aiutarci a capire....

    ciao

  3. #3
    il problema è che non lo so...lo legge e mi dice non va bene ma poi cerco di chiedergli che cosa è sbagliato e lui continua a dirmi che non va bene....bohh
    "....il numero sette è un numero magico,si avvicina all'equilibrio di un quadrato e al vertice di un triangolo"

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    E che ci possiamo fare noi se al tuo prof non va bene?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    embè....è il prof che non va :rollo:
    "....il numero sette è un numero magico,si avvicina all'equilibrio di un quadrato e al vertice di un triangolo"

  6. #6
    Utente di HTML.it L'avatar di bum
    Registrato dal
    Jun 2008
    Messaggi
    234
    Ma i motivi possono essere molteplici, la cosa principale e che usi java quasi come il c, essendo java orientato agli oggetti magari il tuo professore vorrebbe vedere degli oggetti.

    Prova creando un oggetto Punti le cui variabili sono sostanzialmente quelle stampi nel tuo main,
    poi crei i relativi metodo get e set dei vari elementi e così che andrebbe fatto.

    Quindi credo il problema del tu prof sia sullo stile di programmazione e non sul risultato

  7. #7
    grazie bum ora provo a modificarlo e vediamo che mi dirà il prof!
    "....il numero sette è un numero magico,si avvicina all'equilibrio di un quadrato e al vertice di un triangolo"

  8. #8
    per piacere mi ricontrollate se cosi va un pò meglio...se avete qualche idea me la dite chiaramente io studio statistica non informatica...grazie

    import javax.swing.*; //PER I VARI JOPTIONPANE
    import java.util.*; //PER ORDINARE L'ARRAY (sort)
    import java.io.*; //PER I FILESTREAM
    public class nuovo{

    //CREAZIONE METODO LEGGERE INPUT
    public static int recuperaInt(String messaggio)
    {
    String numero = JOptionPane.showInputDialog(messaggio);
    int conv = Integer.parseInt(numero);
    return conv;
    }

    //CREAZIONE METODO LEGGERE INPUT
    public static int calcComb(int n)
    {
    long combinazioni_l = fattoriale(n)/(fattoriale(n-2)*fattoriale(2)); //CALCOLO COMBINATORIO
    int ris = new Long(combinazioni_l).intValue(); //PER INDICE ARRAY
    return ris;
    }

    // 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=recuperaInt("Inserisci il numero di punti (massimo 20):");
    d=recuperaInt("Inserisci il numero della dimensione:");
    }while (n<0 || d<0 || n>20);
    int combinazioni = calcComb(n);
    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);
    }
    }
    "....il numero sette è un numero magico,si avvicina all'equilibrio di un quadrato e al vertice di un triangolo"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.