File.h
codice:
#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
codice:
#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:
stream& operator<<(std:
stream&, 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