Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-09-2005, 14:59   #1
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
[C] Esercizio d'esame

Ciao a tutti.

Ho un problema con un esercizio d'esame....

Posto il testo:

Codice:
Progettare un programma C che legge in preordine
da stdin un albero binario etichettato con interi sui nodi 
e lo stampa su stdout in postordine.

Si veda il file "format-tree.txt" per i formati di lettura e stampa
degli alberi.


L'input \`e formattato come segue.

<format T in preordine>


L'output \`e formattato come segue.

Le prime 6 righe di stampa sono formattate come segue.
<nome>
<cognome> 
<giorno di nascita (2 cifre)>
<mese di nascita (2 cifre)>
<anno di nascita (4 cifre)>
<indirizzo email>


Le rimanenti righe sono formattate come segue.

<format T in postordine>


Ecco alcuni esempi per il programma dello studente Mario Rossi della Spigola
nato il 17.05.1723 ed email mrds@nessun.posto.it.
Testate il vostro programma almeno sugli esempi proposti
controllando che, per il dato input, l'output (a parte le prime 6 righe) sia 
ESATTAMENTE
quello riportato nell'esempio.


Esempio 1. 

stdin:
1 1 123
1 0 1456 
0 0 2940
1 1 7123
0 1 2456
0 0 2678
1 1 1990
0 0 4589
0 0 1717

stdout:
Mario 
Rossi della Spigola 
17
05
1723
mrds@nessun.posto.it 
0 0 2940
1 0 1456
0 0 2678
0 1 2456
0 0 4589
0 0 1717
1 1 1990
1 1 7123
1 1 1123


Commento all'esempio 1.

L'albero usato nell'esempio 1 e':


          123
        /    \
     1456    7123
      /    /    \
  2940  2456    1990
          \     /   \
         2678 4589  1717
Io stdin lo metto su un file txt e poi faccio la redirezione. A questo punto nel programma non so come fare a dire che se trova 1 nella prima colonna quel nodo ha figlio sinistro e se trova 0 no. Poi siccome i dati sono presi da stdin come faccio a metterli in postorder? E' un pò complicato...

Ultima modifica di Manugal : 28-09-2005 alle 15:13.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 16:44   #2
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Per favore è importante
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 16:52   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ma LOL ma che stai col Tronci e col Salvo??? asd

cmq mi pare semplice: ora non ricordo esattamente come fosse il preordine, mi pare fosse che prima leggi la radice, poi il figlio sinistro, e poi il destro;si risolve facilmente con una funzione ricorsiva, tipo questa qua:
Codice:
typedef struct _NODE {
	int nData;
	struct _NODE *pLeft, *pRight;
} NODE, *TREE;

TREE ReadTree() {
	TREE t = (TREE)malloc(sizeof(NODE));
	int fHasLeft, fHasRight;
	int nData;
	scanf("%d %d %d", &fHasLeft, &fHasRight, &nData);
	t->nData = nData;
	if (fHasLeft) {
		t->pLeft = ReadTree();
	}
	if (fHasRight) {
		t->pRight = ReadTree();
	}
	return t;
}
bada che non l'ho testato, potrebbe contenere errori...

Ultima modifica di 71104 : 28-09-2005 alle 16:55.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 17:06   #4
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Grazie.

Ebbene si sto con quei due psicopatici

Cmq sia non mi pare così semplice dato che l'input è di questo tipo:

1 1 123
1 0 1456
0 0 2940
1 1 7123
0 1 2456
0 0 2678
1 1 1990
0 0 4589
0 0 1717

