nikpez di nikpez
Ominide 738 punti

Popolazione italiana

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.

[code]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;
}[/code]

Registrati via email