Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    30

    [c++] Programmazione Oggetti (esame)

    Allora, prima di tutto vi dico che ho molti dubbi sul funzionamento del programma, quindi ho preferito mettergli questo nome (nel topic).
    Spero che ci sia qualche persona così gentile da aiutarmi.

    La traccia è questa:

    codice:
    Con riferimento alla classe lista implementata nel progetto C++ fornito per la prova scritta,
    lo studente provveda ad aggiungere le seguenti funzionalità:
     a)realizzazione di una classe derivata dalla classe lista che implementi una "coda";
     b)definizione del costruttore di assegnazione;
     c)definizione di una funzione membro operator+ della classe lista che riceve un'altra lista
     come argomento e produce una nuova lista accodando gli elementi di tali liste;
     d)definizione di una funzione membro della classe lista che elimini gli
       eventuali doppioni presenti;
    All'avvio del programma era fornito un file con alcune parti già scritte, e bisognava aggingere le parti mancanti.
    Elenco tutto quello che c'era scritto:

    Nel newmain.cpp:

    codice:
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include "LIST-LIB.h"
    
    using namespace std;
    
    int main()
    {
      int x,scelta;
    //Definire qui le strutture dati da usare nel programma
      do
      {
        system("cls");
        puts("\nFunzioni disponibili\n");
        puts("\t 1 - Inserisci elemento\n");
        puts("\t 2 - Elimina elemento\n");
        puts("\t 3 - Trova elemento\n");
        puts("\t 4 - Stampa lista\n");
        puts("\t 5 - Ordina lista\n");
        puts("\t 6 - Esercizio da svolgere nella prova scritta\n");
        puts("\t 7 - Esci\n");
    
      do
        {
           printf("\rScelta = ");
           if(scanf("%d",&scelta)!=1)
           {
              fflush(stdin);
    	      scelta=0;
           }
        } while ( (scelta<1)||(scelta>8) );
    
        if (scelta != 7)
        {
                switch(scelta)
                {
                    case 1:	printf("\nInserisci un elemento: ");
                            if(scanf("%d",&x)!=1)
                            {
                                printf("Valore inserito errato\n");
                                fflush(stdin);
                            }
                            else
                             ;//Effettuare l'inserimento;
    
                            break;
                    case 2:	printf("\nElemento da cancellare: ");
                            if(scanf("%d",&x)!=1)
                            {
                                printf("Valore inserito errato\n");
                                fflush(stdin);
                            }
                            else
                                ;//Effettuare la cancellazione;
    
                            break;
                    case 3:	printf("\nElemento da cercare: ");
                            if(scanf("%d",&x)!=1)
                            {
                                printf("Valore inserito errato\n");
                                fflush(stdin);
                            }
                            else
                                ;//Effettuare la ricerca;
                            break;
    
                    case 4: printf("\nElementi inseriti in lista %d\n");
                                //Effettuare la stampa;
                            break;
    
                    case 5: printf("\nOrdinamento lista %d...\n");
                               //Effettuare l'ordinamento;
                            break;
    
                    case 6: printf("\nFEsercizio d'esame\n");
                            //Inserisci qui le chiamate relative all'esercizio di esame;
                            break;
    
    
                }  // end switch(scelta)
            }  // end if(scelta != 7):
    
      system("pause");
    }while(scelta!=7);
    }

    Nel file LIST-LIB.h:

    codice:
    struct nodo
    {
       int valore;
       nodo *succ;
    };
    
    class lista
    {
      nodo *l;
    
      nodo* insert(nodo *p,int x);
      bool find(nodo *, int);
      nodo* split(nodo *l1);
      nodo* merge(nodo *l1, nodo *l2);
      nodo* mergesort(nodo *list);
    
    public:
      lista(){l=0;}   //Costruttore
      ~lista();       //Distruttore
      void push(int);
      bool cancella(int);
      void stampa();
      bool trova(int);
      void ordina();
    };

    Nel file LIST-LIB.cpp:

    codice:
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include "LIST-LIB.h"
    
    using namespace std;
    
    //Funzione distruzione
    
    lista::~lista()
    {
        nodo *p;
        while (l!=0)
        {
            p=l;
            l=l->succ;
            delete p;
            cout<<'#';
        }
        cout<<endl;
    }
    
    //Funzione di inserimento elemento in lista
    
    void lista::push(int x)
    {
        l=insert(l,x);
    }
    
    /*Inserisce gli elementi in modo disordinato (inserimento in testa)*/
    
    nodo* lista::insert(nodo *p,int x)
    {
        nodo *q;
        cout<<"insert:versione con inserimento in testa"<<endl;
        q=new nodo; //alloca un elemento;il suo indirizzo è q;
        q->valore=x;
        q->succ=p;
        p=q;
        return p;
        }
    
    /*Cancella un elemento dalla lista - restituisce true se l'elemento è stato trovato
     *N.B. non si fanno ipotesi sull'ordinamento della lista*/
    
    bool lista::trova(int x)
    {
        return find(l,x);
    }
    bool lista::find(nodo *lc,int elem)       /*ricorsiva*/
    {
        if(lc==0)
            return false;
        else if (lc->valore==elem)
            return true;
        else
            return find(lc->succ,elem);
    }
    
    /*Orinamento della lista con il metodo merge-short*/
    
    void lista::ordina()
    {
        l=mergesort(l);
    }
    nodo *lista::split(nodo *l1)
    {
        nodo *l2;
        if((l1==0)||(l1->succ==0))
            return NULL;
        l2=l1->succ;
        l1->succ=l2->succ;
        l2->succ=split(l1->succ);
        return l2;
    }
    nodo *lista::merge(nodo *l1,nodo *l2)
    {
        if(l1==NULL)
            return l2;
        if(l2==NULL)
            return l1;
        if(l1->valore <= l2->valore)
        {
        l1-> succ=merge(l1->succ,l2);
        return l2;
    }
    }
    nodo *lista::mergesort(nodo *l1)
    {
        nodo *l2;
        if((l1==0)||(l1->succ=0))
            return l1;
        else
        {l2=split(l1);
         l1=mergesort(l1);
         l2=mergesort(l2);
         return merge(l1,l2);
        }
    }
    Sapreste mettermi in ordine i pezzi, in modo da farli funzionare(dato che ci ho capito ben poco)?
    E un'ultima cosa...... ma il printf e lo scanf si possono usare in C++ , o bisogna cambiare anche quelli(sembrano funzionare ugualmente)?

    Spero che qualcuno mi aiuti ......

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Non si fanno i compiti nel forum... qui si discutono problemi di programmazione: è ovvio che per discuterli bisogna che chi pone il problema conosca gli strumenti che usa.


    Devo chiudere.



    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.