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, char *hub);
- int *funzioneMesi(struct dati *d,int n);
- void funzioneOrdinaMesi(int *v);
- int main( int argc,char *argv[]){
- int n,E,N,pacchi,i;
- int *v;
- FILE *f;
- struct dati *dati;
- if(argc!=2){
- printf("Linea di comando non corretta \n");
- return 1;
- }
- f=fopen(argv[1],"r");
- if(f==NULL){
- printf("file non trovato\n");
- return 1;
- }
- printf("STAMPA1\n");
- //funzioni lettura e stampa ,richiesta a,b
- dati=letturaFile(f,&n);
- fclose(f);
- printf("STAMPA\n");
- 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, "hub_C");
- //richiesta f
- v = funzioneMesi(dati,n);
- for(i=0;i<12;i++){
- printf("mese:%d\nnumero pacchi:%d\n",i+1,v[i]);
- }
- //richiesta g
- funzioneOrdinaMesi(v);
- printf("vettore ordinato\n");
- for(i=0;i<12;i++){
- printf("mese:%d\nnumero pacchi:%d\n",i+1,v[i]);
- }
- 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\t%d\t%s\t%s",&d1->giorno,&d1->mese,&d1->anno,&d1->pacchi,d1->provenienza,s);
- if(nConv == 6){
- d1->trasportoE=1;
- d1->trasportoN=0;
- }else{
- d1->trasportoE=0;
- d1->trasportoN=1;
- }
- (*n)++;
- if(*n>=size){
- size=2*size;
- d2=realloc(d2,size*sizeof(struct dati));
- }
- printf("CARATTERE: %c VALORE: %d\n", s[0], d1->trasportoE);
- }
- 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;
- e=funzioneTrasportiEccezionali(d,n);
- return n-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,char *hub){
- int i;
- int count=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);
- }
- int *funzioneMesi(struct dati *d,int n){
- int i,j;
- int *v;
- v = malloc(12*sizeof(int));
- for(i=0;i<12;i++){ // inizializzo il vettore a zero
- v[i]=0;
- }
- // 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==j+1){ //j+1 perche' parte da zero e cosi trovo gennaio ecc ecc
- v[j]+=d[i].pacchi;
- }
- }
- }
- return v;
- }
- void funzioneOrdinaMesi(int *v){
- int i,j;
- int s1;
- int s2;
- int temp;
- for(i=0;i<12;i++){
- for(j=0;j<12;j++){
- s1 = v[i];
- s2 = v[j];
- if(s1<s2){
- temp=v[i];
- v[i]=v[j];
- v[j]=temp;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement