SHARE
TWEET

Esame B 19 Luglio

a guest Jul 24th, 2019 112 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top