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 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


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 ...
Falla in YouTube Studio: un commento e i...
In Italia sono già 200 i data center att...
SIHOO B100 torna in offerta a 169€ su Am...
C'è un modem router portatile 4G su Amaz...
Wolfenstein 3 è il protagonista d...
Galaxy S27 Ultra potrebbe avere una batt...
DJI Osmo Mobile 8, 7P, 7 e 6 in offerta ...
Volkswagen taglia 100 mila dipendenti, m...
Questa super scopa elettrica Roborock co...
Command & Conquer Generals gira nati...
Isaac 1 in vendita dall'autunno, un vero...
Chiude il più grande archivio di ...
I migliori monitor a partire da 74,99€: ...
Sony aveva realizzato un controller con ...
Geely E2: l'auto elettrica più ve...
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: 14:40.


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