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

    Aiuto C++

    Scusate, devo fare un programma che calcoli media mediana e moda, ho un problema con quest'ultima, ho fatto la funzione ma mi da sempre 0 come risposta, forse ho fatto qualche cazzata...

    codice:
    int modaf (float *x, int elemN)
    	{
    		int a=0, b=0, max=0, ris= 0, c=0;
    		for (int i = 0; i<elemN; i++)
    		{
    			a = x[i];
    			for( i = 1; i <elemN; i++)
    			{
    				if ( x[i] == a)
    				{
    					b+=1;
    					c=a;
    				}
    			}
    
    			if (b > max)
    			{
    			max = b;
    			ris = c;
    			}
    		}
    
    		return ris;
    
    	}

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

    Moderazione

    Ciao e benvenuto nel forum.
    Ti invito a prendere visione del Regolamento interno, dove puoi trovare tutte le indicazioni sulle regole da rispettare all'apertura di una discussione.

    In particolare:

    1) Il titolo è importante e deve dare un'idea del contenuto della discussione. "Aiuto C++" non dice assolutamente nulla del problema trattato.

    2) Il codice va postato indentato e all'interno degli appositi tag CODE, previsti dal forum, in modo da mantenere indentazione e formattazione. Un esempio d'uso:

    [code]
    codice indentato
    [/code]

    Correggo io questa discussione.


    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

  3. #3

    Re: Aiuto C++

    Originariamente inviato da Fagnese67
    codice:
    int modaf (float *x, int elemN)
    	{
    		int a=0, b=0, max=0, ris= 0, c=0;
    		for (int i = 0; i<elemN; i++)
    		{
    			a = x[i];
    			for( i = 1; i <elemN; i++)
    			{
    				if ( x[i] == a)
    				{
    					b+=1;
    					c=a;
    				}
    			}
    
    			if (b > max)
    			{
    			max = b;
    			ris = c;
    			}
    		}
    
    		return ris;
    
    	}
    assegni ad a il primo elemento (0) dell'array.
    poi nel secondo for dici se l'elemento in posizione 1 e' uguale ad a che contiene l'elemento in posizione 0 fai qualcosa.

    Nessuno dice che l'if si verifichi.

    quindi se l'if non si verifica non si verifica nemmeno il secondo if.
    Quindi ris non cambia e resta zero
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  4. #4

    Re: Re: Aiuto C++

    .
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Quindi non mi continua il ciclo for? continuando a verificare tutti i vari valori dell'array?

    c'è un modo di far funzionare questa soluzione per la moda o devo cambiare totalmente approccio?

    quello che io mi aspettavo :

    -lui prende il primo valore dell'array con il primo ciclo for, se lo scrive nella costante a
    -con il secondo ciclo for va a vedere tutti gli elementi che seguono x[i] , se sono uguali ad a incrementa il valore di b ogni volta che compare.
    -se il valore di b è maggiore di quello registrato il ciclo prima lo sovrascrive, poi continua il primo ciclo for verificando il secondo numero dell'array e così via...

  6. #6
    codice:
    int modaf (float *x , int elemN)
    {
       int freq [100], ris = 0, max=0; 
    
       for (int i=0; i <100 ; i++)
      {
    	  freq [i] = 0;
    
    	  for ( int j = 1; j < elemN; j++)
    	  {
    		  ++freq [(int)x[j]];
    	  }
       }
    
       for (int i = 0; i< 100; i++)
       {
    	   if (freq[i]>max)
    	   {
    		   max = i;
    	   }
       }
       return max;
    }
    Ho abbandonato la precedente impostazione modificandola un po', solo che non riesco a trovare il motivo per cui su max non mi scrive il valore con freq più alta ma semplicemente l'ultimo valore assegnato...

    EDIT

    Scusate, ho trovato da solo lo stupido errore !

  7. #7
    Originariamente inviato da Fagnese67
    codice:
    int modaf (float *x , int elemN)
    {
       int freq [100], ris = 0, max=0; 
    
       for (int i=0; i <100 ; i++)
      {
    	  freq [i] = 0;
    
    	  for ( int j = 1; j < elemN; j++)
    	  {
    		  ++freq [(int)x[j]];
    	  }
       }
    
       for (int i = 0; i< 100; i++)
       {
    	   if (freq[i]>max)
    	   {
    		   max = i;
    	   }
       }
       return max;
    }
    Ho abbandonato la precedente impostazione modificandola un po', solo che non riesco a trovare il motivo per cui su max non mi scrive il valore con freq più alta ma semplicemente l'ultimo valore assegnato...

    EDIT

    Scusate, ho trovato da solo lo stupido errore !
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

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.