Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
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


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
DAZN Full in sconto a partire da 19,99 e...
iPhone 18 Pro disponibile su Amazon a 1....
ECOVACS T90 OMNI a 439€ e T90 MAX OMNI a...
Questa Proscenic è la scopa elett...
Microsoft Defender: falso allarme sull'a...
Aerei in volo e truppe pronte all'assalt...
Usano Claude per hackerare OpenAI: ricer...
RatHat: il nuovo malware Android usa il ...
Domanda di petrolio in calo di 2,5 milio...
Il meglio delle offerte weekend Amazon a...
Dopo oltre 100 anni di tentativi, l'IA d...
Speciale robot aspirapolvere in offerta ...
L'IA sta cancellando i lavori junior? Il...
Debutta Chery Italia: non più sol...
Addio ai dischi? Xbox ci aveva già...
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: 15:57.


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