Advertisement
Vladpepe

Untitled

Oct 25th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.97 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include "string.h"
  5.  
  6. typedef struct
  7. {
  8.     char nome[30];
  9.     char cognome[30];
  10. }
  11.  
  12. element; /* DEFINIZIONE */
  13. typedef int boolean; /* DEFINIZIONE */
  14.  
  15. typedef struct list_element {
  16.     element value;
  17.     struct list_element *next;
  18. } item;
  19.  
  20. typedef item* list;
  21. boolean isLess(element, element);
  22. boolean isEqual(element, element);
  23. element copy(element e);
  24. element getElement(void);
  25.  
  26. void printElement(element);
  27. /* ---- PRIMITIVE ---- */
  28. list emptylist(void);
  29. boolean empty(list);
  30. element head(list);
  31. list tail(list);
  32. list cons(element, list);
  33. /* ---- NON PRIMITIVE ---- */
  34. void showlist(list);
  35.  
  36. boolean isEqual(element e1, element e2) {
  37.     if (strcmp(e1.cognome, e2.cognome) == 0
  38.         && strcmp(e1.nome, e2.nome) == 0)
  39.         return 1;
  40.     else return 0;
  41. }
  42. boolean isLess(element e1, element e2) {
  43.     if (strcmp(e1.cognome, e2.cognome) < 0 || (strcmp(e1.cognome, e2.cognome) == 0 &&
  44.         strcmp(e1.nome, e2.nome) < 0))
  45.         return 1;
  46.     else return 0;
  47. }
  48.  
  49. element copy(element e){
  50.  element el;
  51.  el=e;
  52. return el;
  53. }
  54.  
  55. element getElement(){
  56.  element el;
  57.  printf("Cognome: ");
  58.  scanf("%s", el.cognome);
  59.  printf("Nome: ");
  60.  scanf("%s", el.nome);
  61.  return el;
  62. }
  63.  
  64. void printElement(element el){
  65.  printf("\nCognome: %s, Nome: %s", el.cognome, el.nome);
  66. }
  67.  
  68. list emptylist() {
  69.  return NULL;
  70.  }
  71.  
  72. boolean empty(list l) {
  73.  return (l==NULL);
  74.  }
  75.  
  76. element head(list l) {
  77.  if (empty(l)) abort();
  78.  else
  79.  return l->value;
  80. }
  81.  
  82. list tail(list l) {
  83.  if (empty(l)) abort();
  84.  else
  85.      return l->next;
  86. }
  87.  
  88. list cons(element e, list l) {
  89.     list t;
  90.     t = (list)malloc(sizeof(item));
  91.     t->value = copy(e);
  92.     t->next = l;
  93.     return t;
  94. }
  95.  
  96. void showlist(list l) {
  97.     printf("Elenco Persone");
  98.     while (!empty(l)) {
  99.         printElement(head(l));
  100.         l = tail(l);
  101.         //if (!empty(l)) printf(", ");
  102.     }
  103.     printf("\n");
  104. }
  105.  
  106. list insord(element e, list l) {
  107.     list t;
  108.     if (empty(l) || !isLess(head(l), e)) {
  109.         t = cons(e, l);
  110.         //t->next = l;
  111.         return t;
  112.     }
  113.     return cons(head(l), insord(e, tail(l)));
  114. }
  115.  
  116. list insord2(element e, list l) {
  117.     list l1 = NULL, root = l;
  118.     list t;
  119.     t = cons(e, l);
  120.     if (empty(l) || !isLess(head(l), e)) {
  121.         return t;
  122.     }
  123.     while (!empty(l) && isLess(head(l), e)) {
  124.         l1 = l;
  125.         l = tail(l);
  126.     }
  127.     l1->next = t;
  128.     t->next = l;
  129.     return root;
  130. }
  131.  
  132. void contaOmonimi(list l) {
  133.     int n = 0;
  134.     element e1;
  135.     if (empty(l)) return;
  136.     do {
  137.         e1 = head(l);
  138.         l = tail(l);
  139.         if (!empty(l) && isEqual(head(l), e1)) {
  140.             n++;
  141.             while (!empty(l) && isEqual(head(l), e1))
  142.                 l = tail(l);
  143.         }
  144.     } while (!empty(l));
  145.     printf("Gli omonimi sono: %d", n);
  146. }
  147.  
  148. void main(void) {
  149.     list l1 = emptylist();
  150.     element el;
  151.     int scelta;
  152.     do {
  153.         printf("\nIntrodurre Persona:\n");
  154.         el = getElement();
  155.         l1 = insord2(el, l1);
  156.         printf("\n 0 per terminare, 1 per continuare:\n");
  157.         scanf("%d", &scelta);
  158.         //getch();
  159.     } while (scelta == 1); /* condiz. arbitraria */
  160.     showlist(l1);
  161.     contaOmonimi(l1);
  162.     getchar();
  163.     getchar();
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement