Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
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'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-09-2005, 08:44   #1
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
[PASCAL] Alberi Binari

raga sto correggendo un esercizio che ho fatto, ma per correggerlo devo riempire due Alberi Binari, uno ordinato e l'altro non.

Per riempire l'albero binario ordinato ho usato questa funzione:
Codice:
Procedure InserisciOrd(VAR A:tipoalbero;elem:integer);
begin
     if A=NIL then
     begin
        new(A);
        A^.elem:=elem;
        A^.sx:=NIL;
        A^.dx:=NIL;
     end else if elem<A^.elem then
         InserisciOrd(A^.sx,elem)
     else
         InserisciOrd(A^.dx,elem);
end;
e tutto funziona perfettamente....ma adesso devo riempire un albero binario non ordinato...come si fa?
Il mio albero deve risultare così:
Codice:
                          13
              7                      19    
         2        21                          24
    34      5                           2            5
                                    34     15
spero si capisca.......qualcuno sa dirmi l'algoritmo per riempirlo?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2005, 11:28   #2
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
...up...
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 08:34   #3
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
raga nessuno sa come riempire un albero binario?...
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 08:43   #4
dierre
Senior Member
 
L'Avatar di dierre
 
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2126
edit...un secondo.
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale.
Go to a Wormhole
dierre è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 09:02   #5
dierre
Senior Member
 
L'Avatar di dierre
 
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2126
ti va bene in C++?

Codice:
void CaricaAlbero (record_albero &alb, record_albero aux, int att_liv, int pos_padre){
char c;
tipo_valore val;
if(att_liv == 0) { alb=new record_albero
                      cout << "Inserire la radice";
                      cin >> alb->info;
                      CaricaAlbero (alb, aux, 1, 1); }
                
               else { cout << "Esiste il figlio sinistro dell'elemento" << pos_padre << "del livello" << att_liv-1 << "?";
do c=getch();
while(!((c == 's')||(c=='S')||(c=='n')||(c=='N')));
if ((c=='s')||(c=='S')) { aux->sin=new record_albero;
                                cout << "inserire valore";
                                cin >> aux->sin->info;
                                CaricaAlbero(alb,aux->sin,att_liv+1,pos_padre*2-1); }
                         else aux->sin=NULL;

cout << "Esiste il figlio sinistro dell'elemento" << pos_padre << "del livello" << att_liv-1 << "?";
do c=getch();
while(!((c == 's')||(c=='S')||(c=='n')||(c=='N')));
if ((c=='s')||(c=='S')) { aux->des=new record_albero;
                                cout << "inserire valore";
                                cin >> aux->des->info;
                                CaricaAlbero(alb,aux->des,att_liv+1,pos_padre*2); }
                         else aux->des=NULL;
}
}
se ti serve ti scrivo la struttura dati utilizzata.
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale.
Go to a Wormhole
dierre è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 13:32   #6
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
ti ringrazio...mi sarà utile, certo un po complicato dato che non conosco il C...

non è che riesci a scriverlo anche in Pascal?

in ogni caso ti ringrazio molto
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 13:37   #7
dierre
Senior Member
 
L'Avatar di dierre
 
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2126
purtroppo non lo conosco il pascal, mi spiace.
In c++ è realizzato con struct e puntatori.
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale.
Go to a Wormhole
dierre è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 14:54   #8
trapanator
Senior Member
 
L'Avatar di trapanator
 
Iscritto dal: Mar 2004
Città: al nord
Messaggi: 3873
[quote=leadergl]raga sto correggendo un esercizio che ho fatto, ma per correggerlo devo riempire due Alberi Binari, uno ordinato e l'altro non.

Per riempire l'albero binario ordinato ho usato questa funzione:
Codice:
Procedure InserisciOrd(VAR A:tipoalbero;elem:integer);
begin
     if A=NIL then
     begin
        new(A);
        A^.elem:=elem;
        A^.sx:=NIL;
        A^.dx:=NIL;
     end else if elem<A^.elem then
         InserisciOrd(A^.sx,elem)
     else
         InserisciOrd(A^.dx,elem);
end;

scusa, ma il tuo codice se A è diverso da NIL non fa niente se non che chiamarsi all'infinito... o no?
trapanator è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 14:57   #9
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
Ok...ho risolto, grazie al tuo algoritmo ne ho scritto uno in Pascal che poi ho leggermente modificato per farlo funzionare meglio in Pascal.

Ecco il codice:
Codice:
Procedure Inserisci(VAR A:tipoalbero; Liv_Att,Pos_Padre:integer);
var       ElemTemp:integer;
          c:char;
