Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include<string.h>
- typedef struct Data{
- int giorno;
- int mese;
- int anno;
- }data;
- typedef struct Azienda_trasporti{
- int codice_tratta;
- char partenza[30];
- char arrivo[30];
- data date;
- float ora_partenza;
- float ora_arrivo;
- int ritardo;
- }azienda_trasporti;
- int ricerca_dicotomica(azienda_trasporti *a, int sx,int dx,char parola[255]);
- int main()
- {
- azienda_trasporti *ptr[5];//cinque: uno per ogni tipo di ordinamento
- int j,i,min;
- int righe;//numero tratte
- int scelta;
- azienda_trasporti tmp;
- FILE *f1;
- FILE *f2;
- f1=fopen("corse.txt","r");
- fscanf(f1,"%d",&righe);
- azienda_trasporti ordinamento1[righe];
- azienda_trasporti ordinamento2[righe];
- azienda_trasporti ordinamento3[righe];
- azienda_trasporti ordinamento4[righe];
- azienda_trasporti ordinamento5[righe];
- azienda_trasporti ordinamento6[righe];
- azienda_trasporti ordinamento7[righe];
- azienda_trasporti tratte [10];
- for(int i=0;i<righe;i++)
- {
- fscanf(f1,"%d",&tratte[i].codice_tratta);
- fscanf(f1,"%s",tratte[i].partenza);
- fscanf(f1,"%s",tratte[i].arrivo);
- fscanf(f1,"%d/%d/%d",&tratte[i].date.giorno,&tratte[i].date.mese,&tratte[i].date.anno);
- fscanf(f1,"%f",&tratte[i].ora_partenza);
- fscanf(f1,"%f",&tratte[i].ora_arrivo);
- fscanf(f1,"%d",&tratte[i].ritardo);
- }
- while(scelta!=0){
- printf("inserisci 1 per stampare tratte disponibili\n");
- printf("inserisci 2 per ordinare le tratte per data\n");//come ordinamento ho utilizzato un selection sort
- printf("inserisci 3 per ordinare le tratte per codice tratta\n");
- printf("inserisci 4 per ordinare le tratte per stazione di partenza\n");
- printf("inserisci 5 per ordinare le tratte per stazione di arrivo\n");
- printf("inserisci 6 per cercare una stazione\n");
- printf("inserisci 0 per uscire\n");
- printf(">>");
- scanf("%d",&scelta);
- switch(scelta)
- {
- case 1:
- {
- int c;
- printf("Inserisci 1 per stamparlo da linea di comando\nInserisci 2 per stamparlo su file\n");
- printf(">>");
- scanf("%d",&c);
- if(c==1)
- {
- for ( i=0;i<righe;i++)
- {
- printf("%d-",tratte[i].codice_tratta);
- printf("%s-->",tratte[i].partenza);
- printf("%s-",tratte[i].arrivo);
- printf("%d/%d/%d--",tratte[i].date.giorno,tratte[i].date.mese,tratte[i].date.anno);
- printf("%f-->",tratte[i].ora_partenza);
- printf("%f\n",tratte[i].ora_arrivo);
- }
- }
- else if(c==2)
- {
- f2=fopen("tratte.txt","w");
- for (int i=0;i<righe;i++)
- {
- fprintf(f2,"%d-",tratte[i].codice_tratta);
- fprintf(f2,"%s-->",tratte[i].partenza);
- fprintf(f2,"%s-",tratte[i].arrivo);
- fprintf(f2,"%d/%d/%d",tratte[i].date.giorno,tratte[i].date.mese,tratte[i].date.anno);
- fprintf(f2,"%s-->",tratte[i].partenza);
- fprintf(f2,"%s\n",tratte[i].arrivo);
- }
- }
- break;
- }
- case 2:
- {
- for (i = 0; i< righe-1; i++ )
- {min=i;
- for (j=i+1; j<righe; j++)
- {
- if ((tratte[j].date.anno)<(tratte[min].date.anno))
- {
- min=j;
- }
- else if(tratte[j].date.anno==tratte[min].date.anno)
- {
- if (tratte[j].date.mese<tratte[min].date.mese)
- {
- min=j;
- }
- else if (tratte[j].date.mese==tratte[min].date.mese)
- {
- if (tratte[j].date.giorno<tratte[min].date.giorno)
- {
- min=j;
- }
- else if (tratte[j].date.giorno==tratte[min].date.giorno)
- {
- if (tratte[j].ora_partenza<tratte[min].ora_partenza)
- {
- min=j;
- }
- }
- }
- }
- }
- tmp = tratte[min];
- tratte[min] = tratte[i];
- tratte[i] = tmp;
- }
- memcpy(ordinamento1,tratte,righe*sizeof(azienda_trasporti) );
- ptr[0]=&ordinamento1;
- break;
- }
- case 3:
- {
- for(i=0; i<righe-1; i++)
- {
- min=i;
- for (j=i+1;j<righe;j++)
- {
- if (tratte[j].codice_tratta<tratte[min].codice_tratta)
- min=j;
- }
- tmp = tratte[min];
- tratte[min] = tratte[i];
- tratte[i] = tmp;
- }
- memcpy(ordinamento2,tratte,righe*sizeof(azienda_trasporti) );
- ptr[1]=&ordinamento2;
- break;
- }
- case 4:
- {
- for(i=0; i<righe-1; i++)
- {
- min=i;
- for (j=i+1;j<righe;j++)
- {
- int k=0;
- while(k!=(strlen(tratte[j].partenza)+1))
- {
- if (tolower(tratte[j].partenza[k])<tolower(tratte[min].partenza[k]))
- {
- min=j;
- break;
- }
- else if(tolower(tratte[j].partenza[k])==tolower(tratte[min].partenza[k]))
- {
- k++;
- }
- else if(tolower(tratte[j].partenza[k])>tolower(tratte[min].partenza[k]))
- {
- break;
- }
- }
- }
- tmp = tratte[min];
- tratte[min] = tratte[i];
- tratte[i] = tmp;
- }
- memcpy(ordinamento3,tratte,righe*sizeof(azienda_trasporti) );
- ptr[2]=&ordinamento3;
- break;
- }
- case 5:
- {
- for(i=0; i<righe-1; i++)
- {
- min=i;
- int k=0;
- for (j=i+1;j<righe;j++)
- {
- while(k!=strlen(tratte[j].arrivo))
- {
- if (tolower(tratte[j].arrivo[k])<tolower(tratte[min].arrivo[k]))
- {
- min=j;
- break;
- }
- else if(tolower(tratte[j].arrivo[k])==tolower(tratte[min].arrivo[k]))
- {
- k++;
- }
- else if(tolower(tratte[j].arrivo[k])>tolower(tratte[min].arrivo[k]))
- {
- break;
- }
- }
- }
- tmp = tratte[min];
- tratte[min] = tratte[i];
- tratte[i] = tmp;
- }
- memcpy(ordinamento4,tratte,righe*sizeof(azienda_trasporti) );
- ptr[3]=&ordinamento4;
- break;
- }
- case 6:
- {
- printf("insersisci stazione di partenza che vuoi cercare\n>>");
- char ricerca[30];
- scanf("%s",ricerca);
- for(int j=0;j<righe;j++)
- {
- if(strstr(tratte[j].partenza,ricerca)!=0)
- {
- printf("%d-",tratte[j].codice_tratta);
- printf("%s-->",tratte[j].partenza);
- printf("%s-",tratte[j].arrivo);
- printf("%d/%d/%d--",tratte[j].date.giorno,tratte[j].date.mese,tratte[j].date.anno);
- printf("%f-->",tratte[j].ora_partenza);
- printf("%f\n",tratte[j].ora_arrivo);
- }
- }
- memcpy(ordinamento5,tratte,righe*sizeof(azienda_trasporti) );
- ptr[4]=&ordinamento5;
- break;
- }
- case 7:
- {
- char c[255];
- int j=0;
- printf("inserisci parola da cercare:\n");
- scanf("%s",c);
- int m=ricerca_dicotomica(&ordinamento3,0,righe,c);
- j=m;
- for(int i=m;i<righe;i++,j--)
- {
- if(ordinamento3[i].partenza[0]==c[0])
- {
- printf("%s",ordinamento3[i].partenza);
- }
- if ((ordinamento3[j].partenza[0]==c[0]))
- {
- printf("%s",ordinamento3[j].partenza);
- }
- if((ordinamento3[i].partenza[0]==c[0])&&(ordinamento3[j].partenza[0]!=c[0]))
- {
- break;
- }
- }
- }
- }
- }
- }
- int ricerca_dicotomica(azienda_trasporti *a, int sx,int dx,char parola[255])
- {
- int m=(dx+sx)/2;
- if(a[m].partenza[0]==parola[0])
- {
- return m;
- }
- else if(a[m].partenza[0]>parola[0])
- {
- ricerca_dicotomica(a, sx,m,parola[255]);
- return m;
- }
- else if(a[m].partenza[0]<parola[0])
- {
- ricerca_dicotomica(a, m+1,dx,parola[255]);
- return m;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement