Torna indietro   Hardware Upgrade Forum > Software > Programmazione

MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
Wireless 2.4 GHz, Bluetooth 5.4, cancellazione attiva del rumore, design pieghevole e un'autonomia che mette in imbarazzo prodotti che costano il doppio. Le Maestro 500 non eccellono in nulla, ma offrono tutto. E a questo prezzo è difficile chiedere di più
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
Dopo anni di attesa e una lunga fase di sviluppo, Noctua entra nel mercato dei dissipatori a liquido AIO con la nuova serie NL-LC1. Forte dell'esperienza maturata nel raffreddamento ad aria, l'azienda austriaca promette di portare la propria filosofia fatta di qualità costruttiva, attenzione ai dettagli e silenziosità anche in questo segmento. Abbiamo provato il nuovo sistema per scoprire se riesce a distinguersi in un mercato ormai molto competitivo.
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Arrivato sul mercato italiano a fine marzo, la serie Boox Go 10.3 (Gen II) offre Android 15, penna da 4096 livelli e retroilluminazione opzionale (nel modello da noi provato, Lumi, presente). La serie si compone di due tablet ePaper che fanno da e-reader, blocco note digitale e persino browser, tutto a un prezzo che fa dimenticare i prodotti di brand più blasonati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-01-2007, 11:40   #1
aquiral
Member
 
Iscritto dal: Sep 2005
Messaggi: 39
errore compilazione

Salve a tutti, non riesco a capire questi errori di compilazione a cosa siano dovuti:
"Dizionario.h: No such file or directory.
Coda.h: No such file or directory
AlberoBinarioDi Ricerca.h: No such file or directory "

Il programma è questo:

/******************************************************************************\
*
* File: AlberoBinarioDiRicerca.cpp
\******************************************************************************/
#ifndef DIZIONARIO_H
#define DIZIONARIO_H

namespace asd {
/*
Figura 3.1 e Figura 6.1
Il tipo di dato Dizionario.
*/
template<class Elem, class Chiave>
class Dizionario
{
/* dati:
un insieme S di coppie (elem,chiave) */

public: // operazioni
virtual ~Dizionario() {}

// void* insert(Elem& e, Chiave& k);
// void delete_(void*);
// Elem search(Chiave& k) const;
};

} // namespace asd
#endif /* _DIZIONARIO_H */
////////////////////////////////////////////////////////////////////////////
#ifndef CODA_H
#define CODA_H
#include <list>

namespace asd {

/*
Figura 3.7
Il tipo di dato Coda.
*/
template<class Elem>
class Coda
{
private:
std::list<Elem> S;

public:
Coda() {}
~Coda() {};

bool isEmpty() const;
void enqueue(const Elem& e);
Elem dequeue();
Elem first() const;
};

/* PUBLIC */

/*
Restituisce true se S e' vuota, e false altrimenti.
*/
template<class Elem>
bool Coda<Elem>::isEmpty() const
{
return S.empty();
}

/*
Aggiunge e come ultimo elemento di S.
*/
template<class Elem>
void Coda<Elem>::enqueue(const Elem& e)
{
S.push_back(e);
}

/*
Toglie da S il primo elemento e lo restituisce.
*/
template<class Elem>
Elem Coda<Elem>::dequeue()
{
Elem e = S.front();
S.pop_front();
return e;
}

/*
Restituisce il primo elemento di S (senza toglierlo da S).
*/
template<class Elem>
Elem Coda<Elem>::first() const
{
return S.front();
}

} // namespace asd


#endif /* _CODA_H */
//////////////////////////////////////////////////////////////
#ifndef ALBEROBINARIODIRICERCA_H
#define ALBEROBINARIODIRICERCA_H
#include <iostream>
#include "Dizionario.h"
#include "Coda.h"
#include <vector>

