Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // esame 3
- //file3.txt
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- struct dati{
- int giorno;
- int mese;
- int anno;
- int pacchi;
- char provenienza[11];
- int trasportoE;
- int trasportoN;
- };
- struct dati *letturaFile(FILE *f,int *n);
- void stampaStructDati(struct dati *d,int n);
- int funzioneTrasportiEccezionali(struct dati *d,int n);
- int funzioneTrasportiNormali(struct dati *d,int n);
- int funzioneNumeroPacchi(struct dati *d,int n);
- void funzionePacchiHub(struct dati *d,int n);
- void funzioneMesi(struct dati *d,int n);
- int main( int argc,char *argv[]){
- int n,E,N,pacchi;
- FILE *f;
- struct dati *dati;
- if(argc!=3){
- return 1;
- }
- f=fopen(argv[1],"r");
- if(f==NULL){
- printf("file non trovato\n");
- return 1;
- }
- //funzioni lettura e stampa ,richiesta a,b
- dati=letturaFile(f,&n);
- fclose(f);
- stampaStructDati(dati,n);
- // richiesta c
- E=funzioneTrasportiEccezionali(dati,n);
- N=funzioneTrasportiNormali(dati,n);
- printf("Eccezionali:%d\n Normali:%d \n",E,N);
- // richiesta d
- pacchi=funzioneNumeroPacchi(dati,n);
- printf("numero tot pacchi: %d\n",pacchi);
- //richiesta e
- funzionePacchiHub(dati,n);
- //richiesta f
- funzioneMesi(dati,n);
- return 0;
- }
- struct dati *letturaFile(FILE *f,int *n){
- int nConv;
- int size=10;
- char buffer[100];
- char s[2];
- struct dati *d1,*d2;
- *n=0;
- d2=malloc(size*sizeof(struct dati));
- while(fgets(buffer,sizeof(buffer),f)){
- d1=d2+ *n;
- nConv=sscanf(buffer,"%d %d %d %d %s %s",&d1->giorno,&d1->mese,&d1->anno,&d1->pacchi,d1->provenienza,s);
- if(s[0]=='E'){
- d1->trasportoE=1;
- }else{
- d1->trasportoE=0;
- }
- (*n)++;
- if(*n>=size){
- size=2*size;
- d2=realloc(d2,size*sizeof(struct dati));
- }
- }
- d2=realloc(d2,*n*sizeof(struct dati));
- return d2;
- }
- void stampaStructDati(struct dati *d,int n){
- int i;
- for(i=0;i<n;i++){
- printf("%d %d %d %d %s %d %d\n",d[i].giorno,d[i].mese,d[i].anno,d[i].pacchi,d[i].provenienza,d[i].trasportoE,d[i].trasportoN);
- }
- }
- int funzioneTrasportiEccezionali(struct dati *d,int n){
- int i;
- int count=0;
- for(i=0;i<n;i++){
- if(d[i].trasportoE==1){
- count++;
- }
- }
- return count;
- }
- int funzioneTrasportiNormali(struct dati *d,int n){
- int e;
- int count=0;
- e=funzioneTrasportiEccezionali(d,n);
- return count-e;
- }
- int funzioneNumeroPacchi(struct dati *d,int n){
- int i;
- int count=0;
- for(i=0;i<n;i++){
- count+=d[i].pacchi;
- }
- return count;
- }
- void funzionePacchiHub(struct dati *d,int n){
- int i;
- int count=0;
- char hub[11];
- for(i=0;i<11;i++){
- hub[i]=0;
- }
- for(i=0;i<n;i++){
- if(strcmp(d[i].provenienza,hub)==0){
- count+=d[i].pacchi;
- }
- }
- printf("hub pacchi:%s\nnumero pacchi:%d\n",hub,count);
- }
- void funzioneMesi(struct dati *d,int n){
- int i,j;
- int mese;
- int pacchiMese=0;
- int v[12];
- for(i=0;i<12;i++){ // inizializzo il vettore a zero
- v[i]=0;
- }
- for(i=0;i<n;i++){
- mese=d[i].mese;// inserisco i mesi nel vettore
- v[mese-1]++;
- }
- // ciclo per inserire i pacchi nel mese corretto. 2 for uno sulla struct e uno su v
- for(j=0;j<12;j++){
- for(i=0;i<n;i++){
- if(d[i].mese==v[j+1]){
- pacchiMese+=d[i].pacchi;
- }
- }
- }
- printf("mese:%d\nnumero pacchi:%d\n",mese,pacchiMese);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement