Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Mentre Ubisoft vorrebbe chiedere agli utenti, all'occorrenza, di distruggere perfino le copie fisiche dei propri giochi, il movimento Stop Killing Games si sta battendo per preservare quella che l'Unione Europea ha già riconosciuto come una forma d'arte. Abbiamo avuto modo di parlare con Daniel Ondruska, portavoce dell'Iniziativa Europa volta a preservare la conservazione dei videogiochi
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Abbiamo provato il nuovo Galaxy S25 Edge, uno smartphone unico per il suo spessore di soli 5,8 mm e un peso super piuma. Parliamo di un device che ha pro e contro, ma sicuramente si differenzia dalla massa per la sua portabilità, ma non senza qualche compromesso. Ecco la nostra prova completa.
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
Pensato per il professionista sempre in movimento, HP Elitebook Ultra G1i 14 abbina una piattaforma Intel Core Ultra 7 ad una costruzione robusta, riuscendo a mantenere un peso contenuto e una facile trasportabilità. Ottime prestazioni per gli ambiti di produttività personale con un'autonomia lontano dalla presa di corrente che permette di lavorare per tutta la giornata
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: 2125
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: 2125
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: 2125
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


Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Tesla sta per lanciare il Robotaxi nella...
Dead Island 2 arriva su Mac, ma a un pre...
FIA e Formula E rinnovano il matrimonio:...
Windows 11 24H2 approda su nuovi sistemi...
Le restrizioni americane hanno generato ...
Una Mercedes EQS con batterie allo stato...
Il robot Walker S2 della Cina cambia la ...
Cosa vuol dire "vantaggio quantisti...
Retelit punta sulla connettività ...
Novità WhatsApp: promemoria sui m...
AMD: la prossima generazione di schede v...
MediaWorld potrebbe diventare cinese: Ce...
Amazon in delirio da sconti: 22 articoli...
EOLO ha più di 700 mila utenti in...
Una spin-off del MIT ha creato dei super...
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: 23:53.


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