PDA

Visualizza la versione completa : Classe funzione inserimento


Tuono94
12-02-2014, 11:54
File.h

#include<iostream>

using namespace std;

struct elem {
int valore;
int indice;
elem* pun;
};
class Vettoresparso {
elem* primo;
int dim;

public:

Vettoresparso( int );
void set( const int, const int);

friend ostream& operator << (ostream&, const Vettoresparso&);

/*void visualizzadenso(int );
void reset(int);
Vettoresparso operator *=(int);
~Vettoresparso();*/
};




File.cpp



#include "vettore.h"

/*struct elem {
int valore;
int indice;
elem* pun;
};*/

Vettoresparso::Vettoresparso(int d)
{
dim=d;
primo=NULL;
}

ostream& operator << (ostream& os, const Vettoresparso& s)
{ int conta=0;
elem* p;

for( p=s.primo;p!=NULL;p=p->pun)
{
conta++;
}
os<<"["<<s.dim<<"] ";
p=s.primo;
for( p=s.primo;p!=NULL;p=p->pun)
{
os<<"["<<p->valore<<","<< p->indice<<"]";
}

return os;
}

void Vettoresparso::set(const int v, const int i)
{
elem* p, *r;


if(v==0||i<0)

{return;}
if (primo==NULL)
{
primo=new elem;
primo->indice = i;
primo->valore = v;
p->pun=primo;
}

for( p=primo;p!=NULL;p=p->pun)
{

if (p->indice > i||p->pun==NULL)
{
r=new elem;
r->indice=i;
r->valore=v;
r->pun=p->pun;
p->pun=r;

}
}
return;

}



ho dei problemi con il costruttore, il ompilatore mi dice che:

ettore.cpp: In constructor ‘Vettoresparso::Vettoresparso(int)’:
vettore.cpp:12:2: error: ‘dim’ was not declared in this scope
vettore.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Vettoresparso&)’:
vettore.cpp:24:15: error: ‘const class Vettoresparso’ has no member named ‘dim’

come mai? dim è la dimensione del vettore ma non capisco perchè non possa usarli...potete aiuarmi?

l'esercizio mi chiede di creare queste funzioni
Costruttore di default,
che inizializza un VettoreSparso
Inizialmente s è privo di entrate.
s
di dimensione d.

s.set(v,i);
Operazione che aggiunge l’entrata (v,i) al vettore sparso s. In particolare, l’operazione
deve lasciare s invariato:
nel caso in cui l’indice i sia fuori dall’intervallo ammissibile, oppure
nel caso in cui v sia pari a zero (sarebbe sbagliato aggiungere una entrata a valore
nullo, in quanto la non presenza di una entrata con quello stesso indice indica già che
quell’elemento del vettore vale zero).
Nel caso in cui sia i che v siano validi, l’operazione:
se è già presente una entrata con indice i, si limita ad aggiornarne il campo valore a v;
altrimenti, aggiunge alla lista la nuova entrata (v,i).

cout<<s;
Operatore di uscita per il tipo VettoreSparso. L’uscita ha la seguente forma:
[7]{(-2,1)(4,3)(8,5)}

non vi chiedo la soluzione voglio degli indizi per arrivarci da solo, altrimenti non imparerò mai!
grazie mille :)

oregon
12-02-2014, 15:09
Non ho quell'errore ... controlla come compili?

Tuono94
12-02-2014, 17:43
Non ho quell&#39;errore ... controlla come compili?

davide@etruria-wifi-216-208:~/classevettoresparso$ g++ main.cpp vettore.cpp
vettore.cpp: In function &lsquo;std::ostream& operator<<(std::ostream&, const Vettoresparso&)&rsquo;:
vettore.cpp:13:8: error: &lsquo;elem&rsquo; was not declared in this scope
vettore.cpp:13:14: error: &lsquo;p&rsquo; was not declared in this scope

non ho fatto grossi miglioramenti...

oregon
12-02-2014, 18:22
Ma questi sono altri errori, non sono quelli di prima.

Prima l'errore indicava 'dim' ora 'elem' e 'p' ...

Sei sicuro di non avere cambiato i sorgenti? E poi l'include si chiama File.h o vettore.h ?

Tuono94
12-02-2014, 18:47
si chiama vettore.h...ho scritto file.h perchè pensavo fosse più chiaro! a quanto pare no! ahah :)
comunque non ho cambiato nulla semplicemente nel file dell'operatore << non mi riconosce dim elem e p che però ho scritto nel file vettore.h e che ho incluso nel file vettore.cpp!



ostream& operator << (ostream& os, const Vettoresparso& s)
{ int conta=0;
elem* p;

for( p=s.primo;p!=NULL;p=p->pun)
{
conta++;
}
os<<"["<<s.dim<<"] ";
p=s.primo;
for( p=s.primo;p!=NULL;p=p->pun)
{
os<<"["<<p->valore<<","<< p->indice<<"]";
}

la cosa strana è che nella funzione set utilizzo gli stessi elementi e non mi da errore...

Loading