begin
     if Liv_Att=0 then
     begin
          write('Inserire elemento radice: ');
          readln(elemtemp);
          Inserisci(A,1,elemtemp);
     end else
     begin
          if A=NIL then
          begin
               new(A);
               A^.elem:=pos_padre;
               A^.sx:=NIL;
               A^.dx:=NIL;
          end;
          write('Esiste il figlio sinistro dell''elemento ',pos_padre,' del livello ',liv_att-1,'? ');
          readln(c);
          if (c='s') OR (c='S') then
          begin
               write('Inserire valore: ');
               readln(elemtemp);
               Inserisci(A^.sx,liv_att+1,elemtemp);
          end;
          write('Esiste il figlio destro dell''elemento ',pos_padre,' del livello ',liv_att-1,'? ');
          readln(c);
          if (c='s') OR (c='S') then
          begin
               write('Inserire valore: ');
               readln(elemtemp);
               Inserisci(A^.dx,liv_att+1,elemtemp);
          end;
     end;
End;
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 14:58   #10
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
Quote:
Originariamente inviato da trapanator
scusa, ma il tuo codice se A è diverso da NIL non fa niente se non che chiamarsi all'infinito... o no?
Se A<>NIL il codice scende all'interno dell'albero finchè non trova una foglia vuota...e ci scrive il nuovo contenuto...
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 15:03   #11
trapanator
Senior Member
 
L'Avatar di trapanator
 
Iscritto dal: Mar 2004
Città: al nord
Messaggi: 3873
Quote:
Originariamente inviato da leadergl
Se A<>NIL il codice scende all'interno dell'albero finchè non trova una foglia vuota...e ci scrive il nuovo contenuto...
hai ragione

ho programmato per anni in turbo pascal... bei tempi
trapanator è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 15:03   #12
trapanator
Senior Member
 
L'Avatar di trapanator
 
Iscritto dal: Mar 2004
Città: al nord
Messaggi: 3873
1 curiosità: fai l'ITC?
trapanator è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 15:15   #13
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
no...per mia sfortuna il Turbo Pascal me lo fanno usare all'univ...

Cmq..tornarno al mio esercizio ho notato che non mi da il risultato voluto..
Allo stato attuale:
1) Creo bene i due alberi di test
2) Sembra tutto ok
3) Il risultato è completamente sbagliato ed è un numero casuale che sta in memoria...

vi propongo l'esercizio così magari riuscite a vedere l'errore che io non trovo...
Testo dell'esercizio:
Quote:
Sia A un albero binario ed AO un albero binario ordinato, contenente interi. Scrivere una funzione ricorsiva che dica quante foglie di A sono presenti in AO ma non sono foglie di AO.
Questo è il mio codice:
Codice:
{Esame di Programmazione Mod. B del 20/07/2005}
{Esercizio 5}
Program Esercizio5;
Uses CRT;
Type TipoAlbero=^nodoalbero;
     nodoalbero=RECORD
                      elem:integer;
                      sx, dx:TipoAlbero;
                END;
var Al,AlO:tipoalbero;
    totale,par:integer;

function Trova(AO:TipoAlbero; elem:integer):integer;
var trovato,temp:integer;
begin
     trovato:=0;
     if (AO<>NIL) AND (trovato=0) then
     begin
          if (AO^.elem=elem) then
             if ((AO^.sx=NIL) OR (AO^.dx=NIL)) then
                trovato:=1
          else
          begin
               trovato:=0;
               temp:=Trova(AO^.sx,elem);
               temp:=Trova(AO^.dx,elem);
          end;
     end;
     trova:=trovato;
end;

function Es5(A,AO:tipoalbero; VAR parziale:integer):integer;
var temp:integer;
begin
     if A<>NIL then
     begin
          if (A^.sx=NIL) AND (A^.dx=NIL) then
             parziale:=parziale+trova(AO,A^.elem)
          else
          begin
               temp:=Es5(A^.sx,AO,parziale);
               temp:=Es5(A^.dx,AO,parziale);
          end;
     end else
         Es5:=parziale;
end;

Procedure Stampa(A:tipoalbero);
begin
     if A<>NIL then
     begin
          Stampa(A^.sx);
          writeln(A^.elem);
          Stampa(A^.dx);
     end;
end;

Procedure InserisciOrd(VAR A:tipoalbero;elem:integer);
begin
     if A=NIL then
     begin
        new(A);
        A^.elem:=elem;
        A^.sx:=NIL;
        A^.dx:=NIL;
     end else if elem<A^.elem then
         InserisciOrd(A^.sx,elem)
     else
         InserisciOrd(A^.dx,elem);
