Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
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 vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-07-2006, 19:46   #1
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 984
Verificare se h2 è sottolista di h1

Devo risolvere il problema di verificare se una lista data h2 è sottolista di un altra lista data, di nome h1.

Le liste con due campi - h1.info : integer e h1.next : link

Intuitivamente ho scritto la seguente soluzione ricorsiva:
Codice:
....

function sottolista(h1, h2) : boolean

if ( h1 != NULL ) && ( h2 != NULL )
{
     if ( h1.info !=  h2.info ) {
         sottolista (h1, h2.next);
     }else{
         sottolista (h1.next, h2.next);
     }
} else if (h2 == NULL) {
     sottolista = TRUE;
} else {
     sottolista = FALSE;
}
Però com'è facile notare, se:

h1 = 2 -> 0 -> 10 -> 1
h2 = 2 -> 10 -> 1

la funzione restituisce TRUE, mentre il risultato atteso, sarebbe FALSE. L'idea sarebbe di mettere una variabile nell'implementazione che appena h1.info = h2.info, diventa 1, e se successivamente resta cosi; ma se viene trovato che h1.info != h2.info prima che h2 sia NULL, allora diventa 0 e fa fallire il controllo successivo restutuendo FALSE.

Però oltre a essere una pessima soluzione, a quanto ho capito la function deve avere in input solo le due liste e maneggiare quelle, senza l'utilizzo di altre variabili...

Consigli?
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU Radeon RX 9070 XT + RTX 4070 Super | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz

Ultima modifica di Starise : 17-07-2006 alle 00:27.
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2006, 21:22   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Starise
Devo risolvere il problema di verificare se una lista data h2 è sottolista di un altra lista data, di nome h1.

Le liste con due campi - h1.info : integer e h1.next : link
Innanzitutto per "sottolista" intendi che la sequenza di informazioni contenuta nella lista h2 si trova, a partire da un certo punto, nella lista h1?? Io ho capito questo comunque.

Le funzioni ricorsive vanno bene solo per risolvere certi tipi di problemi. Io personalmente parlando, eviterei di usare una funzione ricorsiva per fare un controllo di questo tipo.

Visto che non hai specificato il linguaggio (e il pezzo di codice che hai scritto in che linguaggio è??? ) ti posto una possibile soluzione in linguaggio "C":
Codice:
int sottolista (LISTA *h1, LISTA *h2)
{
    LISTA *h1_save, *h2_orig = h2;

    while (h1 != NULL)
    {
        h1_save = h1;
        h2 = h2_orig;

        while (h1 != NULL && h2 != NULL)
        {
            if (h1->info != h2->info)
                break;
            if (h2->next == NULL)
                return TRUE;

            h1 = h1->next;
            h2 = h2->next;
        }

        h1 = h1_save->next;
    }

    return FALSE;
}
Non l'ho provato ... quindi non mi assumo responsabilità.

EDIT: ulteriore correzione al sorgente.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet

Ultima modifica di andbin : 17-07-2006 alle 08:21.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2006, 22:56   #3
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
il programma sopra ha un errore: non contempla che gli ultimi elementi della lista 1 siano uguali ai primi della lista 2 e che quindi h1 vada a leggere fuori dalla lista.

Codice:
#include <stddef.h>

typedef struct LISTA
{
	int info;
	struct LISTA* next;
} LISTA;


int sottoLista( LISTA* l1, LISTA* l2)
{
  LISTA* p1,*p1copy,*p2,*p2copy;
  p1=l1;          
  p2=l2;
  // p2 e p1 sono pleonastici ma così l1 e l2 continuano a puntare alla testa delle rispettive liste

  while(p1!=NULL)
  {
     if (p1->info==p2->info)
     {
        p1copy=p1;
        p2copy=p2;
        while ((p1copy!=NULL)&&(p2copy!=NULL)&&(p1copy->info==p2copy->info))
        {
           p1copy=p1copy->next;
           p2copy=p2copy->next;
        }
        if (p2copy==NULL)
            return 1;
     }
        p1=p1->next;
  }
  return 0;
}

compilato 0 errori

Ultima modifica di Black imp : 17-07-2006 alle 00:33.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 00:31   #4
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 984
Quote:
Originariamente inviato da andbin
Visto che non hai specificato il linguaggio (e il pezzo di codice che hai scritto in che linguaggio è??? )
Nessuno! Pseudolinguaggio... siccome il mio prof. dell'uni ci fa fare esercizi in plike, però io mi trovo a scrivere in Clike... ehehehe viene fuori un "merge" dei due terrificante.
Quote:
Originariamente inviato da andbin
Le funzioni ricorsive vanno bene solo per risolvere certi tipi di problemi. Io personalmente parlando, eviterei di usare una funzione ricorsiva per fare un controllo di questo tipo.
Si, onestamente lo penso anch'io. Iterativamente anch'io avevo sviluppato una mezza soluzione, il problema è che l'esercizio impone l'utilizzo della ricorsione...
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU Radeon RX 9070 XT + RTX 4070 Super | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 00:34   #5
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
ho aggiunto il return 0 al mio codice.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 00:40   #6
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 984
Quote:
Originariamente inviato da Black imp
ho aggiunto il return 0 al mio codice.
Adesso è tardi.. ma domani cerco di ricavarne una f ricorsiva.
grazie per la disponibilità
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU Radeon RX 9070 XT + RTX 4070 Super | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 08:30   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Black imp
il programma sopra ha un errore: non contempla che gli ultimi elementi della lista 1 siano uguali ai primi della lista 2 e che quindi h1 vada a leggere fuori dalla lista.
Sì ... è vero mi era sfuggito quel caso (l'ho detto che non l'ho provato ). Ho quindi semplicemente aggiunto il test di h1 nel secondo while. Così dovrebbe andare. Grazie della segnalazione.


@Starise:
Ok, ora ho capito perché hai usato la ricorsione ... però non ho alcuna voglia di provare a scrivere la funzione con la ricorsione. Non ce l'ho con te .... ma con chi inventa e propone questi esercizi del kaiser che non servono proprio a una mazza.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 11:18   #8
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 984
Quote:
Originariamente inviato da andbin
@Starise:
Ok, ora ho capito perché hai usato la ricorsione ... però non ho alcuna voglia di provare a scrivere la funzione con la ricorsione. Non ce l'ho con te .... ma con chi inventa e propone questi esercizi del kaiser che non servono proprio a una mazza.
A chi lo dici!
Adesso sto provando una soluzione ricorsiva, ma, sarà che non c'ho la testa... però non riesco a farne una corretta.. o meglio, farne una corretta usando come parametri in ingresso solo le teste della liste...! Cavolo, ma ci vuole per forza un appoggio, una variabile di stato, qualcosa.... uff...

Cioè, ricorsivamente, quando vado a fare un controllo su h1.info e h2.info, quando risultano uguali, io DEVO conoscere se già precedentemente è stato trovato qualche elemento uguale... ma come faccio a dirlo alla successiva chiamata? Non lo so... forse mi sto solo complicando la vita... adesso smetto, fra poco vado a mensa, poi torno a lavorarci su.... lo so che è un es. del KAISER, ma devo trovare una soluzione!
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU Radeon RX 9070 XT + RTX 4070 Super | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 13:25   #9
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
ah scusa ho capito adesso che eri obbligato a usare una funzione ricorsiva. guarda che è uno scherzetto: non puoi risolverlo facendo il confronto tramite ricorsione perchè tu devi sempre avere la testa di h2. allora non fai altro che
[EDIT]... cerchi ricorsivamente scandendo h1 il primo elemento uguale al primo di h2 e quando lo trovi fai il confronto iterativo. guarda che NON E' POSSIBILE fare altrimenti a meno che il primo elemento uguale di h1 debba per forza essere il primo della lista. allora è una cazzata. ma se la sottolista può trovarsi in mezzo alla prima lista non puoi non usare una iterazione su h2 perchè se no perdi la testa della lista.


Codice:
funzione(const LISTA * h1, const LISTA * h2)
{ 
   LISTA * l1,l2;
   l1=h1;
   l2=h2;
   if (h1==NULL)
     return false;
   if (h1->info==h2->info)
   {
      for(;(h1=!NULL)&&(h2!=NULL)&&(h1->info==h2->info);)
      {
         h1=h1->next;
         h2=h2->next;
      }
      if (h2==NULL)
        return true;
 
   }
           // non abbiamo trovato ancora il primo elemento uguale o la sottostringa
    return funzione(l1->next,l2);    // ricorsione su h1
}

Ultima modifica di Black imp : 17-07-2006 alle 18:34.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 14:13   #10
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 984
La tua soluzione è buona, ma non considera il caso in cui:

h1 = 1 -> 2 -> 3 -> 1 -> 2 -> 4

h2 = 1 -> 2 -> 4

