Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] aiuto x la visita di un albero

    salve a tutti.
    sono nuovo.
    studio informatica (4°anno di superiori) e volevo un aiuto x fare una visita anticipata (e magari anche psticipata e simmetrica) per questo albero che ho fatto (vi avverto in anticipo fa pena) compilatelo con visual studio (cmq credo vada bene anche borland).
    ah! una altra cosa. prima usavo quel compilatore e c'era la funzione x cancellare lo schermo (clrscr o qlc del genere). su visual studio xò ho visto nn c'è..è in qualche libreria sperduta? o magari qlc di voi mi può dire come posso fare?

    grazie

    ShArK86

    ps: mi sono accorto adesso che nn posso allegare il sorgente e nn avendo spazio libero sul web x upparlo lo copoi qua di seguito...se ci sono problemi fatemi sapere..

    ************************************************** *******************
    codice:
    #include <iostream.h>
    
    typedef struct nodo
    {
    	int x;
    	nodo * dx;
    	nodo * sx;
    }nodo;
    
    nodo * crea (nodo * foglia)
    {
    	cin>>foglia->x;
    	foglia->dx=0;
    	foglia->sx=0;
    	return (foglia);
    }
    
    void posiziona (nodo * radice,nodo * foglia)
    {
    	if ((foglia->x)==(radice->x))
    		cout<<"\nIl Valore Immesso e` Gia` Contenuto In Un Nodo Dell'Albero\n";
    	else
    	{
    		if ((foglia->x)>(radice->x))
    		{
    			if ((radice->dx)==0)		//attacco (ramo dx)
    			{
    				radice->dx=foglia;
    				cout<<"\nCollegamento Effettuato Al Nodo Di Valore "<<radice->x<<" Sul Suo Ramo Di Destra\n";
    			}
    			else
    			{
    				nodo * scalo;
    				scalo=radice->dx;
    				posiziona(scalo,foglia);		//ricorsione su ramo dx
    			}
    		}
    		else
    		{
    			if ((radice->sx)==0)		//attacco (ramo sx)
    			{
    				radice->sx=foglia;
    				cout<<"\nCollegamento Effettuato Al Nodo Di Valore "<<radice->x<<" Sul Suo Ramo Di Sinistra\n";
    			}
    			else
    			{
    				nodo * scalo;
    				scalo=radice->sx;
    				posiziona(scalo,foglia);		//ricorsione su ramo sx
    			}
    		}
    	}
    }
    
    void anticipata (nodo * radice)
    {
    	
    }
    
    void main()
    {
    	int s;
    	bool z,f;
    	nodo * R;	//radice dell'albero
    	z=0;
    	f=0;
    	do
    	{
    		cout<<"\n1) Attacca Una Nuova Foglia";
    		cout<<"\n2) Visita Anticipata Dell'Albero";
    		cout<<"\n3) Esci\n";
    		cin>>s;	
    		switch (s)
    		{
    			case 1:
    			{
    				if (!f)		//controllo se è la prima volta che si crea un nodo
    				{			//e quindi vado a creare la radice	
    					f=1;
    					R=new(nodo);
    					cout<<"\nValore Della Radice= ";
    					R= crea(R);
    				}
    				else
    				{
    					nodo * n;
    					n=new(nodo);
    					cout<<"\nValore Della Foglia= ";
    					n= crea(n);
    					posiziona(R,n);
    				}
    			}
    			break;
    			case 2:
    			{
    				anticipata(R);
    			}
    			break;
    			case 3:
    			{
    				z=1;
    			}
    			break;
    			default:
    			{
    			}
    		}
    	}
    	while(!z);
    }
    ************************************************** *******************

  2. #2
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Per favore metti il codice tra [CODE ] e [/CODE ] senza spazi (leggi il regolamento), così il codice diventa + leggibile e tabulato.
    Ora puoi cliccare su modifica

  3. #3
    modificato x bene :gren:

  4. #4
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Ora sto analizzando il codice...
    1 cusriosità:
    Perchè Scrivi Tutto Con Le Iniziali Maiuscole?

  5. #5
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    E poi è logico xkè nn funziona la visualizzazione anticipata!
    Non hai scritto la funzione!

  6. #6
    Originariamente inviato da iguana13
    E poi è logico xkè nn funziona la visualizzazione anticipata!
    Non hai scritto la funzione!
    penso che nn sapia come fare ed è questo che voglia sapere
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  7. #7
    lo so che nn va la funzione anticipa..ho chiesto come la potevo fare

  8. #8
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Ah allora probabilmente il codice arriva fra poco

  9. #9
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012

    Evvai risolto!

    codice:
    void rientro(int r)
    {
    	int i;
    	for(i=0; i<r; i++)
    		//Mette un rientro
    		cout << "   ";
    }
    
    void anticipata (nodo * radice, int liv = 0)
    {
    	//Visualizza il valore
    	rientro(liv);
    	cout << "Valore: " << radice->x << endl;
    
    	//Visualizza la sinistra
    	if(radice->sx != 0)
    	{
    		rientro(liv);
    		cout << "Sinistra:" << endl;
    		anticipata(radice ->sx,liv+1);
    	}
    
    	//Visualizza la destra
    	if(radice->dx != 0)
    	{
    		rientro(liv);
    		cout << "Destra:" << endl;
    		anticipata(radice ->dx,liv + 1);
    	}
    
    }
    :metallica

  10. #10
    thk ora lo provo..anche se mi sono accorto adesso che lo dovevo fare anche usando le classi invece di una struttura

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.