end;

Procedure Inserisci(VAR A:tipoalbero; Liv_Att,Pos_Padre:integer);
var       ElemTemp:integer;
          c:char;
begin
     if Liv_Att=0 then
     begin
          write('Inserire elemento radice: ');
          readln(elemtemp);
          Inserisci(A,1,elemtemp);
     end else
     begin
          if A=NIL then
          begin
               new(A);
               A^.elem:=pos_padre;
               A^.sx:=NIL;
               A^.dx:=NIL;
          end;
          write('Esiste il figlio sinistro dell''elemento ',pos_padre,' del livello ',liv_att-1,'? ');
          readln(c);
          if (c='s') OR (c='S') then
          begin
               write('Inserire valore: ');
               readln(elemtemp);
               Inserisci(A^.sx,liv_att+1,elemtemp);
          end;
          write('Esiste il figlio destro dell''elemento ',pos_padre,' del livello ',liv_att-1,'? ');
          readln(c);
          if (c='s') OR (c='S') then
          begin
               write('Inserire valore: ');
               readln(elemtemp);
               Inserisci(A^.dx,liv_att+1,elemtemp);
          end;
     end;
End;


{Main dell'esercizio}
begin
     clrscr;
     writeln('Creazione e Riempimento Albero: AlO');
     InserisciOrd(AlO,28);
     InserisciOrd(AlO,15);
     InserisciOrd(AlO,31);
     InserisciOrd(AlO,13);
     InserisciOrd(AlO,20);
     InserisciOrd(AlO,34);
     InserisciOrd(AlO,5);
     InserisciOrd(AlO,14);
     InserisciOrd(AlO,33);
     writeln('Creazione e Riempimento Albero: Al');
     Inserisci(Al,0,0);
     writeln('Avvio Esercizio 5');
     par:=0;
     totale:=0;
     totale:=Es5(Al,AlO,par);
     writeln;
     writeln('Elementi di A non presenti in Al0 che soddisfano: ',totale);
     writeln;
     writeln('Premere un tasto per continuare!');
     readln;
end.
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 15:48   #14
trapanator
Senior Member
 
L'Avatar di trapanator
 
Iscritto dal: Mar 2004
Città: al nord
Messaggi: 3873
credo che l'errore sia qui:

Codice:
function Es5(A,AO:tipoalbero; VAR parziale:integer):integer;
var temp:integer;
begin
     if A<>NIL then
     begin
          if (A^.sx=NIL) AND (A^.dx=NIL) then
             parziale:=parziale+trova(AO,A^.elem)
          else
          begin
               temp:=Es5(A^.sx,AO,parziale);
               temp:=Es5(A^.dx,AO,parziale);
          end;
     end else
         Es5:=parziale;
end;
noto che non viene verificato se A^.sx oppure A^.dx sono nil
trapanator è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 15:52   #15
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
In un Albero le Foglie sono quei nodi che non hanno figli ne sinistri ne destri...giusto?!

Per questo verifico che entrambi (AND) siano uguali a NIL

Cmq facendo del Debug ho notato che qui succede qualcosa di strano:
Codice:
function Trova(AO:TipoAlbero; elem:integer):integer;
var trovato,temp:integer;
begin
     trovato:=0;
     if (AO<>NIL) AND (trovato=0) then
     begin
          if (AO^.elem=elem) then
             if ((AO^.sx=NIL) OR (AO^.dx=NIL)) then
                trovato:=1
          else
          begin
               trovato:=0;
               temp:=Trova(AO^.sx,elem);
               temp:=Trova(AO^.dx,elem);
          end;
     end;
     trova:=trovato;
end;
In pratica quando sta ad IF (AO^.elem=elem) Then sia che la condizione sia vera che falsa salta automaticamente tutto il blocco e va direttamente a trova:=trovato; il che è sbagliato...

ma non capisco perchè fa così...
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2005, 18:07   #16
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
Modificando in questo modo la procedura funziona bene...bah...:
Codice:
function Trova(AO:TipoAlbero; elem:integer):integer;
var trovato,temp:integer;
begin
     if (AO<>NIL) AND (trovato=0) then
     begin
          if (AO^.elem=elem) AND ((AO^.sx=NIL) OR (AO^.dx=NIL)) then
                trovato:=1
          else
          begin
               temp:=Trova(AO^.sx,elem);
               temp:=Trova(AO^.dx,elem);
          end;
     end;
     trova:=trovato;
end;
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
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: 17:45.


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