Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-07-2007, 12:12   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Alberi in C

Codice:
struct inttree {
	int dato;
	struct inttree *left, *right;
};

typedef struct inttree inttree;


inttree *root = NULL;


// aggiungo un dato alla radice 1° livello
root = malloc(sizeof(inttree));
root->dato = 5;

// aggiungo un dato al ramo sx 2° livello
root->left = malloc(sizeof(inttree));
root->left->dato = 7;

// aggiungo un dato al ramo dx 2° livello
root->right = malloc(sizeof(inttree));
root->right->dato = 9;

// aggiungo un dato al sottoramo sx/sx e dx/sx e dx/dx del 3° livello
root->left->left = root->right->left = root->right->right = NULL;

// aggiungo un dato al sottoramo sx/dx del 3° livello
root->left->right = malloc(sizeof(inttree));
root->left->right->dato = 11;

// aggiungo un dato al sottoramo sx/dx/sx e sx/dx/dx del 4° livello
root->left->right->left = root->left->right->right = NULL;
l'esempio proposto serve solo a far comprendere come si allocano ed aggiungono dati ad un albero creando quindi nodi e conseguenti ramificazioni e sino a qui, tutto bene.
Siccome non credo che il sistema proposto sia efficacissimo, mi chiedevo come ci si posiziona su un determinato nodo di un albero e quindi, se il nodo non dovesse esistere, lo si crea.

Vi prego, solo per chiarezza, di evitare di postare codice chilometrico che genererebbe solo ulteriore confusione; mi interessa capire il meccanismo e non avere il codice migliore per posizionarsi all'iesimo nodo, non prendetela come una pretesa ma una preghiera

Ultima modifica di misterx : 23-07-2007 alle 14:02.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 23-07-2007, 14:11   #2
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Questa funzione serve per caricare il dato a seconda se si sceglie "s - S" per inserire il dato (nel mio caso è un char) a sinistra o "d - D" a destra del nodo padre;
Alla funzione gli devi passare l'indirizzo della nodo-radice dell'albero e il dato.

Questo è il codice

Codice:
void genera (s_albero **rad, char c) {
  
  char sc;
  s_albero *new;
  s_albero *app;
  s_albero *prec;
  int libero;
  
  libero = 0;
  
  new = (s_albero *) malloc (sizeof(s_albero));
  new->sx = NULL;
  new->dx = NULL;
  new->lettera = c;
  
  if ((*rad)==NULL) {
    
    *rad = new;
    
  } else {
    
    app = *rad;
    while (libero==0) {
      do {
		printf("sx o dx di %c ? : ",app->lettera);
		scanf("%c",&sc);
		scanf("%c",&invio);
      } while ((sc!='s') && (sc!='S') && (sc!='d') && (sc!='D'));
      
      prec = app;
      if ((sc=='s') || (sc=='S')) {
		app=app->sx;
      } else {
		app=app->dx;
      }
      
      if (app==NULL) {
		libero=1;
		if ((sc=='s') || (sc=='S')) {
	  		prec->sx = new;
		} else {
			prec->dx = new;
		}
      }
    } // end while
  } // end if
} // end genera
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 23-07-2007, 16:25   #3
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
non riuscivi a lavorare sul mio esempio ?
Che poi tutto sommato si riduce a questo:

Codice:
struct inttree {
	int dato;
	struct inttree *left, *right;
};

typedef struct inttree inttree;

inttree *root = NULL;

Ultima modifica di misterx : 23-07-2007 alle 16:27.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 23-07-2007, 17:15   #4
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Quote:
Originariamente inviato da misterx Guarda i messaggi
non riuscivi a lavorare sul mio esempio ?
Che poi tutto sommato si riduce a questo:

Codice:
struct inttree {
	int dato;
	struct inttree *left, *right;
};

typedef struct inttree inttree;

inttree *root = NULL;
Ecco il codice adattato alla tua struttura