namespace asd {

template<class Elem, class Chiave>
class AlberoBinarioDiRicerca;

template<class Elem, class Chiave>
class AlberoAVL;

template<class Elem, class Chiave>
class AlberoSplay;

/*
Nodo di un albero binario di ricerca,
implementato con una rappresentazione collegata basata su puntatori ai figli.
*/
template<class Elem, class Chiave>
class nodo_ricerca
{
protected:
Elem elem;
Chiave chiave;
nodo_ricerca* padre;
nodo_ricerca* figlio_sin;
nodo_ricerca* figlio_des;

public:
nodo_ricerca(Elem elem_ = Elem(), Chiave chiave_ = Chiave(),
nodo_ricerca* padre_ = 0,
nodo_ricerca* figlio_sin_ = 0,
nodo_ricerca* figlio_des_ = 0)
: elem(elem_)
, chiave(chiave_)
, padre(padre_)
, figlio_sin(figlio_sin_)
, figlio_des(figlio_des_)
{}

nodo_ricerca(const nodo_ricerca& n)
: elem(n.elem)
, chiave(n.chiave)
, padre(n.padre)
, figlio_sin(n.figlio_sin)
, figlio_des(n.figlio_des)
{}

~nodo_ricerca()
{}

inline Chiave getChiave() const { return chiave; }
inline Elem getElem() const { return elem; }

friend class AlberoBinarioDiRicerca<Elem, Chiave>;
friend class AlberoAVL<Elem, Chiave>;
friend class AlberoSplay<Elem, Chiave>;
};

/*
Figura 6.3
Realizzazione di un dizionario mediante un albero binario di ricerca,
implementato con una rappresentazione collegata basata su puntatori ai figli.
*/
template<class Elem, class Chiave>
class AlberoBinarioDiRicerca
: public Dizionario<Elem, Chiave>
{
protected: // dati
nodo_ricerca<Elem, Chiave>* radice;
unsigned itemsCount;

public: // operazioni
AlberoBinarioDiRicerca(nodo_ricerca<Elem, Chiave>* radice_ = 0);
AlberoBinarioDiRicerca(const std::vector< std:air<Elem, Chiave> >& vec);
AlberoBinarioDiRicerca(const AlberoBinarioDiRicerca<Elem, Chiave>& t);
~AlberoBinarioDiRicerca();

Elem search(const Chiave& k) const;
nodo_ricerca<Elem, Chiave>* insert(const Elem& e, const Chiave& k);
void delete_(nodo_ricerca<Elem, Chiave>* u);

unsigned getItemsCount() const;
bool isEmpty() const;

void stampa () const;

protected: // procedure interne
nodo_ricerca<Elem, Chiave>* max(nodo_ricerca<Elem, Chiave>* u);
nodo_ricerca<Elem, Chiave>* pred(nodo_ricerca<Elem, Chiave>* u);
void distruggiSottoalbero(nodo_ricerca<Elem, Chiave>* v);

private:
typedef typename std::vector< std:air<Elem, Chiave> >::const_iterator vec_iterator;
};

/* PUBLIC */

/*
Costruttore di default.
*/
template<class Elem, class Chiave>
AlberoBinarioDiRicerca<Elem, Chiave>::AlberoBinarioDiRicerca(nodo_ricerca<Elem, Chiave>* radice_)
: radice(radice_)
, itemsCount(0)
{}

/*
Costruttore per la creazione di un nuovo albero binario di ricerca non vuoto.
*/
template<class Elem, class Chiave>
AlberoBinarioDiRicerca<Elem, Chiave>::AlberoBinarioDiRicerca(const std::vector< std:air<Elem, Chiave> >& vec)
: radice(0)
, itemsCount(0)
{
for (vec_iterator it = vec.begin(); it != vec.end(); ++it) {
insert((*it).first, (*it).second);
}
}

/*
Costruttore di copia.
*/
template<class Elem, class Chiave>
AlberoBinarioDiRicerca<Elem, Chiave>::AlberoBinarioDiRicerca(const AlberoBinarioDiRicerca<Elem, Chiave>& t)
: radice(t)
{}

/*
Distruttore.
*/
template<class Elem, class Chiave>
AlberoBinarioDiRicerca<Elem, Chiave>::~AlberoBinarioDiRicerca()
{
distruggiSottoalbero(radice);
}

/*
Figura 6.4
Ricerca dell'elemento associato a una data chiave.
*/
template<class Elem, class Chiave>
Elem AlberoBinarioDiRicerca<Elem, Chiave>::search(const Chiave& k) const
{
nodo_ricerca<Elem, Chiave>* v = radice;

while (v != 0) {
if (k == v->chiave) return v->elem;
else if (k < v->chiave) v = v->figlio_sin;
else v = v->figlio_des;
}
return 0;
}

/*
Inserimento di un elemento e di una chiave ad esso associata.
Restituisce un puntatore al nodo inserito.
*/
template<class Elem, class Chiave>
nodo_ricerca<Elem, Chiave>* AlberoBinarioDiRicerca<Elem, Chiave>::insert(const Elem& e,
const Chiave& k)
{
/* Passo 1. Cerca il nodo v che diventera' genitore del nuovo nodo. */
nodo_ricerca<Elem, Chiave>* v = radice;
while (v != 0) {
if (k < v->chiave) {
if (v->figlio_sin == 0) break;
v = v->figlio_sin;
}
else /* if (k >= v->chiave) */ {
if (v->figlio_des == 0) break;
v = v->figlio_des;
}
}

/* Passo 2. Crea un nuovo nodo u con elemento e e chiave k
ed appendilo come figlio sinistro o destro di v
rispettando la proprieta' di ricerca. */
nodo_ricerca<Elem, Chiave>* u = new nodo_ricerca<Elem, Chiave>(e, k, v);
if (v == 0) radice = u;
else {
if (k < v->chiave) v->figlio_sin = u;
else /* if (k >= v->chiave) */ v->figlio_des = u;
}

return u;
}

/*
Cancellazione di un elemento dato un nodo.
*/
template<class Elem, class Chiave>
void AlberoBinarioDiRicerca<Elem, Chiave>::delete_(nodo_ricerca<Elem, Chiave>* u)
{
if (u->figlio_sin == 0 && u->figlio_des == 0) { /* u e' una foglia */
if (u->padre) {
if ((u->padre)->figlio_sin == u) (u->padre)->figlio_sin = 0;
else /*if ((u->padre)->figlio_des == u)*/ (u->padre)->figlio_des = 0;
}
delete u;
}
else if (u->figlio_sin == 0 || u->figlio_des == 0) { /* u ha un unico figlio */
nodo_ricerca<Elem, Chiave>* v; /* sia v l'unico figlio di u */
if (u->figlio_sin != 0) v = u->figlio_sin;
else /*if (u->figlio_des != 0)*/ v = u->figlio_des;

nodo_ricerca<Elem, Chiave>* w = u->padre; /* sia w il padre di u */

if (u == radice) radice = v;
else {
v->padre = u->padre;
if (w->figlio_sin == u) w->figlio_sin = v;
else /*if (w->figlio_des == u)*/ w->figlio_des = v;

delete u;
}
}
else { /* u ha due figli */
nodo_ricerca<Elem, Chiave>* v = pred(u); /* sia v il predecessore di u */
u->chiave = v->chiave;
u->elem = v->elem;
if ((v->padre)->figlio_sin == v) (v->padre)->figlio_sin = 0;
else /*if ((v->padre)->figlio_des == v)*/ (v->padre)->figlio_des = 0;
v->padre = 0;

delete v;
}
}

/*
Restituisce il numero di elementi dell'albero binario di ricerca
*/
template<class Elem, class Chiave>
unsigned AlberoBinarioDiRicerca<Elem, Chiave>::getItemsCount() const
{
return itemsCount;
}

/*
Verifica in tempo costante se un albero di ricerca e' vuoto.
*/
template<class Elem, class Chiave>
bool AlberoBinarioDiRicerca<Elem, Chiave>::isEmpty() const
{
return (radice == 0);
}

/*
Stampa l'albero binario di ricerca, effettuando una visita BFS.
*/
template<class Elem, class Chiave>
void AlberoBinarioDiRicerca<Elem, Chiave>::stampa() const
{
nodo_ricerca<Elem, Chiave>* u;

Coda<nodo_ricerca<Elem, Chiave>*> C;
C.enqueue(radice);
while (!C.isEmpty()) {
u = C.dequeue();
if (u != 0) {
std::cout << u->chiave;
if (u->padre) std::cout << "(->" << (u->padre)->chiave << ")";
std::cout << " ";
C.enqueue(u->figlio_sin);
C.enqueue(u->figlio_des);
}
}
}



/* PROTECTED */

template<class Elem, class Chiave>
nodo_ricerca<Elem, Chiave>* AlberoBinarioDiRicerca<Elem, Chiave>::max(nodo_ricerca<Elem, Chiave>* u)
{
nodo_ricerca<Elem, Chiave>* v = u;

while (v->figlio_des != 0) {
v = v->figlio_des;
}

return v;
}


template<class Elem, class Chiave>
nodo_ricerca<Elem, Chiave>* AlberoBinarioDiRicerca<Elem, Chiave>:red(nodo_ricerca<Elem, Chiave>* u)
{
if (u->figlio_sin != 0) {
return max(u->figlio_sin);
}

while (u->padre != 0 && u == (u->padre)->figlio_sin) {
u = u->padre;
}

return u->padre;
}


template<class Elem, class Chiave>
void AlberoBinarioDiRicerca<Elem, Chiave>::distruggiSottoalbero(nodo_ricerca<Elem, Chiave>* v)
{
if (v) {
distruggiSottoalbero(v->figlio_sin);
distruggiSottoalbero(v->figlio_des);
delete v;
}
}

} // namespace asd


