Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-05-2005, 16:03   #1
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
[C, alberi binari, liste] problema

realizzare una funzione (una sola!) che presi in input un albero binario e una lista verifica che l'altezza dell'albero sia minore della lunghezza della lista.
questo era un eserciuìzio di un esonero di un corso di Programmazione 2; voi come fareste?
naturalmente il fatto che sia esplicitamente specificato di usare una sola funzione lascia intendere che per calcolare l'altezza dell'albero si debba usare un algoritmo iterativo.
come al solito, io la soluzione la so già ma pongo ugualmente la sfida 1) per vedere come se la cava cionci (spero che accetti la sfida), e 2) per confrontare le vostre soluzioni con la mia; ah, e anche 3) per avere una maggiore certezza di non aver scritto troppe cazzate a quell'esonero

Ultima modifica di 71104 : 04-05-2005 alle 16:07.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2005, 19:54   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Perchè non può essere ricorsivo
Comunque ho visto solo ora...domani ci provo...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2005, 22:15   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cionci
Perchè non può essere ricorsivo
ok, può anche essere ricorsivo, ma deve comunque essere una sola funzione; e cmq il prof. l'ha anche detto che possibilmente doveva essere iterativo (considera che in genere gli algoritmi iterativi sono preferibili a quelli ricorsivi).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2005, 22:21   #4
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ma guarda un pò.........

Anch'io avevo il compito B oggi sai? L'ho fatto un pò alla mia maniera infatti non so se è giusto spero di averlo passato l'ho fatti tutti.

Io mandato una lista e un albero in input e poi ho fatto lo scorrimento dell'albero ricorsivamente sul sottoalbero sinistro e destro e ho aumentato un contatore chiamato cntalbero. Poi ho iniziato a scorrere gli elementi della lista e anche lì ho usato un contatore chiamato cntlista. Alla fine ho semplicemente confrontato i contatori e il più piccolo ha restituito VERO.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2005, 22:49   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Manugal
Ma guarda un pò.........

Anch'io avevo il compito B oggi sai? L'ho fatto un pò alla mia maniera infatti non so se è giusto spero di averlo passato l'ho fatti tutti.
LOL
li ho fatti tutti anche io ma penso di aver toppato il bonus (vabbè, niente bonus x me ).

cmq mezzo Dipartimento di Informatica della Sapienza viene qui su HwUpgrade... mi sembra che fosse Andrea Cosentino l'altro che si era iscritto qualche mese fa; tu chi sei?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 08:52   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
L'albero è bilanciato ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 09:36   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Lo suppongo non bilanciato e che sia memorizzato nella struttura classica con figlioSX e figlioDX...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 10:59   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Fatto:
Codice:
struct list {
	int info;
	struct list *next;
};

typedef struct list lista;


struct alb {
	int info;
	struct alb *sx;
	struct alb *dx;
};

typedef struct alb albero;

struct list_alb {
	albero *corrente;
	int visitato;
	int alt;
	struct list_alb *sx;
	struct list_alb *dx;
	struct list_alb *prev;
};

typedef struct list_alb lista_alb;

/*ritorna 1 se è minore, 0 altrimenti*/
int confronta(albero *a, lista *l)
{
	int lun_lista = 1;
	int lun_albero = 1;
	lista_alb *la;
	lista_alb *cur;
	lista_alb *tmp;

	if(!a && l) return 1;
	if(a && !l) return 0;

	while(l->next)
	{
		l = l->next;
		lun_lista++;
	}

	cur = la = (lista_alb *)malloc(sizeof(lista_alb));
	cur->prev = cur->dx = cur->sx = NULL;

	cur->corrente = a;
	cur->alt = 1;
	cur->visitato = 0;

	do {

		if((!cur->corrente->dx && !cur->corrente->sx) || cur->visitato == 2)
		{
			cur->visitato = 2;
			if(cur->alt > lun_albero)
				lun_albero = cur->alt;
			
			if(cur->prev) 
			{
				tmp = cur;
				cur = cur->prev;
				cur->visitato++;
                free(tmp);
			}
			continue;
		}

		switch(cur->visitato)
		{
		case 0:
			if(cur->corrente->sx)
			{
				tmp = (lista_alb *)malloc(sizeof(lista_alb));
				tmp->alt = cur->alt + 1;
				tmp->visitato = 0;
				tmp->prev = cur;
				tmp->corrente = cur->corrente->sx;
				tmp->sx = tmp->dx = NULL;
				cur->sx = tmp;
			}
			if(cur->corrente->dx)
			{
				tmp = (lista_alb *)malloc(sizeof(lista_alb));
				tmp->alt = cur->alt + 1;
				tmp->visitato = 0;
				tmp->prev = cur;
				tmp->corrente = cur->corrente->dx;
				tmp->sx = tmp->dx = NULL;
				cur->dx = tmp;
			}
			if(!cur->corrente->dx)
			{
				cur->visitato++;
				cur = cur->sx;
			}
			else
				cur = cur->dx;
			break;
		case 1:
			if(cur->sx) cur = cur->sx;
			else cur->visitato++;
			break;
		}

	} while(la->visitato < 2);
	free(la);
	return (lun_albero < lun_lista) ? 1 : 0;
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 12:58   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cionci
Fatto:[...]
vedo che hai usato dei nodi d'appoggio che sono una fusione tra quelli dell'albero e quelli della lista; inoltre vedo che questi nodi contengono un flag (visitato) che risolve il problema dell'assenza dello stack durante la visita dell'albero (cioè permette di fare un algoritmo iterativo anziché ricorsivo); complimenti, ottima soluzione!
io ho fatto diversamente: per rimediare all'assenza dello stack durante la visita dell'albero ho usato una variabile d'appoggio (chiamiamola "provenienza") che ogni volta che il nodo corrente si setta su un'altra posizione, mi indica da dove "proviene" il nodo corrente, cioè se la posizione precedente a quella corrente era il padre, il figlio sx o il figlio dx del nodo corrente; ho fatto tutto dentro un ciclo, più o meno così:

Codice:
typedef struct _TNODE {  // tree node
    int data;
    struct _TNODE *p, *l, *r;
} TNODE, *PTNODE;

//...

int h = 0;  // altezza dell'albero
int i = 0;  // contatore altezza
PTNODE n = ...; //n viene inizializzato alla radice dell'albero
while (n) {
	switch (provenienza) {
	case 0:  // n prima era il padre
		if (n->l) {
			provenienza = 0;
			n = n->l;
			if (++i > h) h = i;
			break;
		}
		else {
			provenienza = 1;
		}
	case 1:  // n prima era il figlio sinistro
		if (n->r) {
			provenienza = 0;
			n = n->r;
			if (++i > h) h = i;
			break;
		}
		else {
			provenienza = 2;
		}
	case 2:  // n prima era il figlio destro
		if (n->p) {
			if (n == n->p->l) {
				provenienza = 1;
			}
			else {
				provenienza = 2;
			}
			n = n->p;
			i--;
		}
		break;
	}
}
ho usato alberi doppiamente linkati (cioè ogni nodo conosce anche il padre) altrimenti non ne uscivo fuori ^^' il prof. ha detto che andava bene.

PS: cmq si, l'albero non doveva essere supposto bilanciato (altrimenti era na cazzata bastava scendere su tutti i left o su tutti i right e contare finché non trovavi NULL in pratica diventava il conteggio di due liste).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 13:02   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Se era doppiamente linkato era più facile...infatti ho costruito proprio quella struttura per permettermi di andare avanti ed indietro nell'albero...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Samsung conferma l'arrivo di tre variant...
Sottile, veloce e con un'ottima autonomi...
Il top di gamma compatto di OnePlus &egr...
Modificare l'indirizzo Gmail è finalment...
Perché le GeForce RTX con pi&ugra...
Più tempo online non equivale a più disa...
Amazon Weekend: iPhone 17 Pro, robot asp...
TV OLED 65'' top di gamma al 50%: 144Hz,...
Londra si prepara al terremoto 'intellig...
Scope elettriche in offerta su Amazon: f...
iPhone 17 Pro a un nuovo minimo storico ...
DJI Mini 4 Pro Fly More Combo a 859€ su ...
Roborock in offerta su Amazon: QV 35A e ...
Crisi della RAM: Intel rassicura sul mer...
Dreame taglia i prezzi su Amazon: L40 Ul...
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: 07:27.


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