Codice:
void genera (inttree **root, int c) { // funzione chiamata per generare l'albero; viene inserito un nodo alla volta
  
  char sc, invio;
  inttree *new;
  inttree *app;
  inttree *prec;
  int libero;
  
  libero = 0;
  
  new = (inttree *) malloc (sizeof(inttree)); // creo il nuovo nodo
  new->left = NULL;                                // puntatore di SX a null
  new->right = NULL;                              // puntatore di DX a null
  new->dato = c;                                   // inserisco dato nel nodo
  
  if ((*root)==NULL) { // se la radice è vuota
    
    *root = new;        // posiziono il nodo creato come radice
    
  } else {
    
    app = *root;           // memorizzo in una variabile d'appoggio la radice
    while (libero==0) {   // libero; se 1 --> inserisco il nodo creato nell'albero; se 0 --> scorro l'albero
      do {
		printf("sx o dx di %d ? : ",app->dato); // l'utente decide se inserire a SX o a DX del nodo padre
		scanf("%c",&sc);
		scanf("%c",&invio);
      } while ((sc!='s') && (sc!='S') && (sc!='d') && (sc!='D'));
      
      prec = app;                     // memorizzo il nodo app (prec poi diventa il padre di app)
      if ((sc=='s') || (sc=='S')) { // se l'utente ha scelto a SX
		app=app->left;       // appoggio si posiziona nel nodo figlio SX
      } else {                          // altrimenti
		app=app->right;     // appoggio si posiziona nel nodo figlio DX
      }
      
      if (app==NULL) {            // se appoggio è NULL
		libero=1;             // libero = 1 --> inserisco il nodo creato all'inizio nell'albero
		if ((sc=='s') || (sc=='S')) {
	  		prec->left = new; // se ho scelto a SX inserisco a SX
		} else {
			prec->right = new; // altrimenti a DX
		}
      }
    } // end while
  } // end if
} // end genera

Ultima modifica di nico88desmo : 24-07-2007 alle 11:30.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 06:37   #5
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
scusa, ma senza un briciolo di commento non riesco a capire come lavora il tuo algoritmo!
Il codice di inserimento di un nuovo nodo è mescolato con quello dell'input dei dati, boh!
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 11:31   #6
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Quote:
Originariamente inviato da misterx Guarda i messaggi
scusa, ma senza un briciolo di commento non riesco a capire come lavora il tuo algoritmo!
Il codice di inserimento di un nuovo nodo è mescolato con quello dell'input dei dati, boh!
Ho modificato il codice precedente e ho aggiunto i commenti.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 14:19   #7
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
un pò di pazienza che non è un argomento poi così banale

Immagine.gif

a mano a mano che alloco nodi la configurazione (struttura) che si viene a creare è come quella nel mio disegno ?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 15:48   #8
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
La struttura è tipo questa

nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 16:59   #9
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
lo so che è rappresentato così un albero binario. Mi interessava sapere se strutturalmente nella memoria del calcolatore si hanno aree di memoria configurate come nel mio schema e collegate come nel mio schema.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 21:32   #10
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Quote:
Originariamente inviato da misterx Guarda i messaggi
lo so che è rappresentato così un albero binario. Mi interessava sapere se strutturalmente nella memoria del calcolatore si hanno aree di memoria configurate come nel mio schema e collegate come nel mio schema.
Si si, è come nel tuo schema.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2007, 11:16   #11
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
salve, usando il "cerca" ho trovato questa interessante discussione. Avrei una domanda a riguardo...ma se invece di voler creare un albero binario, io volessi creare un albero con k figli?? cioè, ho una radice, poi ogni nodo può avere da 0 a k figli, e cosi via....
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2007, 15:42   #12
stdecden
Member
 
L'Avatar di stdecden
 
Iscritto dal: Apr 2007
Messaggi: 263
Un nodo dell'albero dovrebbe contenere:
- Una lista di nodi

Codice:
struct Node
{
     std::list<*Node> Nodi;
};
(Codice non testato)
stdecden è offline   Rispondi citando il messaggio o parte di esso
Old 23-11-2007, 08:33   #13
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da stdecden Guarda i messaggi
Un nodo dell'albero dovrebbe contenere:
- Una lista di nodi

Codice:
struct Node
{
     std::list<*Node> Nodi;
};
(Codice non testato)
è una struttura nodo con all'interno???? non capisco di che tipo di membro si tratta...
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Furto di identità su scala nazion...
HPE vende i primi sistemi AMD Helios per...
Suno AI nel mirino dell'Antitrust: conte...
Xiaomi avrebbe cancellato il suo prossim...
WINDTRE BUSINESS rinnova l’offerta mobil...
BMW inaugura la fabbrica di batterie da ...
Googlebook apre al modding: bootloader s...
Denuvo non molla, vuole scoprire chi &eg...
Il miglior portatile tuttofare a basso p...
Gli agenti di OpenAI hanno mandato in ti...
Follie Amazon Prime: Zenbook è un...
MicroSD SanDisk in offerta Prime Day: Ul...
Steve Jobs, 15 anni dopo: John Ternus e ...
LaLiga chiede all'Europa di inserire qua...
Microsoft festeggia cinque anni di Windo...
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: 16:01.


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