#endif /* _ALBEROBINARIODIRICERCA_H */
/////////////////////////////////////////////////////////////////////////


#include <iostream>
#include <vector>

#include "AlberoBinarioDiRicerca.h"

using std::cout;
using std::endl;
using std::vector;

using asd::AlberoBinarioDiRicerca;
using asd::nodo_ricerca;

template<class Elem, class Chiave>
void stampa(nodo_ricerca<Elem, Chiave>* v)
{
cout << v->getChiave() << " ";
}


int main()
{

cout << "\nSto creando l'ALBERO BINARIO DI RICERCA di figura 6.2(a)\n"
<< " \n"
<< " 49 \n"
<< " / \\ \n"
<< " 22 82 \n"
<< " / / \\ \n"
<< " 17 57 88 \n"
<< " \\ \\ \n"
<< " 20 94 \n"
<< " / \n"
<< " 91 \n"
<< " \n";

AlberoBinarioDiRicerca<char*, int> albero;
vector< nodo_ricerca<char*, int>* > v1(6);



/* INSERT */
v1[0] = albero.insert("quarantanove", 49);
v1[1] = albero.insert("ventidue", 22);
v1[2] = albero.insert("ottantadue", 82);
v1[3] = albero.insert("diciassette", 17);
v1[4] = albero.insert("cinquantasette", 57);
v1[5] = albero.insert("ottantotto", 88);
v1[6] = albero.insert("venti", 20);
v1[7] = albero.insert("novantaquattro", 94);
v1[8] = albero.insert("novantuno", 91);



cout << "\nALBERO BINARIO DI RICERCA\n";
cout << "visitaBFS: ";
albero.stampa();
cout << endl;


/* SEARCH */
cout << "\nL'elemento con chiave '57' e': " << albero.search(57) << endl;


/* DELETE */
cout << "\nSto rimuovendo il seguente nodo: (" << v1[2]->getElem() << ", " << v1[2]->getChiave() << ")\n";
albero.delete_( v1[2] );


cout << "\nALBERO BINARIO DI RICERCA\n";
cout << "visitaBFS: ";
albero.stampa();
cout << endl;
cout << " \n"
<< " 49 \n"
<< " / \\ \n"
<< " 22 57 \n"
<< " / \\ \n"
<< " 17 88 \n"
<< " \\ \\ \n"
<< " 20 94 \n"
<< " / \n"
<< " 91 \n"
<< " \n";



cout << endl;
system("PAUSE");
return 0;
}



Un' altra domanda: Se separo le classi AlberoBinarioDi Ricerca, Dizionario e Coda dal main in file separati, quando vado poi a chiedere al compilatore di compilare il file.cpp sembra non trovare i file header (nonostante nel main inserisca gli "include"), cosa sbaglio?

Grazie a presto
aquiral è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Gwynne Shotwell (presidente di SpaceX): ...
ISRO lancerà il primo modulo della stazi...
Lo sfondo animato del tuo PC potrebbe es...
Dopo la RAM, Framework annuncia l'aument...
Google Home Speaker ufficiale: è il prim...
Spotify: i nomi utente stanno per divent...
Il limite vero dei data center AI sono g...
AMD conferma i nuovi Threadripper: Zen 6...
Stop all'ADSL per WindTre: continua la m...
HPE punta sull'IA agentica e dichiara gu...
macOS avvisa quando si incolla un comand...
Everpure ridisegna lo storage per l’IA: ...
NVIDIA RTX Remix 1.5: realizzare remaste...
Come configurare Windows 11 like a pro, ...
Windows 11 cambia finalmente la gestione...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:01.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v