Torna indietro   Hardware Upgrade Forum > Software > Programmazione

 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP
Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP
OPPO ha appena lanciato sul mercato la nuova serie Find X10, che ha come smartphone premium il Find X10 Pro Max, uno smartphone completo, che fa del comparto fotografico il suo vero punto di forza. Ma sono tante le novità, tra cui l'AI che adesso diventa agentica. Ma andiamo a vedere nel dettaglio questo nuovo smartphone.
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato
Abbiamo provato la beta di World of Warcraft: Forever, il Classic+ di Blizzard in arrivo il 4 novembre: la nuova razza Skyborne restituisce la sensazione di un gioco nuovo, ma le zone storiche conservano la noia divertita di Classic. Classi ribilanciate, sciamani anche nell'Alleanza e un motore grafico che in 4K gira bene anche su una RTX 3070. Cosa cambia in Forever? La risposta nell'articolo
TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita
TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita
TCL P80 Ultra abbina per la prima volta un pannello AMOLED alla tecnologia NXTPAPER con finitura opaca, affiancandoci una fotocamera periscopica da 50 MP con zoom ottico 3x, il SoC Dimensity 7400 Elite e una batteria da 5.800 mAh. Nella prova sul campo emergono luminosità di picco molto elevata, comparto fotografico solido per la fascia di prezzo e autonomia nella media, a fronte di velocità di scrittura dello storage piuttosto contenute
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-09-2011, 09:50   #1
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
[C]funzione verificare se un albero binario è un abr

Ciao a tutti ho il seguente problema : dato un albero binario devo scrivere una funzione ricorsiva che restituisce 0 se l albero è un ABR , 1 se non lo è.
La soluzione che avevo pensato ma non riesco ad applicare è quella di utilizzare la visita in ordine e verificare se la successione è crescente. Quindi utilizzando una funzione dove gli passerò due parametri var1 e var2 e verifico di chiamata in chiamata se var1 è minore o uguale di var2 appena var1 è maggiore di var2 dovrei uscire e ritornare 1 se no vado avanti.

Spero di essere stato chiaro nell esposizione del problema e che qualcuno mi aiuti GRAZIE!!!!!!!!

Codice:
int ABR(nod *radice, int *b)/*0 se è un abr, 1 se non lo è*/
{
 int confronto;
 if (radice!=NULL)
   {
     confronto=ABR(radice->sinistro,&(radice->info));
     printf("valore di radice e' %d \n",radice->info);
     printf("valore di b e' %d \n",*b);
     if (radice->info>(*b))
       return 1;/*dobbiamo uscire visto che il precedente è minore del successivo*/
     else
       confronto=0;  /*vado avanti*/
     confronto=ABR(radice->destro,&(radice->info));
   }
 return confronto; 
 
}
B lo inizializzo nel main con un valore piu grande che non posso mai inserire nell albero.
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2011, 17:08   #2
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
ragazzi vi prego aiutatemi!!!!!!!
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2011, 18:07   #3
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
in output mi restituisce sempre 1 anke quando è un abr. qualcuno mi sa aiutare
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2011, 02:27   #4
Floris
Senior Member
 
L'Avatar di Floris
 
Iscritto dal: Jan 2007
Messaggi: 2267
Codice:
class node{
	public:
		int info;
		node* first;
		node* second;
        node(int i,node* f, node* s):info(i),first(f),second(s){}
};

bool testNode(node* n){
	bool isOk = true;
	if(n->first!=0)
		isOk = n->first->info <= n->info;
        if(n->second!=0)
		isOk = isOk && n->info <= n->second->info;
        return isOk;
}

bool testABR(node* root){
	if(root == 0) return true;
	return testNode(root) && testABR(root->first) && testABR(root->second);
}
Credo che nel tuo codice l'errore sia alla fine dove dovresti porre
Codice:
confronto=confronto || ABR(radice->destro,&(radice->info));
__________________
Concluso con:...
Floris è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2011, 09:40   #5
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
Quote:
Originariamente inviato da Floris Guarda i messaggi
Codice:
class node{
	public:
		int info;
		node* first;
		node* second;
        node(int i,node* f, node* s):info(i),first(f),second(s){}
};

bool testNode(node* n){
	bool isOk = true;
	if(n->first!=0)
		isOk = n->first->info <= n->info;
        if(n->second!=0)
		isOk = isOk && n->info <= n->second->info;
        return isOk;
}

bool testABR(node* root){
	if(root == 0) return true;
	return testNode(root) && testABR(root->first) && testABR(root->second);
}
Credo che nel tuo codice l'errore sia alla fine dove dovresti porre
Codice:
confronto=confronto || ABR(radice->destro,&(radice->info));
Scusa la mia ignoranza in materia. ma il codice che hai scritto non l ho capito. non è C vero?
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2011, 12:00   #6
EnergyVortex
Member
 
Iscritto dal: Aug 2009
Messaggi: 287
non basta fare una visita inorder e controllare che i valori siano sempre crescenti?
EnergyVortex è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2011, 12:16   #7
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
e questo che voglio. ma come posso fare??? dove sbaglio nella mia funzione?
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2011, 16:14   #8
EnergyVortex
Member
 