La tua funzione una volta trovato un elemento uguale scorre fin quando un elemento non è diverso, o una delle liste è NULL, poi ritorna un valore. Tuttavia, come vedi nell'esempio che ho fatto sopra, più avanti, in h1 potrebbe esserci una esatta corrispondenza di elementi di h2, e quindi il risultato atteso è TRUE, mentre la tua funzione restituisce immediatamente FALSE.

E' un casino sta cosa... perchè c'è bisogno, una volta completato il while, di restituire TRUE, oppure continuare a valutare la situazione finchè h1 = NULL.

Nel frattempo ho scritto questa: (scusate se uso una notazione pLike ma purtroppo gli esercizi devo farli in questa maniera; questo significa che oltre a non poterla provre, se non a mente, non posso usare break; oppure return che sono istruzioni del C. Sarebbe stato più facile.. )

Codice:
function sottolista (h1,h2) : boolean
...
if ( h1 != NULL ) then
    if ( h1.info != h2.info ) then
       sottolista ( h1.next, h2 )
    else /* h1.info e h2.info sono uguali */
        h1_temp = h1
        h2_temp = h2
        while ( h1_temp != NULL ) AND ( h2_temp != NULL ) AND ( h1_temp.info = h2_temp.info ) do
             h1_temp = h1_temp.next
             h2_temp = h2_temp.next
             if( h2_temp = NULL ) then
                 sottolista = TRUE;
             else
                 sottolista ( h1.next, h2 )
             endif
        endwhile
    endif
else /* h1 è diventato NULL */
       sottolista = FALSE
endif
...
end function
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU Radeon RX 9070 XT + RTX 4070 Super | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 14:18   #11
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
sì ho sbagliato. il primo return false va tolto. il secondo va lasciato ma va tolto l'else. adesso è giusto.

correggo il codice...

ho anche aggiunto una variabile che memorizza h1.

Ultima modifica di Black imp : 17-07-2006 alle 14:21.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 14:26   #12
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
sto leggendo il tuo. la chiusura del while è sbagliata. deve finire dopo i due assegnamenti prima dell'if. e poi non hai salvato il valore di h1 quindi ricorri dopo il while, se la sottolista non è stata trovata, passando un elemento della lista che non è il successivo di quello che stavi esaminando all'inizio.

una cosa, fai attenzione anche nello pseudocodice ad abituarti a differenziare quando stai assegnando un valore e quando lo stai confrontando. nel primo caso usi '=' o ':=' nel secondo usa '=='. altrimenti se in C scrivi if(a=2) anzichè if(a==2) ti darà sempre true!
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 14:59   #13
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 984
Beh, cosa dire, adesso la tua soluzione sembra perfetta e funzionante in ogni caso!! Sai, mi spiace di averti fatto perdere tanto tempo, ma ancora trovo ostico l'approccio corretto a utilizzare dei metodi ricorsivi, soprattutto in questo tipo di esercizi.

Mi fa rabbia che poi non era tanto difficile... mi sono "inceppato" per delle stupidate e questo mi fa rabbia! Spero di trovare in rete (perchè sul mio libro sono praticamente inesistenti) delle risorse e degli esercizi su questa tipologia di problemi... mi sa che passerò il resto di luglio a studiare!!!

Comunque mi sei stato davvero di grandissimo aiuto! Grazie e ancora grazie!
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU Radeon RX 9070 XT + RTX 4070 Super | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:10   #14
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 984
Quote:
Originariamente inviato da Black imp
una cosa, fai attenzione anche nello pseudocodice ad abituarti a differenziare quando stai assegnando un valore e quando lo stai confrontando. nel primo caso usi '=' o ':=' nel secondo usa '=='. altrimenti se in C scrivi if(a=2) anzichè if(a==2) ti darà sempre true!
Lo so! E' un mio difetto che devo togliere!
Grazie per il consiglio, ne farò tesoro!
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU Radeon RX 9070 XT + RTX 4070 Super | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:26   #15
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da Starise
Beh, cosa dire, adesso la tua soluzione sembra perfetta e funzionante in ogni caso!! Sai, mi spiace di averti fatto perdere tanto tempo, ma ancora trovo ostico l'approccio corretto a utilizzare dei metodi ricorsivi, soprattutto in questo tipo di esercizi.

Mi fa rabbia che poi non era tanto difficile... mi sono "inceppato" per delle stupidate e questo mi fa rabbia! Spero di trovare in rete (perchè sul mio libro sono praticamente inesistenti) delle risorse e degli esercizi su questa tipologia di problemi... mi sa che passerò il resto di luglio a studiare!!!