(cioè nella prima colonna se c'è 1 vuol dire che ha un figlio sinistro altrimenti no, nella seconda colonna se c'è 1 vuol dire che ha un figlio destro altrimenti no e poi nella terza c'è proprio il valore di quel nodo)

E l'output è di questo tipo:

0 0 2940
1 0 1456
0 0 2678
0 1 2456
0 0 4589
0 0 1717
1 1 1990
1 1 7123
1 1 1123


Cioè io parto leggendo i valori dall'input e poi? Come lo costruisco l'albero? Spero che tu possa aiutarmi dato che sicuramente avrai già passato l'esame

Ultima modifica di Manugal : 28-09-2005 alle 17:08.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 17:28   #5
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ho capito la tua funzione ma per stampare come faccio?
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 18:02   #6
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ho provato a fare la funzione di stampa ma mi va in un loop infinito. Ma non dovrebbe terminare quando l'albero finisce?

Codice:
void PrintTree(TREE p){
     
        if(p!=NULL){
           if(p->pLeft){
              printf("1 0 %d\n", p->nData);
              PrintTree(p->pLeft);
           }
           else if(p->pRight){
              printf("0 1 %d\n", p->nData);
              PrintTree(p->pRight);
           }
           else if(p->pLeft && p->pRight){
              printf("1 1 %d\n", p->nData);
           else 
              printf("0 0 %d\n", p->nData);
           }
        }
}
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 18:04   #7
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
già, dimenticavo il codice per stampare; dovrebbe essere così, è molto semplice, ma anche questo non l'ho testato quindi potrebbero esserci errori:
Codice:
void WriteTree(TREE t) {
	if (!t) {
		return;
	}
	WriteTree(t->pLeft);
	WriteTree(t->pRight);
	printf("%d %d %d\n",
		t->pLeft != NULL,
		t->pRight != NULL,
		t->nData);
}
in bocca al lupo
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 18:06   #8
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Scusa ma come hai fatto tu come fa a sapere che deve stampare nelle prime due colonne 01 10 00 oppure 11?
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 18:09   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Manugal
Scusa ma come hai fatto tu come fa a sapere che deve stampare nelle prime due colonne 01 10 00 oppure 11?
espressioni nella forma "x != NULL" restituiscono valori booleani: l'operatore != restituisce un valore booleano.
in C i valori booleani si rappresentano con 0 per indicare false e 1 per indicare true e questa caratteristica cade a pennello nel tuo caso
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 18:12   #10
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ah ok ho capito, però non stampa niente
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 19:23   #11
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Nessuno che mi aiuti?
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2005, 23:25   #12
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
hai messo system("pause") alla fine? (è una dimenticanza molto comune alla Sapienza)
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2005, 13:39   #13
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Cioè a che servirebbe? E dove lo dovrei mettere?
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2005, 15:07   #14
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
la devi usare solo su Windows per non far chiudere la console subito dopo la terminazione del programma; la devi mettere nella main come ultima istruzone.
Codice:
int main() {
	.
	.
	.
	system("pause");
	return 0;
}
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2005, 17:25   #15
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ah ho capito a cosa serve, ma il problema non è che mi si chiude la console. Il problema è che non stampa proprio niente. Cmq ho provato a metterla alla fine del main ed è la stessa cosa. Io uso Dev-C++ e ogni volta che c'è qualcosa che non va non è che mi da messaggi strani, no semplicemente non stampa niente faccio partire il programma e mi ritorna al prompt. Quindi bisognerebbe capire cos'è che non va nel codice, ma non riesco a capire cosa.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2005, 18:01   #16
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Possibile nessuno sa niente?

Ditemi anche se è colpa del compilatore...
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2005, 19:39   #17
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
vittoriaaa!!!!!!!!!!!!!!

Ci sono riuscito finalmente. Praticamente la funzione ReadTree andava scritta così:

Codice:
TREE ReadTree() {
	TREE t = (TREE)malloc(sizeof(NODE));
	int fHasLeft, fHasRight;
	int nData;
	scanf("%d %d %d", &fHasLeft, &fHasRight, &nData);
	t->nData = nData;
	t->pLeft = NULL;      /* Mancavano queste due 
        t->pRight= NULL;          righe */
        if (fHasLeft) {
		t->pLeft = ReadTree();
	}
	if (fHasRight) {
		t->pRight = ReadTree();
	}
	return t;
}
Grazie cmq per l'interessamento
Manugal è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Simucube 3 Sport, Pro e Ultimate ufficia...
Facebook rilancia le offerte di lavoro: ...
Hisense PT1: il cinema in casa con la po...
Pixel 10: come risolvere (forse) i crash...
Plenitude lancia la sua Fibra ottica: fi...
Apple TV+ elimina il 'plus' dal nome: or...
Prezzi da outlet in saldo su 23 articoli...
Death 2 Spotify: a Oakland nasce il movi...
Vivo presenta X300 e X300 Pro: due flags...
iPad mini con chip A17 Pro: potenza da M...
Samsung cresce oltre le attese grazie al...
Microsoft presenta MAI-Image-1, il suo p...
AirPods Pro 3 contro AirPods Pro 2: Appl...
NVIDIA e l'era degli 800 VDC: come cambi...
Anche Duracell entra nel settore della r...
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: 10:29.


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