Iscritto dal: Aug 2009
Messaggi: 287
io farei così:
void verifica(struct nodo *radice, int *max, int* abr) //se abr è 0 è un ABR
{
verifica(radice->sx,max,abr);
int appoggio;
if (radice!=NULL)
{
appoggio=radice->info;
if (appoggio<max)
*abr=1;
*max=appoggio;
}
verifica(radice->dx,max,abr);
}
EnergyVortex è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2011, 19:11   #9
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
scusa max lo inizializzo a 0 o ad un valore grande??
mame83 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2011, 19:51   #10
Floris
Senior Member
 
L'Avatar di Floris
 
Iscritto dal: Jan 2007
Messaggi: 2267
Quando quoti un listato lungo di codice senza apportarne modifiche, fai così:
Quote:
Originariamente inviato da Floris
Codice:
class node{
	public:
		int info;
...
Per non rendere il thread dispersivo.

In ogni caso il codice è in C++. In C sarebbe una cosa del genere:
Codice:
struct node{
	int info;
	node* first;
	node* second;
};

bool testNode(node* n){
	bool isOk = true;
	if(n->first!=0)
		isOk = n->first->info <= n->info;
        if(n->second!=0)
		isOk = isOk && n->info <= n->second->info;
        return isOk;
}

bool testABR(node* root){
	if(root == 0) return true;
	return testNode(root) && testABR(root->first) && testABR(root->second);
}
Inoltre vengono usati i valori booleani. true equivale a 1 e false a 0. Il test n->first!=0 equivale a n->first!=NULL.
Quindi per avere i valori che vuoi tu basta che fai !testABR(radice), così ti ritorna 0 (false) se è ABR e 1 (true) se non lo è.
Per il resto è una normale visita ricorsiva infissa dell'albero. Facendo così eviti di dover utilizzare variabili ausiliarie.
Inoltre la cortocircuitazione dell'operatore && garantisce che appena viene trovato un valore che non rispetta la definizione
di ABR, la ricorsione si chiude. (nel caso non sapessi cosa significa che l'operatore binario && è cortocircuitato, significa che se si ha A && B,
all'atto della valutazione se A è true allora viene valutato anche B, mentre se A è false allora B non viene valutato poichè
A && B è in ogni caso false. Stessa cosa per l'operatore binario ||)

Se vuoi una visita prefissa, basta porre:
Codice:
return testABR(root->first) && testNode(root) && testABR(root->second);
__________________
Concluso con:...

Ultima modifica di Floris : 21-09-2011 alle 20:07.
Floris è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2011, 19:59   #11
EnergyVortex
Member
 
Iscritto dal: Aug 2009
Messaggi: 287
Quote:
Originariamente inviato da mame83 Guarda i messaggi
scusa max lo inizializzo a 0 o ad un valore grande??
a 0 se l'albero contiene solo valori positivi, altrimenti al massimo numero negativo rappresentabile con un int
EnergyVortex è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2011, 09:58   #12
mame83
Member
 
Iscritto dal: Nov 2010
Messaggi: 71
Quote:
Originariamente inviato da EnergyVortex Guarda i messaggi
io farei così:
void verifica(struct nodo *radice, int *max, int* abr) //se abr è 0 è un ABR
{
verifica(radice->sx,max,abr);
int appoggio;
if (radice!=NULL)
{
appoggio=radice->info;
if (appoggio<max)
*abr=1;
*max=appoggio;
}
verifica(radice->dx,max,abr);
}
L ho provato a fare come dici. ma va in loop.
ho inizializzato nel main max e abr a 0
Codice:
void verifica(struct nodo *radice, int *max, int* abr) //se abr è 0 è un ABR
{
  verifica(radice->sinistro,max,abr);
  int appoggio;
  if (radice!=NULL)
    {
      appoggio=radice->info;
      if (appoggio<*max)
         *abr=1;
      *max=appoggio;
        
    }
    
  verifica(radice->destro,max,abr);
}
mame83 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato WoW Forever provato: il MMORPG che la community ...
TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita TCL P80 Ultra: con un display AMOLED opaco &egra...
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio HUAWEI MatePad Air recensione: OLED opaco e tast...
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica NVIDIA RTX Spark: il PC Windows on ARM costruito...
RTX 5090 rubate all'aeroporto di San Pao...
Urlife sfida tutti nelle e-bike: 560€ qu...
Claude ha trovato 493 problemi di superf...
Microsoft ha ricevuto un'offerta di 150 ...
Google Wallet si aggiorna su Android: ar...
4 friggitrici ad aria TOP su Amazon: da ...
Le critiche all'addio ai dischi sono un ...
Crollo di prezzo per REDMI Note 17 Pro 5...
L'Air Force Research Laboratory ha utili...
L'ONU esprime preoccupazione per le oper...
OpenAI: GPT-6.1 Sol migra il COBOL all'8...
Cyberpunk 2077 porta le mod su console e...
Agenti di IA, per Akamai la sicurezza pa...
Non solo in Europa: Apple dovrà a...
iPhone Duo, il compromesso del display p...
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: 08:03.


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