Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Sono ormai definitive le nuove norme del Codice della Strada per i monopattini elettrici. Non solo targa e assicurazione, le regole sono tante e riguardano diversi aspetti, vi spieghiamo come evitare sanzioni che possono essere salate
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5 introduce Dynamic Multi Frame Generation e MFG 6X, permettendo fino a cinque frame generati per ogni frame renderizzato. I test su Cyberpunk 2077 e 007 First Light mostrano forti incrementi di FPS e riduzione della latenza su RTX 5090 Laptop. Migliorano fluidità, stabilità e qualità visiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-05-2005, 15: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 15:07.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2005, 18: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, 21: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, 21: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, 21: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, 07: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, 08: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, 09: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, 11: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, 12: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


Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
I guardrails di Claude Fable 5 fanno sca...
Phanteks Evolv Series S2 a 99€: il case ...
Quasi un milione di passaporti esposti: ...
L'Unione Europea pubblica il nuovo codic...
The Elder Scrolls 6: lo sviluppo continu...
motorola razr 70: pochi cambiamenti ma b...
Logitech G PRO X2 Superstrike: i giocato...
DiffusionGemma sfida gli LLM tradizional...
È ancora guerra fra Google e uBlock Orig...
Agente IA fa quello che vuole su Fedora:...
Ubisoft chiude gli studi di Winnipeg e B...
Fractal è un kernel che spia cosa...
Acqui Terme 'elegge' Eva Statiella, la p...
ECOFLOW DELTA 3 Max Plus con coupon da 3...
F1: la FIA cambia le regole sui motori 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: 11:45.


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