Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    23

    ritorno indice di un elemento

    ciao a tutti rieccomi di nuovo a invocare aiuto dai più esperti e spero di aver dato un titolo più appropriato questa volta. L'esercizio che mi sta dando qualche problema questa volta ha questo testo : scrivere una funzione che restituisca l'indice della colonna di una matrice di double la cui somma degli elementi ha il valore massimo.

    ecco come l'ho pensato per ogni colonna faccio la somma e la metto in un vettore confronto ogni elemento con il suo successivo e stabilisco il valore massimo e faccio ritornare l'indice. Ho consultato le api questa volta ma non ho trovato un metodo specifico che mi possa aiutare probabilmente devo anche prendere dimestichezza con la consultazione comunque un pezzo di codice l'ho scritto quel che non riesco a fare e far tornare l'indice....

    codice:
    public class Esercizio1 
    {	
    	static int n;
    	static int m;
    	public static int indMax(double matrice[][])
    	{
    		
    		matrice = new double [n][m];
    		double somma[] = new double [m];
    		for (int l=0;l<m-1;l++)
    		{
    				for (int j=0; j<m-1;j++)//indice di colonna
    				 {
    					
    					for(int i=0; i<n-1;i++) //indice di riga
    						somma[l]+= matrice[i][j]; 			
                                       }//fine riempimeto del vettore
    				while(somma[l]>somma[l+1]) //confronto
    					return l;//ovviamente qui mi da errore 
    					
    		 }
    	}
    }

  2. #2
    Allora... innanzitutto non capisco la necessità del matrice = new double [n][m];. Appena entri nel metodo la matrice che viene passata come parametro viene resettata con tutti 0 (valore di default per double). Poi, non sono necessari 3 cicli. Ne bastano 2. Il primo ciclo (diciamo con indice k) scorre le colonne, il secondo (interno al primo), scorre gli elementi delle righe facendone la somma. Terminata la somma di una colonna, salvi il risultato all'indice k del tuo array di somme (l'array di somme ha come lunghezza proprio il numero di colonne). Scorri l'array trovando in che posizione si trova il massimo...

    Altra cosa... i cicli vanno fino a k, non k-1 (c'è il < che già esclude il valore k-esimo)
    Al mio segnale... scatenate l'inferno!

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    23
    grazie per la correzione dei 3 cicli... però mi blocco nello scorrere l'array di somme... cioè io lo scorrevo proprio con il ciclo for che mi dici che non serve...

  4. #4
    Una volta costruito l'array di somme, lo scorri confrontando il valore attuale con una variabile di appoggio nella quale salvi il valore massimo. Se il valore attuale è maggiore di quello salvato, sostituisci il valore e ti salvi in un'altra variabile di appoggio l'indice del valore attuale. Alla fine avrai nella variabile di appoggio dell'indice, l'indice di colonna che il metodo deve ritornare.

    PS: ho risposto solo adesso al tuo messaggio in privato...
    Al mio segnale... scatenate l'inferno!

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    23
    scusa ma sono davvero nel pallone ho fatto come mi hai suggerito tu ma testandolo mi torna il solo il valore di inizializzazione non so se ti ricopio il codice ti dispiacerebbe correggermi?

    codice:
    public static int indMax(double matrice[][])
    	{
    		double somma[] = new double [m];
    		int k=0;
    		int indice=0;
    		int max=0;
    			for (int j=0; j<m-1;j++)
    				 {
    					
    					for(int i=0; i<n-1;i++)
    						somma[k]+= matrice[i][j];
    					
    				 }
    			//for(k=0;k<somma.length;k++)
    			   if (somma[k]>somma[k+1])
    					
    				   		somma[k]=max;
    				   		 k =indice;
    					
    			return indice;
    			}
    	}

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    23
    avrai notato il //for..... era solo una prova e per non cancellarlo nell'eventualità fosse più corretto uso farlo diventare un commento!

  7. #7
    Codice PHP:
    public static int indMax(double matrice[][]){
         
    int maxIndex 0;
         
    int maxValue 0;

         
    int columnNum matrice[0].length;   //il numero di colonne
         
    double[] sumArray = new double[columnNum];

         for(
    int colIndex=0colIndex columnNumcolIndex++){
              for(
    int rowIndex=0rowIndexmatrice.lengthrowIndex++){
                   
    sumArray[colIndex] += matrice[rowIndex][colIndex];
              }
         }


         for(
    int i 0columnNumi++){
              if(
    maxValue sumArray[i]){
                   
    maxIndex i;
                   
    maxValue sumArray[i];
              }
         }

         return 
    maxIndex;



    Non l'ho testato... ma così dovrebbe andare
    Al mio segnale... scatenate l'inferno!

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    23
    si grazie alla fine confrontando accuratamente le variabili che avevo scelto ho visto l'errore.... nel ciclo che riguardava l'array somme sbagliavo la dimensione...... cmq grazie mille sempre io cerco di sbatterci la testa tutto il giorno cercando di arrivare alla soluzione da sola ma è raro che la trovi... uff mi sa che non sono molto portata!

  9. #9
    Originariamente inviato da fefuccia
    si grazie alla fine confrontando accuratamente le variabili che avevo scelto ho visto l'errore.... nel ciclo che riguardava l'array somme sbagliavo la dimensione...... cmq grazie mille sempre io cerco di sbatterci la testa tutto il giorno cercando di arrivare alla soluzione da sola ma è raro che la trovi... uff mi sa che non sono molto portata!
    Tranquilla... si chiama esperienza quella fai. Sei portata, perchè cmq il grosso lo fai da sola
    Al mio segnale... scatenate l'inferno!

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

    Moderazione

    Come indicato nel Regolamento interno (Punto 6), il codice va postato indentato all'interno degli appositi tag CODE.

    Sistemo io i tuoi post. In futuro, usa i tag come indicato.


    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

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.