Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-10-2008, 13:50   #1
pmhwp
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 453
[c/c++] lettura albero di espressioni aritmetiche

Ciao,
ho un albero binario che fa il parsing di una espressione matematica, come ad esempio 5+(4*3)



Come posso fare per rileggerlo e risolverlo trovando il valore finale?

Grazie.
pmhwp è offline   Rispondi citando il messaggio o parte di esso
Old 13-10-2008, 14:06   #2
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ciao,

devi attraversare ricorsivamente l'albero chiedendo ad ogni nodo di valutare se stesso.
Un nodo valuta se stesso restituendo il proprio valore se si tratta di un operando; se si tratta invece di un operatore, restituisce il valore dell'applicazione dell'operatore ai propri figli.

Questo è un esempio:

Codice:
double EvalTree(Tree *pTree)
{
	double dblLeft;
	double dblRight;

	if ( !pTree )
		return 0.0;

	switch ( pTree->tok->Type )
	{
	case VALUE:
		return pTree->tok->Value;
	case PLUS:
		return EvalTree(pTree->left) + EvalTree(pTree->right);
	case MINUS:
		return EvalTree(pTree->left) - EvalTree(pTree->right);
	case MULT:
		return EvalTree(pTree->left) * EvalTree(pTree->right);
	case DIV:
		dblLeft = EvalTree(pTree->left);
		dblRight = EvalTree(pTree->right);
		if ( dblRight == 0 )
		{
			printf("Errore: divisione per zero!\n");
			return 0.0;
		}
		else
		{
			return dblLeft / dblRight;
		}
	case EXP:
		return pow(EvalTree(pTree->left), EvalTree(pTree->right));
	case UPLUS:
		return EvalTree(pTree->right);
	case UMINUS:
		return -1 * EvalTree(pTree->right);
	default:
		if ( pTree->tok->Type == OPAREN )
			printf("Errore: parentesi non bilanciate.\n");
		else
			printf("Operatore non riconosciuto: %c\n", pTree->tok->str);
		//printf("Operatore non riconosciuto: %s", pTree->tok->str);
		return 0.0;
	}
}
Il codice completo lo trovi qui
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 13-10-2008, 14:43   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Riassumendo: visita simmetrica
__________________
In God we trust; all others bring data

Ultima modifica di sottovento : 13-10-2008 alle 15:45. Motivo: Errore: avevo scritto preordine invece di simmetrica
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 13-10-2008, 15:37   #4
pmhwp
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 453
mi puoi fare un esempio di visita in pre ordine?? grazie
pmhwp è offline   Rispondi citando il messaggio o parte di esso
Old 13-10-2008, 15:53   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quella che ha fatto Vincenzo1968 e' una visita simmetrica.
Cmq, questa e' la mia versione (praticamente uguale a quella di Vincenzo):

Codice:
double EvalTree(Tree *pTree)
{
    if (pTree)
    {
        if (!pTree->left && !pTree->right)
            return toDouble(pTree->token);

        double leftVal = EvalTree(pTree->left);
        double rightVal = EvalTree(pTree->right);
        double val = executeOperation (pTree->token, leftVal, rightVal);
    }
    return 0.0;
}
L'implementazione di toDouble() ed executeOperation() immagino sia banale
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Secondo Elon Musk FSD è più...
Anche Cloudflare fissa il 2029 per la si...
Hacker sfruttano da mesi un bug segreto ...
ASUSTOR Lockerstor 24R Pro Gen2: 24 bay ...
Rigetti supera la soglia dei 100 qubit: ...
eFootball raggiunge il miliardo di downl...
Come provare OpenClaw facilmente grazie ...
Microsoft conferma: questo glitch dell'o...
Toyota bZ7: una berlina da oltre 5 metri...
Artemis II, le prime foto del lato nasco...
Sempre più pubblicità su YouTube: arriva...
Polestar fa +80% in Italia e tocca quota...
Il tuo Mac smette di connettersi a Inter...
La nuova alleanza Intel-Google ridefinis...
Energia troppo cara, regole da rivedere:...
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: 04:35.


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