Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct list{
  6. char nome[10];
  7. char cognome[10];
  8. int matricola;
  9. char materia[20];
  10. int voto;
  11. struct list* prossimo;
  12. };
  13.  
  14. typedef struct list* ptr;
  15.  
  16. ptr crea(ptr testa, FILE* fp);
  17. void stampa(ptr testa);
  18. ptr elimina(ptr testa);
  19. ptr ordina(ptr testa);
  20. int compara(char c[], char m[]);
  21.  
  22. int main()
  23. {
  24. ptr testa;
  25. FILE* fp;
  26.  
  27. testa = crea(testa, fp);
  28. stampa(testa);
  29. testa = elimina(testa);
  30. printf("\n\n");
  31. stampa(testa);
  32. testa = ordina(testa);
  33. printf("\n\n");
  34. stampa(testa);
  35. }
  36.  
  37. ptr crea(ptr testa, FILE* fp)
  38. {
  39. ptr nodo;
  40.  
  41. fp = fopen("esame.txt", "r");
  42. if(fp == NULL)
  43. {
  44. printf("\nFile non trovato!");
  45. }
  46.  
  47. testa = (ptr)malloc(sizeof(struct list));
  48.  
  49. fscanf(fp, "%s %s %d %s %d", testa->nome, testa->cognome, &testa->matricola, testa->materia, &testa->voto);
  50.  
  51. nodo = testa;
  52.  
  53. while(!feof(fp))
  54. {
  55. nodo->prossimo = (ptr)malloc(sizeof(struct list));
  56. nodo = nodo->prossimo;
  57. fscanf(fp, "%s %s %d %s %d", nodo->nome, nodo->cognome, &nodo->matricola, nodo->materia, &nodo->voto);
  58. }
  59.  
  60. nodo->prossimo = NULL;
  61.  
  62. fclose(fp);
  63.  
  64. return testa;
  65. }
  66.  
  67. void stampa(ptr testa)
  68. {
  69. ptr nodo;
  70.  
  71. nodo = testa;
  72.  
  73. while(nodo->prossimo!=NULL)
  74. {
  75. printf("%s %s %d %s %d\n", nodo->nome, nodo->cognome, nodo->matricola, nodo->materia, nodo->voto);
  76. nodo = nodo->prossimo;
  77. }
  78. }
  79.  
  80. ptr elimina(ptr testa)
  81. {
  82. ptr prec;
  83. ptr nodo;
  84.  
  85. prec = NULL;
  86. nodo = testa;
  87.  
  88. while(nodo->prossimo!=NULL)
  89. {
  90. if(nodo->prossimo->voto < 18)
  91. {
  92. prec = nodo;
  93. nodo = nodo->prossimo;
  94. prec->prossimo = nodo->prossimo;
  95. free(nodo);
  96. nodo = prec;
  97. nodo = nodo->prossimo;
  98. }
  99. else if(prec == NULL && nodo->voto < 16)
  100. {
  101. testa = nodo->prossimo;
  102. free(nodo);
  103. nodo = testa;
  104. }
  105. else
  106. {
  107. nodo = nodo->prossimo;
  108. }
  109. }
  110.  
  111. return testa;
  112. }
  113.  
  114. ptr ordina(ptr testa)
  115. {
  116. ptr i, j;
  117. char nome[10];
  118. char cognome[10];
  119. char materia[20];
  120. int voto;
  121. int matricola;
  122.  
  123. for(i=testa; i!=NULL; i=i->prossimo)
  124. {
  125. for(j=i->prossimo; j!=NULL; j=j->prossimo)
  126. {
  127. if(compara(i->nome, j->nome) == 1 && compara(i->cognome, j->cognome) == 1)
  128. {
  129. strcpy(nome, i->prossimo->nome);
  130. strcpy(cognome, i->prossimo->cognome);
  131. strcpy(materia, i->prossimo->materia);
  132. voto = i->prossimo->voto;
  133. matricola = i->prossimo->matricola;
  134.  
  135. strcpy(i->prossimo->nome, j->nome);
  136. strcpy(i->prossimo->cognome, j->cognome);
  137. strcpy(i->prossimo->materia, j->materia);
  138. i->prossimo->voto = j->voto;
  139. i->prossimo->matricola = j->matricola;
  140.  
  141. strcpy(j->nome, nome);
  142. strcpy(j->cognome, cognome);
  143. strcpy(j->materia, materia);
  144. j->voto = voto;
  145. j->matricola = matricola;
  146. }
  147. }
  148. }
  149.  
  150. return testa;
  151. }
  152.  
  153. int compara(char c[], char m[])
  154. {
  155. int r = 0;
  156. int i = 0;
  157.  
  158. if(c[i] == m[i])
  159. {
  160. while(c[i] == m[i])
  161. {
  162. r = 1;
  163. i++;
  164. }
  165. }
  166. else
  167. {
  168. r = 0;
  169. }
  170.  
  171. return r;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement