Advertisement
Tilocca

Untitled

Nov 13th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.20 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<string.h>
  4.  
  5.  
  6. typedef struct Data{
  7. int giorno;
  8. int mese;
  9. int anno;
  10. }data;
  11. typedef struct Azienda_trasporti{
  12. int codice_tratta;
  13. char partenza[30];
  14. char arrivo[30];
  15. data date;
  16. float ora_partenza;
  17. float ora_arrivo;
  18. int ritardo;
  19. }azienda_trasporti;
  20. int ricerca_dicotomica(azienda_trasporti *a, int sx,int dx,char parola[255]);
  21.  
  22. int main()
  23. {
  24.  
  25.  
  26.  
  27. azienda_trasporti *ptr[5];//cinque: uno per ogni tipo di ordinamento
  28. int j,i,min;
  29. int righe;//numero tratte
  30. int scelta;
  31. azienda_trasporti tmp;
  32. FILE *f1;
  33. FILE *f2;
  34.  
  35. f1=fopen("corse.txt","r");
  36. fscanf(f1,"%d",&righe);
  37. azienda_trasporti ordinamento1[righe];
  38. azienda_trasporti ordinamento2[righe];
  39. azienda_trasporti ordinamento3[righe];
  40. azienda_trasporti ordinamento4[righe];
  41. azienda_trasporti ordinamento5[righe];
  42. azienda_trasporti ordinamento6[righe];
  43. azienda_trasporti ordinamento7[righe];
  44. azienda_trasporti tratte [10];
  45. for(int i=0;i<righe;i++)
  46. {
  47. fscanf(f1,"%d",&tratte[i].codice_tratta);
  48. fscanf(f1,"%s",tratte[i].partenza);
  49. fscanf(f1,"%s",tratte[i].arrivo);
  50. fscanf(f1,"%d/%d/%d",&tratte[i].date.giorno,&tratte[i].date.mese,&tratte[i].date.anno);
  51. fscanf(f1,"%f",&tratte[i].ora_partenza);
  52. fscanf(f1,"%f",&tratte[i].ora_arrivo);
  53. fscanf(f1,"%d",&tratte[i].ritardo);
  54.  
  55. }
  56.  
  57. while(scelta!=0){
  58. printf("inserisci 1 per stampare tratte disponibili\n");
  59. printf("inserisci 2 per ordinare le tratte per data\n");//come ordinamento ho utilizzato un selection sort
  60. printf("inserisci 3 per ordinare le tratte per codice tratta\n");
  61. printf("inserisci 4 per ordinare le tratte per stazione di partenza\n");
  62. printf("inserisci 5 per ordinare le tratte per stazione di arrivo\n");
  63. printf("inserisci 6 per cercare una stazione\n");
  64. printf("inserisci 0 per uscire\n");
  65. printf(">>");
  66. scanf("%d",&scelta);
  67.  
  68. switch(scelta)
  69. {
  70. case 1:
  71. {
  72. int c;
  73. printf("Inserisci 1 per stamparlo da linea di comando\nInserisci 2 per stamparlo su file\n");
  74. printf(">>");
  75. scanf("%d",&c);
  76. if(c==1)
  77. {
  78. for ( i=0;i<righe;i++)
  79. {
  80. printf("%d-",tratte[i].codice_tratta);
  81. printf("%s-->",tratte[i].partenza);
  82. printf("%s-",tratte[i].arrivo);
  83. printf("%d/%d/%d--",tratte[i].date.giorno,tratte[i].date.mese,tratte[i].date.anno);
  84. printf("%f-->",tratte[i].ora_partenza);
  85. printf("%f\n",tratte[i].ora_arrivo);
  86.  
  87. }
  88. }
  89. else if(c==2)
  90. {
  91. f2=fopen("tratte.txt","w");
  92. for (int i=0;i<righe;i++)
  93. {
  94. fprintf(f2,"%d-",tratte[i].codice_tratta);
  95. fprintf(f2,"%s-->",tratte[i].partenza);
  96. fprintf(f2,"%s-",tratte[i].arrivo);
  97. fprintf(f2,"%d/%d/%d",tratte[i].date.giorno,tratte[i].date.mese,tratte[i].date.anno);
  98. fprintf(f2,"%s-->",tratte[i].partenza);
  99. fprintf(f2,"%s\n",tratte[i].arrivo);
  100. }
  101.  
  102.  
  103. }
  104. break;
  105.  
  106. }
  107. case 2:
  108. {
  109. for (i = 0; i< righe-1; i++ )
  110. {min=i;
  111.  
  112. for (j=i+1; j<righe; j++)
  113. {
  114. if ((tratte[j].date.anno)<(tratte[min].date.anno))
  115. {
  116. min=j;
  117. }
  118.  
  119. else if(tratte[j].date.anno==tratte[min].date.anno)
  120. {
  121. if (tratte[j].date.mese<tratte[min].date.mese)
  122. {
  123. min=j;
  124. }
  125.  
  126. else if (tratte[j].date.mese==tratte[min].date.mese)
  127. {
  128. if (tratte[j].date.giorno<tratte[min].date.giorno)
  129. {
  130. min=j;
  131. }
  132.  
  133. else if (tratte[j].date.giorno==tratte[min].date.giorno)
  134. {
  135. if (tratte[j].ora_partenza<tratte[min].ora_partenza)
  136. {
  137. min=j;
  138. }
  139.  
  140. }
  141.  
  142. }
  143. }
  144. }
  145. tmp = tratte[min];
  146. tratte[min] = tratte[i];
  147. tratte[i] = tmp;
  148. }
  149.  
  150. memcpy(ordinamento1,tratte,righe*sizeof(azienda_trasporti) );
  151.  
  152. ptr[0]=&ordinamento1;
  153.  
  154. break;
  155. }
  156. case 3:
  157. {
  158. for(i=0; i<righe-1; i++)
  159. {
  160. min=i;
  161. for (j=i+1;j<righe;j++)
  162. {
  163. if (tratte[j].codice_tratta<tratte[min].codice_tratta)
  164. min=j;
  165. }
  166. tmp = tratte[min];
  167. tratte[min] = tratte[i];
  168. tratte[i] = tmp;
  169. }
  170. memcpy(ordinamento2,tratte,righe*sizeof(azienda_trasporti) );
  171.  
  172. ptr[1]=&ordinamento2;
  173. break;
  174. }
  175. case 4:
  176. {
  177. for(i=0; i<righe-1; i++)
  178. {
  179. min=i;
  180. for (j=i+1;j<righe;j++)
  181. {
  182. int k=0;
  183.  
  184. while(k!=(strlen(tratte[j].partenza)+1))
  185. {
  186. if (tolower(tratte[j].partenza[k])<tolower(tratte[min].partenza[k]))
  187. {
  188. min=j;
  189. break;
  190. }
  191. else if(tolower(tratte[j].partenza[k])==tolower(tratte[min].partenza[k]))
  192. {
  193. k++;
  194. }
  195. else if(tolower(tratte[j].partenza[k])>tolower(tratte[min].partenza[k]))
  196. {
  197. break;
  198. }
  199.  
  200. }
  201.  
  202.  
  203.  
  204. }
  205. tmp = tratte[min];
  206. tratte[min] = tratte[i];
  207. tratte[i] = tmp;
  208. }
  209. memcpy(ordinamento3,tratte,righe*sizeof(azienda_trasporti) );
  210. ptr[2]=&ordinamento3;
  211. break;
  212. }
  213.  
  214. case 5:
  215. {
  216. for(i=0; i<righe-1; i++)
  217. {
  218. min=i;
  219. int k=0;
  220. for (j=i+1;j<righe;j++)
  221. {
  222. while(k!=strlen(tratte[j].arrivo))
  223. {
  224. if (tolower(tratte[j].arrivo[k])<tolower(tratte[min].arrivo[k]))
  225. {
  226. min=j;
  227. break;
  228. }
  229. else if(tolower(tratte[j].arrivo[k])==tolower(tratte[min].arrivo[k]))
  230. {
  231. k++;
  232. }
  233. else if(tolower(tratte[j].arrivo[k])>tolower(tratte[min].arrivo[k]))
  234. {
  235. break;
  236. }
  237. }
  238.  
  239. }
  240. tmp = tratte[min];
  241. tratte[min] = tratte[i];
  242. tratte[i] = tmp;
  243. }
  244. memcpy(ordinamento4,tratte,righe*sizeof(azienda_trasporti) );
  245.  
  246. ptr[3]=&ordinamento4;
  247. break;
  248.  
  249. }
  250. case 6:
  251. {
  252. printf("insersisci stazione di partenza che vuoi cercare\n>>");
  253. char ricerca[30];
  254. scanf("%s",ricerca);
  255. for(int j=0;j<righe;j++)
  256. {
  257.  
  258. if(strstr(tratte[j].partenza,ricerca)!=0)
  259. {
  260. printf("%d-",tratte[j].codice_tratta);
  261. printf("%s-->",tratte[j].partenza);
  262. printf("%s-",tratte[j].arrivo);
  263. printf("%d/%d/%d--",tratte[j].date.giorno,tratte[j].date.mese,tratte[j].date.anno);
  264. printf("%f-->",tratte[j].ora_partenza);
  265. printf("%f\n",tratte[j].ora_arrivo);
  266. }
  267. }
  268. memcpy(ordinamento5,tratte,righe*sizeof(azienda_trasporti) );
  269. ptr[4]=&ordinamento5;
  270. break;
  271. }
  272. case 7:
  273. {
  274. char c[255];
  275. int j=0;
  276. printf("inserisci parola da cercare:\n");
  277. scanf("%s",c);
  278. int m=ricerca_dicotomica(&ordinamento3,0,righe,c);
  279. j=m;
  280. for(int i=m;i<righe;i++,j--)
  281. {
  282. if(ordinamento3[i].partenza[0]==c[0])
  283. {
  284. printf("%s",ordinamento3[i].partenza);
  285. }
  286. if ((ordinamento3[j].partenza[0]==c[0]))
  287. {
  288. printf("%s",ordinamento3[j].partenza);
  289. }
  290. if((ordinamento3[i].partenza[0]==c[0])&&(ordinamento3[j].partenza[0]!=c[0]))
  291. {
  292. break;
  293. }
  294. }
  295. }
  296.  
  297. }
  298.  
  299.  
  300.  
  301. }
  302.  
  303.  
  304. }
  305. int ricerca_dicotomica(azienda_trasporti *a, int sx,int dx,char parola[255])
  306. {
  307. int m=(dx+sx)/2;
  308. if(a[m].partenza[0]==parola[0])
  309. {
  310. return m;
  311. }
  312. else if(a[m].partenza[0]>parola[0])
  313. {
  314. ricerca_dicotomica(a, sx,m,parola[255]);
  315. return m;
  316. }
  317. else if(a[m].partenza[0]<parola[0])
  318. {
  319. ricerca_dicotomica(a, m+1,dx,parola[255]);
  320. return m;
  321. }
  322.  
  323. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement