Ordinamento interno alla classe

di il
18 risposte

Ordinamento interno alla classe

Buongiorno, vi chiedo una mano non riuscendo a risolvere questo problema.. Dovrei inizializzare gli elementi di una Classe Libro avente come attributi titolo, autore e prezzo. Il problema sorge nel momento in cui mi si chiede di visualizzare titolo e autore del libro più costoso. Come posso fare? Grazie per l'attenzione.

18 Risposte

  • Re: Ordinamento interno alla classe

    jo93 ha scritto:


    Il problema sorge nel momento in cui mi si chiede di visualizzare titolo e autore del libro più costoso. Come posso fare? Grazie per l'attenzione.
    Se non sei più preciso su cosa non riesci a fare e non metti il codice, dubito che qualcuno riesca a risolvere il tuo problema.
  • Re: Ordinamento interno alla classe

    Forse hai più oggetti di classe Libro... Chiarisci la domanda perché così non ha neanche tanto senso
  • Re: Ordinamento interno alla classe

    L'esercizio mi chiede di caricare un elenco di libri aventi come attributi titolo, autore e prezzo. Per farlo ho creato una classe
    class libro {
    	
    	string titolo, autore;
    	double prezzo;
    public:
    	void set (string t,string a, double p){
    		titolo=t;
    		autore=a;
    		prezzo=p;
    	}
    	void get(double& p, string& t, string& a) {
    		p=prezzo;
    		t=titolo;
    		a=autore;
    	}
    };
    e un metodo inserimento
    void inserimento()
    {
    	libro s[2];
    	int i=0;
    		string a,t;
    		double p;
    		for(i=0;i<2;i++)
    		{
    			cout<<"Inserire Titolo, Autore e prezzo"<<endl;
    			cin>>t;
    			cin>>a;
    			cin>>p;
    			s[i].set(t,a,p);
    		}
    }
    E fin qui tutto bene. Il secondo passaggio mi chiede di visualizzare titolo e autore del libro avente il prezzo più alto e non saprei proprio come procedere.. Facilmente potrei visualizzare il prezzo più alto, ma come visualizzare allo stesso tempo i restanti attributi titolo e autore riferiti allo stesso oggetto?

    N.B. ho posto la dimensione di "libro s[2]" pari a 2 per prova, ma si intende una dimensione più grande
  • Re: Ordinamento interno alla classe

    Ecco, come vedi all'interno della classe non devi ordinare proprio nulla.

    Hai un insieme di oggetti che potrai esaminare uno per volta alla ricerca di quello che ti interessa, usando la get.
  • Re: Ordinamento interno alla classe

    Ad esempio potrei introdurre un metodo
    void max(libro s[], int n)
    {
    int i=0, max=0,p;
    string a,t;
    for (i=0;i<n;i++)
    {
    s[i].get(p,t,a);
    if(p>=max) max=p;
    }
    cout<<max;
    }
    per visualizzare facilmente il prezzo più alto.
    Il mio inghippo sta nel non capire come fare per visualizzare tutti gli attributi relativi all'oggetto avente prezzo massimo.
    L'unica idea che mi sovviene è quella di ordinare il vettore s[] affinchè il prezzo sia crescente e utilizzare get su s[n], ma mi sembra una soluzione troppo maccchinosa e "pericolosa".
  • Re: Ordinamento interno alla classe

    jo93 ha scritto:


    Ad esempio potrei introdurre un metodo
    void max(libro s[], int n)
    {
    int i=0, max=0,p;
    string a,t;
    for (i=0;i<n;i++)
    {
    s[i].get(p,t,a);
    if(p>=max) max=p;
    }
    cout<<max;
    }
    per visualizzare facilmente il prezzo più alto.
    Il mio inghippo sta nel non capire come fare per visualizzare tutti gli attributi relativi all'oggetto avente prezzo massimo.
    L'unica idea che mi sovviene è quella di ordinare il vettore s[] affinchè il prezzo sia crescente e utilizzare get su s[n], ma mi sembra una soluzione troppo maccchinosa e "pericolosa".
    Basta salvarti oltre che il p massimo anche le variabili a e t associate a quel massimo.
  • Re: Ordinamento interno alla classe

    La soluzione dietro l'angolo, grazie mille!!
  • Re: Ordinamento interno alla classe

    Jo93 ... era scontato per me che nel ciclo prendessi tutti i valori dell'oggetto che aveva il prezzo maggiore ...
  • Re: Ordinamento interno alla classe

    Ho un ultimo problema.. credo di aver passato correttamente l'array al metodo max, ma mi da errore, potete aiutarmi?
    #include <iostream>
    #include <string>
    using namespace std;
    
    class quadro {
    	
    	string titolo, autore;
    	double prezzo;
    public:
    	void set (string t, string a, double p){
    		titolo=t;
    		autore=a;
    		prezzo=p;
    	}
    	void get(double& p, string& t, string& a) {
    		p=prezzo;
    		t=titolo;
    		a=autore;
    	}
    };
    
    void inserimento()
    {
    	quadro s[2];
    	int i=0;
    		string a,t;
    		double p;
    		for(i=0;i<2;i++)
    		{
    			cout<<"Inserire Titolo, Autore e prezzo"<<endl;
    			cin>>t;
    			cin>>a;
    			cin>>p;
    			s[i].set(t,a,p);
    		}
    		max(s,2);
    }
    
    
    void max(quadro s[], int n)
    {
    	
    	string t,a,tmax,amax;
    	int i=0;
    	double p,max=0.00;
    	for (i=0; i<n; i++)
    	{s[i].get(p,t,a); 
    	if (p>=max)
    	{max=p;
    	tmax=t;
    	amax=a;
    	}
    	}
    	cout<<max<<tmax<<amax;
    	cout<<"finito";
    }
    
    	int main(){
    		
    		inserimento ();
    		
    		system("pause");
    		return 0;
    	}
  • Re: Ordinamento interno alla classe

    jo93 ha scritto:


    ho un ultimo problema.. credo di aver passato correttamente l'array al metodo max, ma mi da errore, potete aiutarmi?
    #include <iostream>
    #include <string>
    using namespace std;
    
    class quadro {
    	
    	string titolo, autore;
    	double prezzo;
    public:
    	void set (string t, string a, double p){
    		titolo=t;
    		autore=a;
    		prezzo=p;
    	}
    	void get(double& p, string& t, string& a) {
    		p=prezzo;
    		t=titolo;
    		a=autore;
    	}
    };
    
    void inserimento()
    {
    	quadro s[2];
    	int i=0;
    		string a,t;
    		double p;
    		for(i=0;i<2;i++)
    		{
    			cout<<"Inserire Titolo, Autore e prezzo"<<endl;
    			cin>>t;
    			cin>>a;
    			cin>>p;
    			s[i].set(t,a,p);
    		}
    		max(s,2);
    }
    
    
    void max(quadro s[], int n)
    {
    	
    	string t,a,tmax,amax;
    	int i=0;
    	double p,max=0.00;
    	for (i=0; i<n; i++)
    	{s[i].get(p,t,a); 
    	if (p>=max)
    	{max=p;
    	tmax=t;
    	amax=a;
    	}
    	}
    	cout<<max<<tmax<<amax;
    	cout<<"finito";
    }
    
    	int main(){
    		
    		inserimento ();
    		
    		system("pause");
    		return 0;
    	}
    Dicci l'errore.
  • Re: Ordinamento interno alla classe

    Ecco

    prova generale.cpp(36): error C2780: 'const _Ty &std::max(const _Ty &,const _Ty &,_Pr)' : expects 3 arguments - 2 provided
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility(2086) : see declaration of 'std::max'
    1>prova generale.cpp(36): error C2782: 'const _Ty &std::max(const _Ty &,const _Ty &)' : template parameter '_Ty' is ambiguous
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility(2078) : see declaration of 'std::max'
    1> could be 'int'
    1> or 'quadro [2]'
  • Re: Ordinamento interno alla classe

    Non chiamare la funzione max ma, ad esempio, massimo e mettila prima della inserisci nel sorgente
  • Re: Ordinamento interno alla classe

    Perchè prima? Inserisci "setta" gli oggetti su cui agisce la funzione max no?
  • Re: Ordinamento interno alla classe

    Hai rinominato la max in massimo?
Devi accedere o registrarti per scrivere nel forum
18 risposte