Advertisement
Guest User

Esame B 19 Luglio

a guest
Jul 24th, 2019
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.27 KB | None | 0 0
  1. //Francesco Castiglione 19/07/2019
  2. //Esame B
  3.  
  4. #define _CRT_SECURE_NO_WARNINGS
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. typedef struct s {
  10. char info[16];
  11. struct s *next;
  12. }nodo;
  13.  
  14. typedef struct t {
  15. nodo *primo;
  16. nodo *ultimo;
  17. }coda;
  18.  
  19. typedef struct n {
  20. char nome[16];
  21. int reparto;
  22. }tipo_cliente;
  23.  
  24. typedef struct m {
  25. tipo_cliente info2;
  26. struct m *next2;
  27. }*lista;
  28.  
  29. //Elenco funzioni
  30. void MakeNullCoda(coda *c);
  31. void MakeNullLista(lista *L);
  32. int EmptyList(lista L);
  33. int EmptyCoda(coda c);
  34. int menu();
  35. void InCoda(coda *c, char *cliente);
  36. void caricamento(coda *c);
  37. void stampa(coda c);
  38. void Visita(coda *c);
  39. char *OutCoda(coda *c);
  40. void AggiungiInListaOrdinata(lista *L, char *cliente, int r);
  41. void Estrae(coda *c, lista *L);
  42. void StampaLista(lista L);
  43. int *NumeroClientiServiti(lista L);
  44. int CodaMaggiore(coda *v);
  45.  
  46. int main(void) {
  47. coda reparto[4];
  48. lista clienti_serviti;
  49. int i, scelta, *numero_clienti_serviti = (int*)malloc(sizeof(int) * 4);
  50. int x;
  51. for (i = 0; i < 4; i++)
  52. MakeNullCoda(&reparto[i]);
  53. MakeNullLista(&clienti_serviti);
  54. do {
  55. scelta = menu();
  56. switch (scelta) {
  57. case 1:
  58. caricamento(reparto);
  59. break;
  60. case 2:
  61. Estrae(reparto, &clienti_serviti);
  62. break;
  63. case 3:
  64. numero_clienti_serviti = NumeroClientiServiti(clienti_serviti);
  65. for (i = 0; i < 4; i++) {
  66. printf("Nel reparto %d sono stati gia' serviti %d clienti.\n", i, numero_clienti_serviti[i]);
  67. }
  68. break;
  69. case 4:
  70. x = CodaMaggiore(reparto);
  71. printf("Il reparto con piu' clienti e' il reparto %d.\n", x);
  72. break;
  73. case 5:
  74. Visita(reparto);
  75. break;
  76. case 6:
  77. StampaLista(clienti_serviti);
  78. break;
  79. default:
  80. printf("Operazione non consentita.\n");
  81. break;
  82. }
  83. } while (scelta != -1);
  84.  
  85. return EXIT_SUCCESS;
  86. }
  87.  
  88. void MakeNullCoda(coda *c) {
  89. c->primo = c->ultimo = NULL;
  90. }
  91.  
  92. int EmptyCoda(coda c) {
  93. return (c.primo == NULL);
  94. }
  95.  
  96. void MakeNullLista(lista *L) {
  97. *L = NULL;
  98. }
  99.  
  100. int EmptyList(lista L) {
  101. return(L == NULL);
  102. }
  103.  
  104. int menu() {
  105. int opzione;
  106. printf("1) per caricare un nuovo cliente in coda.\n");
  107. printf("2) per chiamare il cliente successivo.\n");
  108. printf("3) per visualizzare il numero dei clienti serviti.\n");
  109. printf("4) per visualizzare il reparto con piu' clienti.\n");
  110. printf("5) per visualizzare i clienti in coda.\n");
  111. printf("6) per visualizzare i clienti gia' serviti.\n");
  112. printf("-1) per terminare il programma.\n");
  113. scanf("%d", &opzione);
  114. return opzione;
  115. }
  116.  
  117. void caricamento(coda *c) {
  118. int rep;
  119. char cliente[16];
  120. printf("Inserisci il nome del cliente.\n");
  121. scanf("%s", cliente);
  122. printf("Inserisci il reparto: 0 per salumeria, 1 per panetteria, 2 per macelleria, 3 per pescheria.\n");
  123. scanf("%d", &rep);
  124. InCoda(&c[rep], cliente);
  125. }
  126.  
  127. void InCoda(coda *c, char *cliente) {
  128. nodo *aux;
  129. aux = (nodo*)malloc(sizeof(nodo));
  130. if (aux == NULL) {
  131. printf("Errore allocazione memoria.\n");
  132. return;
  133. }
  134. strcpy(aux->info, cliente);
  135. aux->next = NULL;
  136. if (EmptyCoda(*c))
  137. c->primo = c->ultimo = aux;
  138.  
  139. else {
  140. c->ultimo->next = aux;
  141. c->ultimo = aux;
  142. }
  143. }
  144.  
  145. void Visita(coda *c) {
  146. int i;
  147. for (i = 0; i < 4; i++)
  148. stampa(c[i]);
  149. }
  150.  
  151. void stampa(coda c) {
  152. while (!EmptyCoda(c)) {
  153. printf("%s\n", c.primo->info);
  154. c.primo = c.primo->next;
  155. }
  156. }
  157.  
  158. void Estrae(coda *c, lista *L) {
  159. int rep;
  160. char cliente[16];
  161. printf("Inserisci il reparto: 0 per salumeria, 1 per panetteria, 2 per macelleria, 3 per pescheria.\n");
  162. scanf("%d", &rep);
  163. strcpy(cliente, OutCoda(&c[rep]));
  164. AggiungiInListaOrdinata(&(*L), cliente, rep);
  165. }
  166.  
  167. char *OutCoda(coda *c) {
  168. nodo *aux;
  169. tipo_cliente cl;
  170. strcpy(cl.nome, c->primo->info);
  171. if (!EmptyCoda(*c)) {
  172. aux = c->primo;
  173. c->primo = c->primo->next;
  174. free(aux);
  175. }
  176. return cl.nome;
  177. }
  178.  
  179. void AggiungiInListaOrdinata(lista *L, char *cliente, int r) {
  180. lista paux;
  181. if (EmptyList(*L)) {
  182. paux = (lista)malloc(sizeof(nodo));
  183. if (EmptyList(paux)) {
  184. printf("Errore allocazione memoria.\n");
  185. return;
  186. }
  187. strcpy(paux->info2.nome, cliente);
  188. paux->info2.reparto = r;
  189. paux->next2 = NULL;
  190. *L = paux;
  191. }
  192. else if (strcmp(cliente, (*L)->info2.nome) < 0) {
  193. paux = (lista)malloc(sizeof(nodo));
  194. if (EmptyList(paux)) {
  195. printf("Errore allocazione memoria.\n");
  196. return;
  197. }
  198. strcpy(paux->info2.nome, cliente);
  199. paux->info2.reparto = r;
  200. paux->next2 = *L;
  201. *L = paux;
  202. }
  203. else
  204. AggiungiInListaOrdinata(&(*L)->next2, cliente, r);
  205. }
  206.  
  207. void StampaLista(lista L) {
  208. while (!EmptyList(L)) {
  209. printf("%s\n", L->info2.nome);
  210. L = L->next2;
  211. }
  212. }
  213. int *NumeroClientiServiti(lista L) {
  214. int *contatore_clienti = (int*)malloc(sizeof(int) * 4);
  215. int i;
  216. for (i = 0; i < 4; i++)
  217. contatore_clienti[i] = 0;
  218. for (i = 0; i < 4; i++) {
  219. while (!EmptyList(L)) {
  220. if (L->info2.reparto == i) {
  221. contatore_clienti[i]++;
  222. L = L->next2;
  223. }
  224. }
  225. }
  226. return contatore_clienti;
  227. }
  228.  
  229. int CodaMaggiore(coda *v) {
  230. int i, contatore[4], max, p_max;
  231. for (i = 0; i < 4; i++)
  232. contatore[i] = 0;
  233. for (i = 0; i < 4; i++) {
  234. while (!EmptyCoda(v[i])) {
  235. contatore[i]++;
  236. v[i].primo = v[i].primo->next;
  237. }
  238. }
  239. max = contatore[0];
  240. p_max = 0;
  241. for (i = 1; i < 4; i++)
  242. if (contatore[i] > max) {
  243. max = contatore[i];
  244. p_max = i;
  245. }
  246. return p_max;
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement