Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
OPPO ha portato in Italia, dal 1° luglio 2026, Reno16 Pro: display AMOLED da 6,32 pollici a 144Hz, tripla fotocamera con sensore principale da 200 megapixel, chip Dimensity 8550 Super e batteria da 6000mAh, al prezzo di lancio di 899 euro. Lo abbiamo provato per due settimane insieme al nuovo accessorio Bubble, per capire se la formula compatta della serie regge ancora di fronte a un listino da 1099 euro
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
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 [email protected].
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
[email protected] 
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


Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'alternativa a Google Maps che rispetta...
I migliori TV a partire da 229€: QLED, O...
L'UE riattiva Chat Control con un cavill...
I prodotti Apple da tenere d'occhio: iPh...
NVIDIA Kyber NVL144 rinviato al 2028: pr...
RTX 4080M convertita in GPU desktop? S&i...
Mammotion Luba 3 AWD: la Formula 1 dei r...
Xiaomi Auto ha un'arma segreta: Titan Al...
Il primo pieghevole di Apple arriver&agr...
Apple iPhone 17 Pro Argento e chip A19 P...
Giochi fatti dall'IA con un prompt, cosa...
In questa azienda i programmatori stanno...
I 6 portatili migliori di tutta Amazon: ...
400 mila chilometri con un'auto elettric...
I nuovi iPhone 18 e 18e avranno pi&ugrav...
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:12.


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