Ho un dubbio sui vettori

di il
4 risposte

Ho un dubbio sui vettori

Dunque, mi è quasi tutto chiaro anche di questo metodo, che in pratica rispecchia per certi versi un riassunto degli switch...vediamo un programma:


#include <stdio.h>


#define RISPOSTE 40
#define VALORI 11

main()
{
      int domanda, voto;
      
      int lerisposte[RISPOSTE] = {1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 
      
                                 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10};
                                 
      int frequenza[VALORI] = {0};
      
      domanda = 0;
      
      while(domanda <= RISPOSTE - 1){
                    
           ++frequenza[lerisposte[domanda]];
           
           ++domanda;
           
           }
      
      printf("%s%17s\n", "Voti", "Frequenza");
      
      voto = 1;
      
      while(voto <= VALORI - 1){
                 
           printf("%6d%17d\n", voto,  frequenza[voto]);
           
           ++voto;
           
           }
           
      return 0;
      
      }
il primo dubbio è su questa istruzione: int frequenza[VALORI] = {0};perchè azzerare in pratica l'11 valore?? se deve essere ignorato lo 0...

e poi su questa istruzione: ++frequenza[lerisposte[domanda]]; perchè inserire il valore della variabile contatore, all'interno della frequenza? se già cè il while che tiene il conto delle risposte...

4 Risposte

  • Re: Ho un dubbio sui vettori

    
    int frequenza[VALORI] = {0};
    
    equivale a:
    
    memset(frequenza,0,sizeof(int) * VALORI));
    
    quindi azzerra tutto l'array.
    
    ++frequenza[lerisposte[domanda]] è un po + complicato.
    
    domanda = 0 significa 
    ++frequenza[lerisposte[0]] = ++frequenza[1] essendo lerisposte[0] = 1
    
    domanda = 1 significa 
    ++frequenza[lerisposte[1]] = ++frequenza[2] essendo lerisposte[1] = 2
    
    domanda = 2 significa 
    ++frequenza[lerisposte[2]] = ++frequenza[6] essendo lerisposte[2] = 6
    
    e così via.
    
    Non se così ci capisci di più.
  • Re: Ho un dubbio sui vettori

    Scusa sky ma...non ho idea di cosa sia un memset, e un array...cioè...un attimo, quello che so è che l'identificatore VALORI è una costante simbolica, indi cioè che è definito nel preprocessore viene in fase di compilazione, sostituito dal testo simbolico, indi...interpreto, per quanto dettomi dal libro che, int frequenza[11] = {0} cioè l'elemnto 11 del vettore viene azzerato in modo esplicito, il resto non automatico perchè non mancano le direttive...però mi sfugge il motivo...e dalla spiegazione, non ci sono arrivato...
  • Re: Ho un dubbio sui vettori

    Questa spiegazione te lo dice il tuo debugger. Di prassi se tu non inizializzi le variabili queste tengono valori random e fin quì ci siamo. Questo lo vedi nella schermata di sinistra. Dopo l'istruzione
    
    int frequenza[VALORI] = {0};
    
    TUTTI gli elementi dell'array frequenza (array, vettore chiamalo come ti pare) di dimensione pari a VALORI che è una costante di grandezza 11 vengono azzerrati e non solo l'11 elemento. E questo lo vedi nella schermata di destra. Ecco perche io continuo a dire di inizializzare qualsiasi variabile prima di usarlo.
    prova.jpg
    prova.jpg

  • Re: Ho un dubbio sui vettori

    Si si sky...ora ci sono...ho capito il senso del discorso...in pratica si da in primis un valore base a tutte gli spazi creati, dopodichè, con l'algoritmo ++frequenza[lerisposte...ecc, dato cè una somma, il valore viene cancellato e riscritto...thank's tutto chiaro...
Devi accedere o registrarti per scrivere nel forum
4 risposte