[C]Analisi Codice C

C

computer7

Ospite
Mi è stato chiesto di analizzare questo codice...

Codice:
#include <stdio.h>#include <conio.h>


#define SIZE 40
#define DIM 11


int main (void){
/*---------------------------------------------------------
SEZIONE DELLE DICHIARAZIONI E DELL'INIZIALIZZAZIONE
---------------------------------------------------------*/
   int responses[SIZE] = {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 frequency[DIM] = {0,0,0,0,0,0,0,0,0,0,0};
   int i;
   
/*-----------------------------
SEZIONE DELL'ELABORAZIONE
-----------------------------*/
   for (i=0; i<40; i++){
      frequency[responses[i]] = frequency[responses[i]] + 1;
   }//Fine for
   
   printf ("Voto       Frequenza\n");
   
   for (i=1; i<=10; i++){
   printf ("%d \t\t %d\n", i,frequency[i]);
   }//Fine for
   
   getch ();
   return 0;
}//Fine main
Non capisco l' assegnamento nel primo for, il +1 cosa potrebbe indicare?
 

giosch

Utente Attivo
145
3
CPU
Intel I7-2600K
Scheda Madre
MSI P67A GD55
Hard Disk
WD Cavia black 500 GB + WD Caviar Green 2 TB
RAM
4x2 GB Kingston HyperX
Scheda Video
MSI GTX 560 Ti Hawk
Scheda Audio
Integrata COn Surround 7.1
Monitor
22 pollici Samsung Syncmaster SA350
Alimentatore
850 W OCZ 80 Gold
Case
Cooler Master 690 II Pure Black Edition
Sistema Operativo
Windows 7 a 64 bit
direi che aumenta di uno frequency[responses] :asd: cosa c'è da capire?
 
C

computer7

Ospite
Ok,questo è ovvio ma il problema iniziale(quello da cui ho ricavato il codice) dice che frequency è l'array che conta quante volte compare uno stesso numero{1....10} io non capisco perchè usa come indice responses, quando per esempio poteva fare un controllo su frequency con uno switch....:boh:
 

campo23

Utente Attivo
618
117
CPU
i5 7600k
Dissipatore
HR-02 Macho
Scheda Madre
MSI Z270 Gaming M5
Hard Disk
Samsung 960 EVO 256gb
RAM
Vengeance DDR4 16GB 3000Mhz
Scheda Video
EVGA RTX 2060 XC Black
Monitor
Samsung U28H750
Alimentatore
Corsair CX 550M
Case
Phanteks Eclipse P400 Tempered Glass
Sistema Operativo
Windows 10 Professional x64
è il metodo più veloce che c'è per contare quanti elementi uguali ci sono in un array, se response[2]=6 per esempio, frequency[response[2]] sarebbe frequency[6] e quindi aumenta il suo valore di 1

alla fine del ciclo hai nella posizione N di frequency il numero di volte che compare il numero N
 
D

deleted_98961

Ospite
Una piccola aggiunta ciò che dice campo23, che è ovviamente corretto. Bisogna fare molta attenzione ad un codice del genere, qua si fanno assunzioni sui dati che sono memorizzati nell'array responses. Non contando i possibili errori di overbound sugli interi, qui si tine conto che:
min{responses[]}=1
max{responses[]}=10

se per caso il max elemento o min contenuto nel vettore fosse 200 tale codice sarebbe instabile e causerebbe un bel crash del programma dovuto all'accesso ad un indirizzo non locale frequency[200] che non esiste.
Va bene è un esercizio, ma attenzione a comprendere bene ciò che si scrive.
 

Entra

oppure Accedi utilizzando