[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
HDD
WD Cavia black 500 GB + WD Caviar Green 2 TB
RAM
4x2 GB Kingston HyperX
GPU
MSI GTX 560 Ti Hawk
Audio
Integrata COn Surround 7.1
Monitor
22 pollici Samsung Syncmaster SA350
PSU
850 W OCZ 80 Gold
Case
Cooler Master 690 II Pure Black Edition
OS
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
621
118
CPU
Ryzen 7 3700x
Dissipatore
Noctua NH-U12A
Scheda Madre
MSI X570 Gaming Edge WIFI
HDD
Samsung 960 EVO 256gb
RAM
Vengeance DDR4 32GB 3000Mhz
GPU
EVGA RTX 2060 XC Black
Monitor
Samsung U28H750
PSU
Seasonic Focus Gold 650
Case
Phanteks Eclipse P400 Tempered Glass
OS
Windows 11 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.
smile.gif
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili