Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Francesco Castiglione 19/07/2019
- //Esame B
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct s {
- char info[16];
- struct s *next;
- }nodo;
- typedef struct t {
- nodo *primo;
- nodo *ultimo;
- }coda;
- typedef struct n {
- char nome[16];
- int reparto;
- }tipo_cliente;
- typedef struct m {
- tipo_cliente info2;
- struct m *next2;
- }*lista;
- //Elenco funzioni
- void MakeNullCoda(coda *c);
- void MakeNullLista(lista *L);
- int EmptyList(lista L);
- int EmptyCoda(coda c);
- int menu();
- void InCoda(coda *c, char *cliente);
- void caricamento(coda *c);
- void stampa(coda c);
- void Visita(coda *c);
- char *OutCoda(coda *c);
- void AggiungiInListaOrdinata(lista *L, char *cliente, int r);
- void Estrae(coda *c, lista *L);
- void StampaLista(lista L);
- int *NumeroClientiServiti(lista L);
- int CodaMaggiore(coda *v);
- int main(void) {
- coda reparto[4];
- lista clienti_serviti;
- int i, scelta, *numero_clienti_serviti = (int*)malloc(sizeof(int) * 4);
- int x;
- for (i = 0; i < 4; i++)
- MakeNullCoda(&reparto[i]);
- MakeNullLista(&clienti_serviti);
- do {
- scelta = menu();
- switch (scelta) {
- case 1:
- caricamento(reparto);
- break;
- case 2:
- Estrae(reparto, &clienti_serviti);
- break;
- case 3:
- numero_clienti_serviti = NumeroClientiServiti(clienti_serviti);
- for (i = 0; i < 4; i++) {
- printf("Nel reparto %d sono stati gia' serviti %d clienti.\n", i, numero_clienti_serviti[i]);
- }
- break;
- case 4:
- x = CodaMaggiore(reparto);
- printf("Il reparto con piu' clienti e' il reparto %d.\n", x);
- break;
- case 5:
- Visita(reparto);
- break;
- case 6:
- StampaLista(clienti_serviti);
- break;
- default:
- printf("Operazione non consentita.\n");
- break;
- }
- } while (scelta != -1);
- return EXIT_SUCCESS;
- }
- void MakeNullCoda(coda *c) {
- c->primo = c->ultimo = NULL;
- }
- int EmptyCoda(coda c) {
- return (c.primo == NULL);
- }
- void MakeNullLista(lista *L) {
- *L = NULL;
- }
- int EmptyList(lista L) {
- return(L == NULL);
- }
- int menu() {
- int opzione;
- printf("1) per caricare un nuovo cliente in coda.\n");
- printf("2) per chiamare il cliente successivo.\n");
- printf("3) per visualizzare il numero dei clienti serviti.\n");
- printf("4) per visualizzare il reparto con piu' clienti.\n");
- printf("5) per visualizzare i clienti in coda.\n");
- printf("6) per visualizzare i clienti gia' serviti.\n");
- printf("-1) per terminare il programma.\n");
- scanf("%d", &opzione);
- return opzione;
- }
- void caricamento(coda *c) {
- int rep;
- char cliente[16];
- printf("Inserisci il nome del cliente.\n");
- scanf("%s", cliente);
- printf("Inserisci il reparto: 0 per salumeria, 1 per panetteria, 2 per macelleria, 3 per pescheria.\n");
- scanf("%d", &rep);
- InCoda(&c[rep], cliente);
- }
- void InCoda(coda *c, char *cliente) {
- nodo *aux;
- aux = (nodo*)malloc(sizeof(nodo));
- if (aux == NULL) {
- printf("Errore allocazione memoria.\n");
- return;
- }
- strcpy(aux->info, cliente);
- aux->next = NULL;
- if (EmptyCoda(*c))
- c->primo = c->ultimo = aux;
- else {
- c->ultimo->next = aux;
- c->ultimo = aux;
- }
- }
- void Visita(coda *c) {
- int i;
- for (i = 0; i < 4; i++)
- stampa(c[i]);
- }
- void stampa(coda c) {
- while (!EmptyCoda(c)) {
- printf("%s\n", c.primo->info);
- c.primo = c.primo->next;
- }
- }
- void Estrae(coda *c, lista *L) {
- int rep;
- char cliente[16];
- printf("Inserisci il reparto: 0 per salumeria, 1 per panetteria, 2 per macelleria, 3 per pescheria.\n");
- scanf("%d", &rep);
- strcpy(cliente, OutCoda(&c[rep]));
- AggiungiInListaOrdinata(&(*L), cliente, rep);
- }
- char *OutCoda(coda *c) {
- nodo *aux;
- tipo_cliente cl;
- strcpy(cl.nome, c->primo->info);
- if (!EmptyCoda(*c)) {
- aux = c->primo;
- c->primo = c->primo->next;
- free(aux);
- }
- return cl.nome;
- }
- void AggiungiInListaOrdinata(lista *L, char *cliente, int r) {
- lista paux;
- if (EmptyList(*L)) {
- paux = (lista)malloc(sizeof(nodo));
- if (EmptyList(paux)) {
- printf("Errore allocazione memoria.\n");
- return;
- }
- strcpy(paux->info2.nome, cliente);
- paux->info2.reparto = r;
- paux->next2 = NULL;
- *L = paux;
- }
- else if (strcmp(cliente, (*L)->info2.nome) < 0) {
- paux = (lista)malloc(sizeof(nodo));
- if (EmptyList(paux)) {
- printf("Errore allocazione memoria.\n");
- return;
- }
- strcpy(paux->info2.nome, cliente);
- paux->info2.reparto = r;
- paux->next2 = *L;
- *L = paux;
- }
- else
- AggiungiInListaOrdinata(&(*L)->next2, cliente, r);
- }
- void StampaLista(lista L) {
- while (!EmptyList(L)) {
- printf("%s\n", L->info2.nome);
- L = L->next2;
- }
- }
- int *NumeroClientiServiti(lista L) {
- int *contatore_clienti = (int*)malloc(sizeof(int) * 4);
- int i;
- for (i = 0; i < 4; i++)
- contatore_clienti[i] = 0;
- for (i = 0; i < 4; i++) {
- while (!EmptyList(L)) {
- if (L->info2.reparto == i) {
- contatore_clienti[i]++;
- L = L->next2;
- }
- }
- }
- return contatore_clienti;
- }
- int CodaMaggiore(coda *v) {
- int i, contatore[4], max, p_max;
- for (i = 0; i < 4; i++)
- contatore[i] = 0;
- for (i = 0; i < 4; i++) {
- while (!EmptyCoda(v[i])) {
- contatore[i]++;
- v[i].primo = v[i].primo->next;
- }
- }
- max = contatore[0];
- p_max = 0;
- for (i = 1; i < 4; i++)
- if (contatore[i] > max) {
- max = contatore[i];
- p_max = i;
- }
- return p_max;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement