Concetti Chiave
- Il programma elabora una tabella di comuni italiani per generare una tabella di province, ordinando i comuni per sigla di provincia e nome del comune.
- Ogni comune nella tabella include il nome, la sigla della provincia e il numero di abitanti.
- La tabella delle province include la sigla, il numero di comuni e il totale degli abitanti per ogni provincia.
- Il codice legge i dati da un file binario di comuni e scrive i dati delle province in un altro file binario.
- Utilizza strutture dati in C per gestire le informazioni di comuni e province, aggiornando conteggi e abitanti per ogni provincia.
La società STAT effettua elaborazioni statistiche. Recentemente il centro di calcolo della STAT ha elaborato una tabella statistica dei comuni italiani così organizzata:
* la tabella (file binario) contiene l’elenco di tutti i comuni italiani;
* per ogni comune, la tabella contiene:
1. il nome del comune;
2. la sigla della provincia di appartenenza;
3. il numero di abitanti del comune;
* la tabella è ordinata per ordine crescente di sigla delle province e,
nell’ambito della stessa provincia, in base al nome del comune.
Dalla tabella statistica dei comuni la STAT vuole ottenere una tabella (file
binario), detta tabella statistica delle province, così organizzata:
* la tabella deve contenere l’elenco ordinato di tutte le province italiane;
* per ogni provincia, la tabella deve contenere:
1. la sigla della provincia;
2. il numero dei comuni che ne fanno parte;
3. il numero complessivo di abitanti della provincia.
Dopo aver dichiarato le strutture dati, scrivi un pgm C che realizzi quanto sopra descritto, cioè che a partire dalla tabella COMUNI crei la tabella PROVINCE.
struct comune{
char nome[31];
char prov[3];
unsigned int numAbitanti;
};
struct provincia{
char sigla[3];
unsigned short int numComuni;
unsigned int numAbitanti;
};
int main(void)
{
FILE * fpComuni;
FILE * fpProvincie;
comune comun;
provincia prov;
unsigned short int totComuni;
unsigned int totAbitanti;
char ultProv[3];
fpComuni=fopen("comuni.dat","rb");
fpProvincie=fopen("provincie.dat","wb");
fread(&comun,sizeof(comune),1,fpComuni);
totComuni = 0;
totAbitanti = 0;
strcpy(ultProv,comun.prov);
while(!feof(fpComuni))
{
if(!strcmp(comun.prov,ultProv))
{
totComuni++;
totAbitanti+=comun.numAbitanti;
fread(&comun,sizeof(comune),1,fpComuni);
}
else
{
strcpy(prov.sigla,ultProv);
prov.numComuni = totComuni;
prov.numAbitanti = totAbitanti;
fwrite(&prov,sizeof(provincia),1,fpProvincie);
strcpy(ultProv,comun.prov);
totComuni = 0;
totAbitanti = 0;
}
strcpy(prov.sigla,ultProv);
prov.numComuni = totComuni;
prov.numAbitanti = totAbitanti;
fwrite(&prov,sizeof(provincia),1,fpProvincie);
fclose(fpComuni);
fclose(fpProvincie);
return 0;
}