Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    26

    Aiuto semplice programma.

    Salve, devo fare un programmino java, per voi sicuramente molto semplice:
    il programma riceve un array di esami e deve avere i metodi calcolaminMax, calcolaMedia e calcola Moda (per moda intendo il vodo più frequente).

    Non riesco ad implementare il metodo che calcola la media e la moda.
    Ecco quello che ho fatto fin ora:

    codice:
    import system.*;
    public class Statistiche {
    	public static void main (String[]args){
    		IO.out.print("Inserisci numero di esami sostenuti: ");
    		int numEsami=IO.in.readInt();
    		int [] esami=new int [numEsami];
    		for(int i=0;i<numEsami;i++){
    			IO.out.print("Inserisci l'esame n§ "+(i+1)+" ");
    			esami[i]=IO.in.readInt();
    			if(esami[i]<18||esami[i]>30){
    				IO.out.println("Dato non Corretto");
    				i--;
    			}//fine if
    		}//fine for
    
    		int[] minMax= calcolaminMax (esami);
    		//...richiamo al metodo calcolaMedia
    		//...richiamo al metodo calcolaMOda
    
    		IO.out.println("Il tuo voto minimo e': "+minMax [0]);
    		IO.out.println("Il tuo voto massimo e': "+minMax[1]);
    		//IO.out.println("Il tuo voto più frequente e': "+moda);     stampa della moda
    		//IO.out.println("La tua media e': "+media);                 stampa media
    
    	}//fine main
    
    	public static int[]calcolaminMax (int[]v){
    		int[]minMax={v[0],v[0]};
    		for(int i=0;i<v.length;i++){
    			if (v[i]<minMax[0])
    				minMax[0]=v[i];
    			if (v[i]>minMax[1])
    				minMax[1]=v[i];
    		}//fine for
    		return minMax;
    	}//fine metodo minMax*/
    
    
    }//fine class

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Aiuto semplice programma.

    Originariamente inviato da m3820
    Non riesco ad implementare il metodo che calcola la media e la moda.
    La media è alquanto banale .... sommi tutti i voti e poi dividi per il numero di voti (qui poi devi vedere tu se dare la media come valore intero o floating-point).

    Per la "moda" è meno banale ma si può benissimo fare e ci sono diversi approcci.

    a) Se l'array fosse già ordinato, basterebbe cercare la sequenza di uno stesso voto più lunga.

    b) Se l'array non fosse già ordinato potresti ordinarlo e usare l'approccio a). Se l'array di input non deve essere "toccato", fanne una copia e ordina la copia.

    c) Se l'array non è ordinato e non si vuole ordinarlo, allora si può usare una "map" (es. HashMap). Come chiave c'è il voto (Integer) e come valore c'è un contatore (Integer). Ad ogni voto incrementi (o setti a 1 se non c'era nella map) il contatore associato. Alla fine la "moda" è il voto che ha il contatore più alto.
    E nota: come valori si potrebbero anche usare oggetti di una "tua" classe es. Contatore, che rappresenta un int "mutabile" con un apposito metodo es. incrementa().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Aiuto semplice programma.

    Originariamente inviato da m3820
    Salve, devo fare un programmino java, per voi sicuramente molto semplice:
    il programma riceve un array di esami e deve avere i metodi calcolaminMax, calcolaMedia e calcola Moda (per moda intendo il vodo più frequente).

    Non riesco ad implementare il metodo che calcola la media e la moda.
    Ecco quello che ho fatto fin ora:

    codice:
    import system.*;
    public class Statistiche {
    	public static void main (String[]args){
    		IO.out.print("Inserisci numero di esami sostenuti: ");
    		int numEsami=IO.in.readInt();
    		int [] esami=new int [numEsami];
    		for(int i=0;i<numEsami;i++){
    			IO.out.print("Inserisci l'esame n§ "+(i+1)+" ");
    			esami[i]=IO.in.readInt();
    			if(esami[i]<18||esami[i]>30){
    				IO.out.println("Dato non Corretto");
    				i--;
    			}//fine if
    		}//fine for
    
    		int[] minMax= calcolaminMax (esami);
    		//...richiamo al metodo calcolaMedia
    		//...richiamo al metodo calcolaMOda
    
    		IO.out.println("Il tuo voto minimo e': "+minMax [0]);
    		IO.out.println("Il tuo voto massimo e': "+minMax[1]);
    		//IO.out.println("Il tuo voto più frequente e': "+moda);     stampa della moda
    		//IO.out.println("La tua media e': "+media);                 stampa media
    
    	}//fine main
    
    	public static int[]calcolaminMax (int[]v){
    		int[]minMax={v[0],v[0]};
    		for(int i=0;i<v.length;i++){
    			if (v[i]<minMax[0])
    				minMax[0]=v[i];
    			if (v[i]>minMax[1])
    				minMax[1]=v[i];
    		}//fine for
    		return minMax;
    	}//fine metodo minMax*/
    
    
    }//fine class
    1- Quota il codice che gli amministratori si arrabbiano, leggiti le regole del forum prima di postare roba.

    2- La media sarà la somma degli esami / la somma dei voti quindi è semplice.

    3- per la moda ti crei una HashMap (ovvero un oggetto che è formato da chiave,valore) dove ti salvi tutti i voti che via via ci sono. Es.

    codice:
    //istanzi una mappa key=voto value=numero di occorrenze
    HashMap<Integer,Integer> mappa = new HashMap<Integer,Integer>();
    // poi Quando scorri i voti
    if(mappa.containsKey(voto){
         int num = mappa.get(voto);
         num++;
         mappa.put(voto,num);
    }else{
         mappa.put(voto,1);
    Una volta finiti i voti ti trovi il voto con il maggior numero di occorrenze
    codice:
    int moda=0;
    int occ=0;
    for(int a:mappa.keySet()){
        int num = mappa.get(a);
        if(num>occ) {
          occ=num;
          moda=a;
         }
    }
    Finito ciò hai anche la moda

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319

    Moderazione

    Come espressamente indicato al punto 6 del Regolamento interno, quando si posta del codice esso deve essere indentato e posto all'interno degli appositi tag CODE. Questo per renderlo leggibile.

    Correggo io.


    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
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    26
    Grazie.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    26
    Grazie a tutti per le risposte;
    prima di provare una delle soluzioni che mi avete consigliato, mi farebbe molto piacere se deste un'occhiata a ciò che ho copiato io dalla "lontanissima" lavagna.

    Questo:

    codice:
    import system.*;
    public class Statistiche {
    	public static void main (String[]args){
    		IO.out.print("Inserisci numero di esami sostenuti: ");
    		int numEsami=IO.in.readInt();
    		int [] esami=new int [numEsami];
    		for(int i=0;i<numEsami;i++){
    			IO.out.print("Inserisci l'esame n§ "+(i+1)+" ");
    			esami[i]=IO.in.readInt();
    			if(esami[i]<18||esami[i]>30){
    				IO.out.println("Dato non Corretto");
    				i--;
    			}//fine if
    		}//fine for
    
    		int[] minMax= calcolaminMax (esami);
    		int media=calcolaMedia(esami);
    		int moda=calcolaModa(esami);
    
    		IO.out.println("Il tuo voto minimo e': "+minMax [0]);
    		IO.out.println("Il tuo voto massimo e': "+minMax[1]);
    		IO.out.println("Il tuo voto più frequente e': "+moda);
    		IO.out.println("La tua media e': "+media);
    	}//fine main
    
    	public static int[]calcolaminMax (int[]v){
    		int[]minMax={v[0],v[0]};
    		for(int i=0;i<v.length;i++){
    			if (v[i]<minMax[0])
    				minMax[0]=v[i];
    			if (v[i]>minMax[1])
    				minMax[1]=v[i];
    
    		}//fine for
    		return minMax;
    	}//fine metodo minMax*/
    
    	public static int calcolaMedia(int[]v){
    		int media=(v[0]/2+v[1]/2);
    		return media;
    	}// fine metodo media
    
    	public static int calcolaModa(int [] v){
    		int [] occorrenze = new int[30-18+1];
    		for (int i=0; i<occorrenze.length;i++){
    			occorrenze[i]=0;
    			for (int i=0;i<v.length;i++){
    			occorrenze[v[i]-18]++;
    			int Max=occorrenze[0];
    			if(Max<occorrenze[i]);
    			}
    		}
    
    		occorrenze[v[i]-18]++;
    		int indMax=0;
    		for(int i=1; i< occorrenze.length;i++);
    		if (occorrenze[indMax]<occorrenze[i]);
    		indMax=i;
    
    		return indMax+18;
    	}
    
    
    
    }//fine class
    ci sono passaggi che non capisco e che potrebbero essere degli errori di copiatura.
    Sarei molto felice se riusciste a far funzionare questo programmino.

    Grazie a tutti quelli che ci proveranno.
    Giuseppe Fortino.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da m3820
    mi farebbe molto piacere se deste un'occhiata a ciò che ho copiato io dalla "lontanissima" lavagna.
    Per la media no alt. Perché il metodo usa solo i primi 2 valori?

    Per la moda in effetti esiste anche una ulteriore soluzione che non ho pensato di segnalarti prima. Visto che i voti sono in un range molto limitato, nulla vieta di creare un array di N interi ognuno che fa da "contatore" associato ad un voto. Dal momento che i voti vanno da 18 a 30 compresi, si avranno esattamente 13 contatori, il contatore c[0] per il voto 18, c[1] per il 19, ecc....
    Ed è proprio quello che il metodo calcolaModa che hai postato avrebbe intenzione di fare. Peccato che lo fa male e con "giri" decisamente inutili. Perché per ogni contatore scansiona ogni volta l'intero array dei voti. E comunque fa cose inutili e pure dubbie (causa probabilmente come hai detto della copiatura).

    Non è questione di "correggere" questi due metodi ... no, andrebbero interamente riscritti con un po' di buon senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    26
    Originariamente inviato da m3820
    Grazie a tutti per le risposte;
    prima di provare una delle soluzioni che mi avete consigliato, mi farebbe molto piacere se deste un'occhiata a ciò che ho copiato io dalla "lontanissima" lavagna.

    Questo:

    codice:
    import system.*;
    public class Statistiche {
    	public static void main (String[]args){
    		IO.out.print("Inserisci numero di esami sostenuti: ");
    		int numEsami=IO.in.readInt();
    		int [] esami=new int [numEsami];
    		for(int i=0;i<numEsami;i++){
    			IO.out.print("Inserisci l'esame n§ "+(i+1)+" ");
    			esami[i]=IO.in.readInt();
    			if(esami[i]<18||esami[i]>30){
    				IO.out.println("Dato non Corretto");
    				i--;
    			}//fine if
    		}//fine for
    
    		int[] minMax= calcolaminMax (esami);
    		int media=calcolaMedia(esami);
    		int moda=calcolaModa(esami);
    
    		IO.out.println("Il tuo voto minimo e': "+minMax [0]);
    		IO.out.println("Il tuo voto massimo e': "+minMax[1]);
    		IO.out.println("Il tuo voto più frequente e': "+moda);
    		IO.out.println("La tua media e': "+media);
    	}//fine main
    
    	public static int[]calcolaminMax (int[]v){
    		int[]minMax={v[0],v[0]};
    		for(int i=0;i<v.length;i++){
    			if (v[i]<minMax[0])
    				minMax[0]=v[i];
    			if (v[i]>minMax[1])
    				minMax[1]=v[i];
    
    		}//fine for
    		return minMax;
    	}//fine metodo minMax*/
    
    	public static int calcolaMedia(int[]v){
    		int media=(v[0]/2+v[1]/2);
    		return media;
    	}// fine metodo media
    
    	public static int calcolaModa(int [] v){
    		int [] occorrenze = new int[30-18+1];
    		for (int i=0; i<occorrenze.length;i++){
    			occorrenze[i]=0;
    			for (int i=0;i<v.length;i++){
    			occorrenze[v[i]-18]++;
    			int Max=occorrenze[0];
    			if(Max<occorrenze[i]);
    			}
    		}
    
    		occorrenze[v[i]-18]++;
    		int indMax=0;
    		for(int i=1; i< occorrenze.length;i++);
    		if (occorrenze[indMax]<occorrenze[i]);
    		indMax=i;
    
    		return indMax+18;
    	}
    
    
    
    }//fine class
    ci sono passaggi che non capisco e che potrebbero essere degli errori di copiatura.
    Sarei molto felice se riusciste a far funzionare questo programmino.

    Grazie a tutti quelli che ci proveranno.
    Giuseppe Fortino.
    quando hai qualche minuto libero, saresti così gentile di riscrivere i metodi che ritieni incorreggibili utilizzando più o meno le stesse funzioni di quello che ho postato io?

    Grazie in OGNI caso.

  9. #9
    codice:
    public static int calcolaMedia(int[]v){ 		
    int media=(v[0]/2+v[1]/2); 		
    return media; 	
    }// fine metodo media  	
    public static int calcolaModa(int [] v){ 		
    int [] occorrenze = new int[30-18+1]; 		
    for (int i=0; i<occorrenze.length;i++){ 			
    occorrenze[i]=0; 			
    for (int i=0;i<v.length;i++){ 			
    occorrenze[v[i]-18]++; 			
    int Max=occorrenze[0]; 			
    if(Max<occorrenze[i]); 			
    } 		
    }  		
    occorrenze[v[i]-18]++; 		
    int indMax=0; 		
    for(int i=1; i< occorrenze.length;i++); 		
    if (occorrenze[indMax]<occorrenze[i]); 		
    indMax=i;  		
    return indMax+18; 	
    }
    La media come ha detto andbin è sbagliata.
    Dovrebbe essere una cosa di questo tipo....
    codice:
    public static int calcolaMedia(int[]v){
    int sommaVoti
    for(int i =0; i<v.length;i++){
    sommaVoti+=v[i];
    }		
    int media=sommaVoti/v.length		
    return media; 	
    }
    La Moda è pure sbagliata...

    codice:
    public static int calcolaModa(int [] v){ 		
    int [] occorrenze = new int[30-18+1];
    //inizializzazione delle occorrenze
    for (int i=0; i<occorrenze.length;i++){ 			
       occorrenze[i]=0;
    } 		
    int Max=occorrenze[0];		 			
    for (int i=0;i<v.length;i++){ 			
       occorrenze[v[i]-18]++; 			
       if(Max<occorrenze[v[i]-18]){
          Max=occorrenze[v[i]-18];
        }			
    }		
      				
    int indMax=0; 		
    for(int i=1; i< occorrenze.length;i++){ 		
       if (occorrenze[indMax]<occorrenze[i]){ 		
           indMax=i;
        }
    }  		
    return indMax+18; 	
    }

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    26
    @DonFrignolo

    Grazie 1000 per aver perso del tempo per un mio problema;
    seguendo le indicazioni di andbin ero riuscito, ieri sera a risolvere il problema, comunque il codice per come lo hai scritto tu è molto più semplice immediato e senza passaggi inutili.

    Il tuo è perfetto, ho dovuto solo mettere un paio di ; e inizializzare a 0 la variabile intera sommaVoti;


    GRAZIE a tutti

    Metto il programma completo, può servire a qualcun altro;

    Questo programma riceve un array di voti relativi ad esami sostenuti e ne calcola max, min, media, e voto ricorrente (moda):
    codice:
    import system.*;
    public class Statistiche {
    	public static void main (String[]args){
    		IO.out.print("Inserisci numero di esami sostenuti: ");
    		int numEsami=IO.in.readInt();
    		int [] esami=new int [numEsami];
    		for(int i=0;i<numEsami;i++){
    			IO.out.print("Inserisci l'esame n§ "+(i+1)+" ");
    			esami[i]=IO.in.readInt();
    			if(esami[i]<18||esami[i]>30){
    				IO.out.println("Dato non Corretto");
    				i--;
    			}//fine if
    		}//fine for
    
    		int[] minMax= calcolaminMax (esami);
    		int media=calcolaMedia(esami);
    		int moda=calcolaModa(esami);
    
    		IO.out.println("Il tuo voto minimo e': "+minMax [0]);
    		IO.out.println("Il tuo voto massimo e': "+minMax[1]);
    		IO.out.println("Il tuo voto più frequente e': "+moda);
    		IO.out.println("La tua media e': "+media);
    	}//fine main
    
    	public static int[]calcolaminMax (int[]v){
    		int[]minMax={v[0],v[0]};
    		for(int i=0;i<v.length;i++){
    			if (v[i]<minMax[0])
    				minMax[0]=v[i];
    			if (v[i]>minMax[1])
    				minMax[1]=v[i];
    
    		}//fine for
    		return minMax;
    	}//fine metodo minMax*/
    
    	public static int calcolaMedia(int[]v){
    		int sommaVoti=0;
    		for(int i =0; i<v.length;i++){
    			sommaVoti+=v[i];
    		}
    		int media=sommaVoti/v.length;
    		return media;
    	}//fine metodo calcolaMedia
    
    	public static int calcolaModa(int [] v){
    		int [] occorrenze = new int[30-18+1];
    		for (int i=0; i<occorrenze.length;i++){
    		   occorrenze[i]=0;
    		}
    		int Max=occorrenze[0];
    		for (int i=0;i<v.length;i++){
    		   occorrenze[v[i]-18]++;
    		   if(Max<occorrenze[v[i]-18]){
    		      Max=occorrenze[v[i]-18];
    		  }//fine if
    		}//fine for
    
    	int indMax=0;
    	for(int i=1; i< occorrenze.length;i++){
    	   if (occorrenze[indMax]<occorrenze[i]){
    	       indMax=i;
    	   }//fine if
    	}//fine for
    	return indMax+18;
    	}//fine metodo calcolaModa
    
    }//fine class Statistiche
    EDIT:
    per avere maggiore precisione nel calcolo della media va sostituito nel metodo main int media=calcolaMedia(esami); con float media=calcolaMedia(esami);

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.