Guest User

Untitled

a guest
Jan 15th, 2020
65
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <cstring>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. struct squadra{
  7. int punteggio;
  8. char nome[31];
  9. squadra*next;
  10. };
  11.  
  12. struct classifica{
  13. squadra*testa;
  14. };
  15.  
  16. void inizializza(classifica&c){
  17. c.testa=0;
  18. }
  19.  
  20. void inserisciordinato(classifica&c, const char* id, int i){
  21. if(id==0||strlen(id)>30) return;
  22. squadra*p=0;
  23. squadra*q;
  24. for(q=c.testa;q!=0 && (q->punteggio)>i;q=q->next){
  25. if(strcmp(q->nome,id)==0) return;
  26. p=q;
  27. }
  28. squadra*r=new squadra;
  29. r->punteggio=i;
  30. r->next=q;
  31. if(q==c.testa)
  32. c.testa=r;
  33. else
  34. p->next=r;
  35. }
  36.  
  37.  
  38.  
  39. void aggiungi(classifica& cla, const char*str){
  40. ifstream in(str);
  41. if(!in)
  42. cerr<<"errore apertura file"<<endl;
  43. char e[30];
  44. while(cin>>e){
  45. if(strlen(e)>30) return;
  46. for(squadra*q=cla.testa;q!=0;q=q->next) {
  47. inserisciordinato(cla, e, 0);
  48. }
  49. }
  50. in.close();
  51. }
  52.  
  53. int elimina(classifica&c, const char*id){
  54. if(id==0||strlen(id)>30) return 0;
  55. squadra*p=0;
  56. squadra*q;
  57. for(q=c.testa;q!=0 && q->nome!=id;q=q->next){
  58. p=q;
  59. }
  60. if(q==0) return 0;
  61. if(q==c.testa)
  62. c.testa=q->next;
  63. else
  64. p->next=q->next;
  65. int punti =q->punteggio;
  66. delete q;
  67. return punti;
  68. }
  69.  
  70. void risultato(classifica&c, const char*sq1, int ris1, const char*sq2, int ris2){
  71. if(c.testa==0|| sq1==0||strlen(sq1)>30|| sq2==0|| strlen(sq2)>30) return;
  72. if(ris1!=0 && ris1!=1 && ris1!=3) return;
  73. if(ris2!=0 && ris2!=1 && ris2!=3) return;
  74. bool trovata1;
  75. for(squadra*q=c.testa;q!=0;q=q->next){
  76. if(strcmp(q->nome, sq1)==0)
  77. trovata1=true;
  78. }
  79. if(!trovata1) return;
  80. bool trovata2;
  81. for(squadra*q=c.testa;q!=0;q=q->next){
  82. if(strcmp(q->nome, sq2)==0)
  83. trovata2=true;
  84. }
  85. if(!trovata2) return;
  86.  
  87. int punti1=elimina(c,sq1);
  88. int punti2=elimina(c, sq2);
  89.  
  90. punti1+=ris1;
  91. punti2+=ris2;
  92. inserisciordinato(c,sq1, punti1);
  93. inserisciordinato(c, sq2, punti2);
  94. }
  95.  
  96. void stampa(classifica c){
  97. cout<<"Classifica:"<<endl;
  98. int i=0;
  99. while(i<3){
  100. for(squadra*q=c.testa;q!=0;q=q->next){
  101. cout<<q->nome<<","<<q->punteggio<<endl;
  102. if(q->punteggio!=(q->next)->punteggio)
  103. i++;
  104. }
  105. }
  106. }
  107.  
  108.  
  109.  
  110. //funzione ausiliaria per frequenza
  111. int frequenzasingola(classifica c, int i){
  112. if(c.testa==0||i<0) return 0;
  113. int conta=0;
  114. for(squadra*q=c.testa;q!=0; q=q->next){
  115. if(q->punteggio==i)
  116. conta++;
  117. }
  118. return conta;
  119. }
  120.  
  121. int frequenza(classifica c){
  122. if(c.testa==0) return 0;
  123. int max=0;
  124. for(squadra*q=c.testa; q!=0;q=q->next){
  125. if(frequenzasingola(c,q->punteggio)>max)
  126. max=q->punteggio;
  127. }
  128. return max;
  129. }
  130.  
  131.  
  132.  
  133. void eliminapunteggio(classifica&c, int i){
  134. if(i<0) return;
  135. squadra*p=0;
  136. squadra*q;
  137. for(q=c.testa;q!=0 && q->punteggio!=i;q=q->next){
  138. p=q;
  139. }
  140. if(q==c.testa)
  141. c.testa=q->next;
  142. else
  143. p->next=q->next;
  144. delete q;
  145. }
  146.  
  147. void cancellaultime(classifica&c){
  148. if(c.testa==0) return;
  149. eliminapunteggio(c, 0);
  150. }
  151.  
  152. int main() {
  153.  
  154. classifica C;
  155. inizializza (C);
  156. stampa (C); // Classifica:
  157. aggiungi(C,"prova2");
  158. stampa (C);
  159. risultato (C, "Benevento", 3, "Entella", 0);
  160. risultato (C, "Entella", 0, "Pisa", 3);
  161. risultato(C, "Pisa", 3, "Benevento", 0);
  162. stampa (C);
  163. cout << frequenza(C) << endl; // 0
  164. cancellaultime(C);
  165. stampa(C);
  166. return 0;
  167. }
RAW Paste Data