Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.78 KB | None | 0 0
  1. /*
  2.  
  3. Lo Svolgimento corretto dei punti non comporta da solo un voto positivo, è necessario integrare
  4. il codice con dei commenti, soffermandosi soprattutto su:
  5. 1) Presentazione delle funzioni, con spiegazione di cosa sono i parametri in input ed in
  6. output
  7. 2) Spiegazione dell’utilizzo dei puntatori, con cosa sono e a cosa servono gli operatori * e
  8. &. Nel caso di utilizzi particolari dei puntatori spiegarne l’utilizzo.
  9. 3) Spiegazione logica del funzionamento della coda, in particolare inserimento, rimozione e
  10. scorrimento.
  11. */
  12. #include <iostream>
  13. using namespace std;
  14. int contatore=0;
  15.  
  16. struct lista{
  17. int Nprenotazione,eta;
  18. string nome,cognome;
  19. lista* next;
  20. };
  21.  
  22. int menu();
  23. void inserimento(lista** testa, lista** coda);
  24. void rimuovi(lista** testa,lista** coda);
  25. void ricerca(lista* testa,int k);
  26. void ricerca_posizione(lista* testa,int k);
  27. void ordinamento(lista** testa);
  28. void stampa(lista* testa);
  29.  
  30.  
  31. int main(){
  32. int scelta,etaDaCercare,prenotazioneDaCercare;
  33. lista* testa=NULL; //puntatore alla testa
  34. lista* coda=NULL; //puntatore alla coda, entrambi partono da NULL perche non e presente nessun elemento nella coda.
  35. do{
  36. scelta=menu();//ottengo la scelta dell'utente
  37. switch (scelta){
  38. case 1:
  39. inserimento(&testa,&coda);
  40. system("sleep 1");
  41. break;
  42. case 2:
  43. rimuovi(&testa,&coda);
  44. system("sleep 1");
  45. break;
  46. case 3:
  47. cout << "inserire l'eta da ricercare: ";
  48. cin >> etaDaCercare;
  49. ricerca(testa,etaDaCercare);
  50. system("sleep 2");
  51. break;
  52. case 4:
  53. cout << "Inserire la prenotazione da cercare: ";
  54. cin >> prenotazioneDaCercare;
  55. ricerca_posizione(testa, prenotazioneDaCercare);
  56. system("sleep 2");
  57. break;
  58. case 5:
  59. ordinamento(&testa);
  60. cout << "coda ordinata" << endl;
  61. system("sleep 1");
  62. break;
  63. case 6:
  64. system("clear");
  65. cout << "uscita dal programma" << endl;
  66. break;
  67. case 7:
  68. stampa(testa);
  69. system("sleep 2");
  70. }
  71. }while (scelta!=6);
  72. }
  73.  
  74. /*
  75. questa funzione non ha nulla a che vedere con la coda in se, mi serve per stampare a video
  76. un menu a scelta multipla e a prendere in input la scelta dell'utente.
  77. */
  78. int menu(){
  79. int k;
  80. system("clear");
  81. cout << "1. Inserire un elemento" << endl;
  82. cout << "2. Rimuovere un elemento" << endl;
  83. cout << "3. Stampa dei pazienti con un età maggiore rispetto a quella presa in input" << endl;
  84. cout << "4. Verificare il numero di prenotazione" << endl;
  85. cout << "5. Ordinamento dei pazienti " << endl;
  86. cout << "6. Uscita dal programma" << endl;
  87. cout << "7. Stampa di tutti gli elementi" << endl;
  88. cin >> k;
  89. return k;
  90. }
  91.  
  92.  
  93. /*
  94. questa funzione serve per aggungere un nodo alla coda.
  95. i parametri testa e coda vengono passati come per indirizzo, utilizzo infatti due puntatore,
  96. poiche passando &testa passo un puntatore ad un puntatore, ci sarà bisogno due volte dell'operatore di deferenzazione
  97. funzionamento:
  98. alloco dinamicamente lo spazio in memoria tramite "lista *p = new lista;"
  99. prendo in input tutti i valori da aggiungere all'interno dell'elemento e li valorizzo.
  100. faccio un controllo se ci sono degli elementi gia in coda, se non ci sono faccio puntare la testa e la coda
  101. al nodo appena creato e quest'ultimo puntera a null non essendoci altri valori dopo.
  102. nel caso in cui ci fossero elementi il puntatore del nuovo nodo puntera all'elemento a cui punta la testa
  103. e la testa puntera all'elemento appena creato
  104.  
  105. */
  106.  
  107.  
  108. void inserimento(lista** testa, lista** coda){
  109. int nPrenotazione,eta;
  110. string nome,cognome;
  111. lista *p = new lista;
  112. cout << "Inserire l'età del paziente: ";
  113. cin >> eta;
  114. cin.ignore(1000,'\n');
  115. contatore++;
  116. nPrenotazione=contatore;
  117. cout << "Inserire il nome del paziente: ";
  118. getline(cin,nome);
  119. cout << "Inserire il Cognome del paziente: ";
  120. getline(cin,cognome);
  121. p->Nprenotazione=nPrenotazione;
  122. p->eta=eta;
  123. p->cognome=cognome;
  124. p->nome=nome;
  125. if(*testa == NULL && *coda==NULL){
  126. *testa = p;
  127. *coda = p;
  128. p->next=NULL;
  129. }else{
  130. p->next = *testa;
  131. *testa = p;
  132. }
  133. }
  134.  
  135. void rimuovi(lista** testa,lista** coda){
  136. string nome,cognome;
  137. int eta;
  138. if ((*testa)==NULL){
  139. cout << "Nessun paziente in attesa"<<endl;
  140. }else{
  141. lista* p= *testa;
  142. if(p->next==NULL){
  143. eta=p->eta;
  144. nome=p->nome;
  145. cognome=p->cognome;
  146. delete p;
  147. (*testa)=NULL;
  148. (*coda)=NULL;
  149. cout << "ho rimosso il "<<contatore<< " paziente:"<< endl << nome << " " << cognome << " eta: " << eta << endl;
  150. }else{
  151. lista* prec = *testa;
  152. p=p->next;
  153. while (p->next!=NULL){
  154. prec=p;
  155. p=p->next;
  156. }
  157. eta=p->eta;
  158. nome=p->nome;
  159. cognome=p->cognome;
  160. delete p;
  161. prec->next=NULL;
  162. (*coda)=prec;
  163. cout << "ho rimosso il "<<contatore<< " paziente:"<< endl << nome << " " << cognome << " eta: " << eta << endl;
  164. }
  165. contatore--;
  166. }
  167. }
  168.  
  169. void ricerca(lista* testa,int k){
  170. if (testa==NULL){
  171. cout << "Nessun paziente in lista"<< endl;
  172. }else{
  173. cout << "pazienti con un'eta maggiore di " << k << endl;
  174. while (testa!=NULL){
  175. if ((testa->eta)>k){
  176. cout << "paziente n. " << testa->Nprenotazione << ": " << testa->eta << " " << testa->cognome << " " << testa->nome << endl;
  177. }
  178. testa=testa->next;
  179. }
  180. cout << "finito " << endl;
  181. }
  182. }
  183.  
  184.  
  185. void ricerca_posizione(lista* testa,int k){
  186. unsigned int i=1;
  187. if (testa==NULL){
  188. cout << "nessun paziente in coda"<< endl;
  189. }else{
  190. while (testa!=NULL && i!=k){
  191. testa=testa->next;
  192. i++;
  193. }
  194. if (i==k){
  195. cout << "paziente n. " << testa->Nprenotazione << ": " << testa->eta << " " << testa->cognome << " " << testa->nome << endl;
  196. }else{
  197. cout << "prenotazione non trovata" << endl;
  198. }
  199.  
  200.  
  201. }
  202. }
  203.  
  204.  
  205. void ordinamento(lista** testa){
  206. int Itmp;
  207. string Stmp;
  208. int rifare = 1;
  209. lista* l1 = NULL;
  210. lista* l2 = NULL;
  211. while(rifare == 1) {
  212. rifare = 0;
  213. for(l1 = *testa; l1->next != NULL; l1 = l1->next) {
  214. for(l2 = l1->next; l2 != NULL; l2 = l2->next) {
  215. if(l1->eta > l2->eta) {
  216. Itmp = l1->eta;
  217. l1->eta = l2->eta;
  218. l2->eta = Itmp;
  219.  
  220. Itmp = l1->Nprenotazione;
  221. l1->Nprenotazione = l2->Nprenotazione;
  222. l2->Nprenotazione = Itmp;
  223.  
  224. Stmp = l1->nome;
  225. l1->nome = l2->nome;
  226. l2->nome = Stmp;
  227.  
  228. Stmp = l1->cognome;
  229. l1->cognome = l2->cognome;
  230. l2->cognome = Stmp;
  231. rifare = 1;
  232. }
  233. }
  234. }
  235. }
  236. }
  237.  
  238. void stampa(lista* testa){
  239. if (testa==NULL){
  240. cout << "coda vuota" << endl;
  241. }else{
  242. while (testa!=NULL){
  243. cout << testa->Nprenotazione << " " << testa->cognome << " " << testa->nome << " " << testa->eta << endl;
  244. testa=testa->next;
  245. }
  246. }
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement