Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Lo Svolgimento corretto dei punti non comporta da solo un voto positivo, è necessario integrare
- il codice con dei commenti, soffermandosi soprattutto su:
- 1) Presentazione delle funzioni, con spiegazione di cosa sono i parametri in input ed in
- output
- 2) Spiegazione dell’utilizzo dei puntatori, con cosa sono e a cosa servono gli operatori * e
- &. Nel caso di utilizzi particolari dei puntatori spiegarne l’utilizzo.
- 3) Spiegazione logica del funzionamento della coda, in particolare inserimento, rimozione e
- scorrimento.
- */
- #include <iostream>
- using namespace std;
- int contatore=0;
- struct lista{
- int Nprenotazione,eta;
- string nome,cognome;
- lista* next;
- };
- int menu();
- void inserimento(lista** testa, lista** coda);
- void rimuovi(lista** testa,lista** coda);
- void ricerca(lista* testa,int k);
- void ricerca_posizione(lista* testa,int k);
- void ordinamento(lista** testa);
- void stampa(lista* testa);
- int main(){
- int scelta,etaDaCercare,prenotazioneDaCercare;
- lista* testa=NULL; //puntatore alla testa
- lista* coda=NULL; //puntatore alla coda, entrambi partono da NULL perche non e presente nessun elemento nella coda.
- do{
- scelta=menu();//ottengo la scelta dell'utente
- switch (scelta){
- case 1:
- inserimento(&testa,&coda);
- system("sleep 1");
- break;
- case 2:
- rimuovi(&testa,&coda);
- system("sleep 1");
- break;
- case 3:
- cout << "inserire l'eta da ricercare: ";
- cin >> etaDaCercare;
- ricerca(testa,etaDaCercare);
- system("sleep 2");
- break;
- case 4:
- cout << "Inserire la prenotazione da cercare: ";
- cin >> prenotazioneDaCercare;
- ricerca_posizione(testa, prenotazioneDaCercare);
- system("sleep 2");
- break;
- case 5:
- ordinamento(&testa);
- cout << "coda ordinata" << endl;
- system("sleep 1");
- break;
- case 6:
- system("clear");
- cout << "uscita dal programma" << endl;
- break;
- case 7:
- stampa(testa);
- system("sleep 2");
- }
- }while (scelta!=6);
- }
- /*
- questa funzione non ha nulla a che vedere con la coda in se, mi serve per stampare a video
- un menu a scelta multipla e a prendere in input la scelta dell'utente.
- */
- int menu(){
- int k;
- system("clear");
- cout << "1. Inserire un elemento" << endl;
- cout << "2. Rimuovere un elemento" << endl;
- cout << "3. Stampa dei pazienti con un età maggiore rispetto a quella presa in input" << endl;
- cout << "4. Verificare il numero di prenotazione" << endl;
- cout << "5. Ordinamento dei pazienti " << endl;
- cout << "6. Uscita dal programma" << endl;
- cout << "7. Stampa di tutti gli elementi" << endl;
- cin >> k;
- return k;
- }
- /*
- questa funzione serve per aggungere un nodo alla coda.
- i parametri testa e coda vengono passati come per indirizzo, utilizzo infatti due puntatore,
- poiche passando &testa passo un puntatore ad un puntatore, ci sarà bisogno due volte dell'operatore di deferenzazione
- funzionamento:
- alloco dinamicamente lo spazio in memoria tramite "lista *p = new lista;"
- prendo in input tutti i valori da aggiungere all'interno dell'elemento e li valorizzo.
- faccio un controllo se ci sono degli elementi gia in coda, se non ci sono faccio puntare la testa e la coda
- al nodo appena creato e quest'ultimo puntera a null non essendoci altri valori dopo.
- nel caso in cui ci fossero elementi il puntatore del nuovo nodo puntera all'elemento a cui punta la testa
- e la testa puntera all'elemento appena creato
- */
- void inserimento(lista** testa, lista** coda){
- int nPrenotazione,eta;
- string nome,cognome;
- lista *p = new lista;
- cout << "Inserire l'età del paziente: ";
- cin >> eta;
- cin.ignore(1000,'\n');
- contatore++;
- nPrenotazione=contatore;
- cout << "Inserire il nome del paziente: ";
- getline(cin,nome);
- cout << "Inserire il Cognome del paziente: ";
- getline(cin,cognome);
- p->Nprenotazione=nPrenotazione;
- p->eta=eta;
- p->cognome=cognome;
- p->nome=nome;
- if(*testa == NULL && *coda==NULL){
- *testa = p;
- *coda = p;
- p->next=NULL;
- }else{
- p->next = *testa;
- *testa = p;
- }
- }
- void rimuovi(lista** testa,lista** coda){
- string nome,cognome;
- int eta;
- if ((*testa)==NULL){
- cout << "Nessun paziente in attesa"<<endl;
- }else{
- lista* p= *testa;
- if(p->next==NULL){
- eta=p->eta;
- nome=p->nome;
- cognome=p->cognome;
- delete p;
- (*testa)=NULL;
- (*coda)=NULL;
- cout << "ho rimosso il "<<contatore<< " paziente:"<< endl << nome << " " << cognome << " eta: " << eta << endl;
- }else{
- lista* prec = *testa;
- p=p->next;
- while (p->next!=NULL){
- prec=p;
- p=p->next;
- }
- eta=p->eta;
- nome=p->nome;
- cognome=p->cognome;
- delete p;
- prec->next=NULL;
- (*coda)=prec;
- cout << "ho rimosso il "<<contatore<< " paziente:"<< endl << nome << " " << cognome << " eta: " << eta << endl;
- }
- contatore--;
- }
- }
- void ricerca(lista* testa,int k){
- if (testa==NULL){
- cout << "Nessun paziente in lista"<< endl;
- }else{
- cout << "pazienti con un'eta maggiore di " << k << endl;
- while (testa!=NULL){
- if ((testa->eta)>k){
- cout << "paziente n. " << testa->Nprenotazione << ": " << testa->eta << " " << testa->cognome << " " << testa->nome << endl;
- }
- testa=testa->next;
- }
- cout << "finito " << endl;
- }
- }
- void ricerca_posizione(lista* testa,int k){
- unsigned int i=1;
- if (testa==NULL){
- cout << "nessun paziente in coda"<< endl;
- }else{
- while (testa!=NULL && i!=k){
- testa=testa->next;
- i++;
- }
- if (i==k){
- cout << "paziente n. " << testa->Nprenotazione << ": " << testa->eta << " " << testa->cognome << " " << testa->nome << endl;
- }else{
- cout << "prenotazione non trovata" << endl;
- }
- }
- }
- void ordinamento(lista** testa){
- int Itmp;
- string Stmp;
- int rifare = 1;
- lista* l1 = NULL;
- lista* l2 = NULL;
- while(rifare == 1) {
- rifare = 0;
- for(l1 = *testa; l1->next != NULL; l1 = l1->next) {
- for(l2 = l1->next; l2 != NULL; l2 = l2->next) {
- if(l1->eta > l2->eta) {
- Itmp = l1->eta;
- l1->eta = l2->eta;
- l2->eta = Itmp;
- Itmp = l1->Nprenotazione;
- l1->Nprenotazione = l2->Nprenotazione;
- l2->Nprenotazione = Itmp;
- Stmp = l1->nome;
- l1->nome = l2->nome;
- l2->nome = Stmp;
- Stmp = l1->cognome;
- l1->cognome = l2->cognome;
- l2->cognome = Stmp;
- rifare = 1;
- }
- }
- }
- }
- }
- void stampa(lista* testa){
- if (testa==NULL){
- cout << "coda vuota" << endl;
- }else{
- while (testa!=NULL){
- cout << testa->Nprenotazione << " " << testa->cognome << " " << testa->nome << " " << testa->eta << endl;
- testa=testa->next;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement