Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS GeForce RTX 5080 Noctua OC Edition: una custom fenomenale, ma anche enorme
ASUS GeForce RTX 5080 Noctua OC Edition: una custom fenomenale, ma anche enorme
ASUS e Noctua tornano a collaborare con la GeForce RTX 5080 Noctua OC Edition, una scheda pensata per chi cerca potenza estrema e silenziosità assoluta. Il nuovo sistema di raffreddamento, con tre ventole Noctua NF-A12x25 G2 da 120 mm e una camera di vapore maggiorata, promette temperature record e rumorosità quasi impercettibile. Non mancano dual BIOS, materiali di qualità e ampie possibilità di overclock. Ma quanto migliora davvero rispetto alla Founders Edition? Scoprilo nel nostro test completo.
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Il più recente robot per la pulizia domestica di Dreame, modello Aqua10 Ultra Roller, abbina un potente motore di aspirazione della polvere a un sofisticato sistema di lavaggio con rullo integrato. Il tutto governato dalla logica di intelligenza artificiale, per i migliori risultati
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-12-2005, 13:02   #1
leomeya
Senior Member
 
Iscritto dal: Sep 2001
Messaggi: 1302
Aiuto errore albero binario C++!please help me

ciao ragazzi devo fare un albero binario di caratteri, ho riciclato un mio vecchio albero che avevo fatto al corso di c++ pero' è di interi.
ho modificato i campi da interi a caratteri pero' c'e' un piccolo problema i dati in ingresso si fermavano dopo il "." ora invece non si ferma piu' come mai?

Funzionamento albero:
per ogni inserimento si deve specificare una tripletta:
-l'informazione da inserire;
-l'informazione 0 o 1 se è a sinistra o a destra;
-l'informazione del nodo padre

per la radice l'inserimento l'inserimento è a sinistra=0 e il nodo padre è 0.
gli inserimenti terminano con il "."

esempio con gli interi:

5 0 0
2 0 5
7 1 5
10 1 2
-10 1 7.
visita in ordine anticipato 5 2 10 7 -10
visita in ordine differito 10 2 -10 7 5
visita in ordine simmetrico 2 10 5 7 -10

5
/ \
2 7
\ \
10 -10

esempio con i caratteri:
a 0 0
b 0 a
c 1 a
d 1 b
e 1 c.
e aspetta ancora un dato perche' non si ferma piu???


vecchio codice con interi

#include <iostream>

using namespace std;

class btree
{public:
enum side{L, R};
private:
struct elem
{ int inf;
elem* l; elem* r;
};
elem* root;
void deltree(elem* p);
bool ins(elem*p, int s, side sd, int finf);
void va(elem* p);
void vd(elem* p);
void vs(elem* p);
btree(const btree&);
btree& operator=(const btree&);

public:
btree();
~btree();
bool insert(int s, side sd, int finf);
void voa();
void vod();
void vos();
};

void btree::deltree(elem* p)
{ if (p!=0)
{ deltree(p->l); deltree(p->r);
delete p;
}
}

bool btree::insert(int s,side sd=L, int finf=0)
{ if (root==0)
{ root=new elem;
root->r=0; root->l=0; root->inf=s;
return true;
}
return ins(root, s, sd, finf);
}

bool btree::ins(elem*p, int s, side sd, int finf)
{ if (p==0) return false;
if (p->inf==finf)
{ switch (sd)
{ case L:
if (p->l==0)
{ p->l=new elem;
p->l->r=0; p->l->l=0;
p->l->inf=s; return true;
}
return false;
case R:
if (p->r==0)
{ p->r=new elem;
p->r->r=0; p->r->l=0;
p->r->inf=s; return true;
}
return false;
}
}
else if (ins(p->l,s,sd,finf)==true)
return true;
else if (ins(p->r,s,sd,finf)==true)
return true;
return false;
}

void btree::va(elem* p)
{ if (p!=0)
{ cout<<p->inf<<" ";
va(p->l);
va(p->r);
}
}

void btree::vd(elem* p)
{ if (p!=0)
{ vd(p->l);
vd(p->r);
cout<<p->inf<<" ";
}
}

void btree::vs(elem* p)
{ if (p!=0)
{ vs(p->l);
cout<<p->inf<<" ";
vs(p->r);
}
}

btree::btree()
{ root=0;}
btree::~btree()
{ deltree(root);}
void btree::voa()
{ va(root);}
void btree::vod()
{ vd(root);}
void btree::vos()
{ vs(root);}

int main()
{
int n1,n2,n3,stop;
char cc;
btree::side ss;
btree tt;
while (cin>>n1)
{ cin>>n2>>n3;
ss=(btree::side) n2;
if (tt.insert(n1,ss,n3))
cout<<"Inserimento effettuato\n";
else cout<<"Informazione "<< n3 << " non esistente \n" << " oppure lato occupato\n";
}
cin.clear(); cin>>cc;
if (cc!='.')
{ cout<<"Errore nei dati di ingresso\n";
return 1;
}
cout<<"Visita in ordine anticipato:\n";
tt.voa(); cout<< '\n';
cout<<"Visita in ordine differito:\n";
tt.vod(); cout<< '\n';
cout<<"Visita in ordine simmetrico:\n";
tt.vos(); cout<< '\n';
cin>>stop;
return 0;
}

--------------------------------------
nuovo codice con caratteri


#include <iostream>

using namespace std;

class btree
{public:
enum side{L, R};
private:
struct elem
{ char inf;
elem* l; elem* r;
};
elem* root;
void deltree(elem* p);
bool ins(elem*p, char s, side sd, char finf);
void va(elem* p);
void vd(elem* p);
void vs(elem* p);
btree(const btree&);
btree& operator=(const btree&);

public:
btree();
~btree();
bool insert(char s, side sd, char finf);
void voa();
void vod();
void vos();
};

void btree::deltree(elem* p)
{ if (p!=0)
{ deltree(p->l); deltree(p->r);
delete p;
}
}

bool btree::insert(char s,side sd=L, char finf=0)
{ if (root==0)
{ root=new elem;
root->r=0; root->l=0; root->inf=s;
return true;
}
return ins(root, s, sd, finf);
}

bool btree::ins(elem*p, char s, side sd, char finf)
{ if (p==0) return false;
if (p->inf==finf)
{ switch (sd)
{ case L:
if (p->l==0)
{ p->l=new elem;
p->l->r=0; p->l->l=0;
p->l->inf=s; return true;
}
return false;
case R:
if (p->r==0)
{ p->r=new elem;
p->r->r=0; p->r->l=0;
p->r->inf=s; return true;
}
return false;
}
}
else if (ins(p->l,s,sd,finf)==true)
return true;
else if (ins(p->r,s,sd,finf)==true)
return true;
return false;
}

void btree::va(elem* p)
{ if (p!=0)
{ cout<<p->inf<<" ";
va(p->l);
va(p->r);
}
}

void btree::vd(elem* p)
{ if (p!=0)
{ vd(p->l);
vd(p->r);
cout<<p->inf<<" ";
}
}

void btree::vs(elem* p)
{ if (p!=0)
{ vs(p->l);
cout<<p->inf<<" ";
vs(p->r);
}
}

btree::btree()
{ root=0;}
btree::~btree()
{ deltree(root);}
void btree::voa()
{ va(root);}
void btree::vod()
{ vd(root);}
void btree::vos()
{ vs(root);}

int main()
{
char n1,n3,stop;
int n2;
char cc;
btree::side ss;
btree tt;
while (cin>>n1)
{ cin>>n2>>n3;
ss=(btree::side) n2;
if (tt.insert(n1,ss,n3))
cout<<"Inserimento effettuato\n";
else cout<<"Informazione "<< n3 << " non esistente \n" << " oppure lato occupato\n";
}
cin.clear(); cin>>cc;
if (cc!='.')
{ cout<<"Errore nei dati di ingresso\n";
return 1;
}
cout<<"Visita in ordine anticipato:\n";
tt.voa(); cout<< '\n';
cout<<"Visita in ordine differito:\n";
tt.vod(); cout<< '\n';
cout<<"Visita in ordine simmetrico:\n";
tt.vos(); cout<< '\n';
cin>>stop;
return 0;
}
leomeya è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2005, 13:04   #2
leomeya
Senior Member
 
Iscritto dal: Sep 2001
Messaggi: 1302
perche' non mi si ferma piu'
sto scapocciando
leomeya è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2005, 15:08   #3
leomeya
Senior Member
 
Iscritto dal: Sep 2001
Messaggi: 1302
up
leomeya è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2005, 15:24   #4
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
Il punto e' che non riesce a distinguere tra 'a' e '.', mentre prima distingueva tra un intero e '.'.
Prova a scrivere qualcosa tipo:
Codice:
...
while (cin >> n1) {
    if (n1 == '.')
        break;
...
modificando il resto di conseguenza.
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2005, 16:21   #5
leomeya
Senior Member
 
Iscritto dal: Sep 2001
Messaggi: 1302
grazie mille
leomeya è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS GeForce RTX 5080 Noctua OC Edition: una custom fenomenale, ma anche enorme ASUS GeForce RTX 5080 Noctua OC Edition: una cus...
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo Dreame Aqua10 Ultra Roller, la pulizia di casa c...
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
S.T.A.L.K.E.R. 2 arriva su PS5: nuovo tr...
Light Base 500 LX, arriva il nuovo case ...
AMD prepara un colpo grosso: Ryzen 9000G...
Aumento delle accise sul diesel: l'allar...
Google paga 15 Superfan per provare i nu...
Ora legale permanente: il dibattito torn...
Numeri record per Toyota in Europa: sfio...
Shuhei Yoshida elogia la strategia di Mi...
CMF Headphone Pro: un best-buy per i pi&...
Caviar ha presentato un iPhone Air placc...
Aggiornamento straordinario per Windows ...
Prime Vision: così Amazon trasfor...
ASTRO A10 Gen 2 in offerta su Amazon: cu...
Apple torna sui propri passi: su iOS 26....
LG NanoCell in super sconto su Amazon: 7...
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: 13:47.


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