Comunque mi sei stato davvero di grandissimo aiuto! Grazie e ancora grazie!

figurati è stato un piacere almeno mi sono distratto dalla pallosissima documentazione che sto facendo per l'ultimo elaborato della mia vita - poi c'è la tesi... -. non affliggerti per due ragioni: 1 la ricorsione non è inizialmente intuitiva, è un modello di pensiero frattale cui non siamo abituati. 2 questa ricorsione è ingannevole pretestuosa perchè in realtà il confronto non puoi farlo per ricorsione ma per iterazione e utilizzi la ricorsione al posto di un ciclo esterno che scorra h1 quindi è del tutto pleonastica. ci sono problemi di ricorsione vera che non hanno bisogno di tenere traccia di alcunchè tra una chiamata e l'altra come l'esplorazione di un albero.

ecco se cerchi esempi di ricorsione cerca codice sugli alberi, vedrai che si fa quasi tutto per ricorsione. in bocca al lupo!
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 17:50   #16
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 984
Quote:
Originariamente inviato da Black imp
....non affliggerti per due ragioni: 1 la ricorsione non è inizialmente intuitiva, è un modello di pensiero frattale cui non siamo abituati. 2 questa ricorsione è ingannevole pretestuosa [cut]....
ci sono problemi di ricorsione vera che non hanno bisogno di tenere traccia di alcunchè tra una chiamata e l'altra come l'esplorazione di un albero.
Darò un'occhiata, comunque sto iniziando a entrare un pochino nell'ottica della ricorsione. L'importante è individuare un caso banale in cui fermare il programma, un caso in cui fare la ricorsione.... poi tutto il resto viene ""da se""!
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU Radeon RX 9070 XT + RTX 4070 Super | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 19:19   #17
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 984
@Black imp - hai la casella pvt piena!
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU Radeon RX 9070 XT + RTX 4070 Super | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 19:27   #18
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da Starise
@Black imp - hai la casella pvt piena!

liberata
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 21:50   #19
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da Starise
Darò un'occhiata, comunque sto iniziando a entrare un pochino nell'ottica della ricorsione. L'importante è individuare un caso banale in cui fermare il programma, un caso in cui fare la ricorsione.... poi tutto il resto viene ""da se""!
Il codice ricorsivo non è poi cosi' difficile in questo caso, anzi, secondo me piu' comprensibile. In questo caso possiamo scriverlo con una doppia ricorsione:
Codice:
/* WARNING: è un po' di tempo che non scrivo codice C++... :D */
struct Lista
{
    int value;
    Lista* next;
};


bool iniziaCon( Lista* h2, Lista* h1 )
{
    if (h1 == 0)
        return true;
    if (h2 == 0)
        return false;
    return h1->value == h2->value && iniziaCon(h2->next,h1->next);
}

bool sottolista( Lista* h1, Lista* h2 )
{
    if (h1 == 0)
        return true;
    if (h2 == 0)
        return false;
    return iniziaCon( h2, h1 ) || sottolista(h1,h2->next);
}
Se guardi bene si legge praticamente come si scrive:
- una lista vuota è sottolista di qualsiasi lista
- nessuna lista non vuota è sottolista di una lista vuota
- h1 è sottolista di h2 se h2 inizia con h1, oppure se h1 è sottolista della coda di h2

Seconda ricorsione, iniziaCon. Per prima abbiamo i due casi base:
- la lista vuota è l'inizio di qualsiasi lista
- nessuna lista (non vuota) è l'inizio di una lista vuota.
- Se h1 e h2 non sono vuote, h2 inizia con h1 se i due valori in testa coincidono e la coda di h2 inizia con la coda di h1
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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 ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
Rocket Lab acquisisce Iridium: nasce un ...
Una ventola nascosta e un design fuori d...
Display e fotocamera insieme: a Zurigo n...
Lenovo Idea Tab Plus, il tablet per stud...
Un ingegnere di AMD ha riprodotto in cas...
SanDisk Optimus cresce con nuovi SSD cer...
Loongson contro Intel e AMD: dalla Cina ...
Australia, quasi tutti gli under-16 aggi...
Oltre 1.300 miliardi di dollari per la p...
Un nuovo studio mette in dubbio la natur...
Crisi Volkswagen, torna l'ipotesi cessio...
Il CERN spegne il Large Hadron Collider:...
Stranger Than Heaven avrà una storia mol...
Il futuro prezzo di PS6 preoccupa i gioc...
AMD Ryzen 10000 sempre più vicini...
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: 04:05.


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