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 05-02-2008, 16:50   #1
nixonik
Junior Member
 
Iscritto dal: May 2006
Messaggi: 19
[C] Esercizio su liste

salve, visto che domani ho un esame, qualcuno sarebbe così gentile da dirmi come si fa in C questo esercizio?
E' un esercizio vecchio, vorrei solo capire come vanno modificati i puntatori perchè non capisco.

Scrivere una funzione C:
lista alternaListaPlace (lista L, lista M)
che restituisce una lista in cui i nodi di L sono alternati con quelli di M. Eseguire l'operazione
senza allocare nuova memoria, ma semplicemente spostando i puntatori. Se una delle due liste è più
corta dell'altra, la coda della più lunga viene semplicemente attaccata in fondo. Restituire come
risultato un puntatore alla testa della lista alternata.

Ultima modifica di nixonik : 05-02-2008 alle 17:33.
nixonik è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 17:17   #2
stdecden
Member
 
L'Avatar di stdecden
 
Iscritto dal: Apr 2007
Messaggi: 263
Cosa intendi per lista alternata

lista1 = [1 3 5 7 9]
lista2 = [2 4 6 8]
listaAlt = [1 2 3 4 5 6 7 8 9]
stdecden è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 17:27   #3
nixonik
Junior Member
 
Iscritto dal: May 2006
Messaggi: 19
esatto....come dice senza allocare nuova memoria, ma soltanto modificando i puntatori..
nixonik è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 17:28   #4
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Tra le regole del forum ce n'è una che dice : "Non si risolvono esercizi completi di scuola o università" .

Posta una tua soluzione (probabilmente sbagliata) e poi noi la correggiamo

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 17:29   #5
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Ah, cambia il titolo del thread in "[C] Esercizio su liste" il prima possibile , altrimenti appena arriva cionci te lo chiude :/
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 17:37   #6
nixonik
Junior Member
 
Iscritto dal: May 2006
Messaggi: 19
lo so, ma io non ho idea di come si faccia...avevo fatto qualcosa del genere

Codice:
slistptr alternalista (slistptr L, slistptr M)
{
         slistptr alternata;
         int c=1;
         
         while ((L!=NULL)||(M!=NULL))
          {
            if (c%2==0){
              alternata->str=M->str;
              M=M->next;}
            else{
              alternata->str=L->str;
              L=L->next;}
            c++;
            alternata=alternata->next;
          }
         while (alternata!=NULL)
     {
      printf("%d -> ",alternata->str);
      alternata=alternata->next;
     }}
ma è completamente sbagliata...uno perchè credo che facendo così c'è bisogno di allocare memoria...e io devo modificare solo i puntatori...
ILLUMINATEMI
non devo consegnare l'esercizio, è solo che domani ho l'esame e vorrei capirci meglio
nixonik è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 18:58   #7
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Prova questa versione.

Non ti assicuro che funzioni perchè non ho potuto provarla (su sto PC non ho un compilatore C purtroppo) . E' una versione ricorsiva. Distrugge entrambe le liste (E' l'unico modo di fare se non ne vuoi allocare un altra) e ne crea un altra che è la concatenazione delle due nel modo richiesto (in teoria )

Codice:
slistptr alternaListe(slistptr L, slistptr M) {
  if (L == NULL)
    return M;
  if (M == NULL)
    return L;
  L->next = alternaListe(M, L->next);

  return L;
}
Fammi sapere se funziona

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 19:11   #8
nixonik
Junior Member
 
Iscritto dal: May 2006
Messaggi: 19

Funziona
non passerò mai questo esame
Grazie cmq

Mi spiegheresti com'è che fa a funzionare però? O.o

diciamo che se la L è vuota ritorna M e se M è vuota ritorna L..fin qui ok....
poi non capisco l'assegnazione..nel secondo elemento di L mette...?? come funziona? :S

Ultima modifica di nixonik : 05-02-2008 alle 19:27.
nixonik è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 20:09   #9
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Eh, le funzioni ricorsive possono essere un po' criptiche

La funzione spezzetta il problema in parti sempre più semplici (ad ogni chiamata di funzione) fino a raggiungere il momento in cui il problema è talmente semplice da essere risolvibile con una (o poco più) istruzione.

Il metodo di "spezzettamento" è richiamare la funzione "alternaListe()" invertendo i suoi parametri (cioè facendo diventare nella successiva chiamata quella che correntemente è M la L e quella che adesso è L->next la M della nuova chiamata).

Questo procedimento di inversione inquadra perfettamente il problema originale che è "alternare" gli elementi all'interno delle liste, infatti, se noti , la lista che nella prima chiamata è L nella seconda diventa M per poi tornare L nella terza chiamata. In pratica si alternano, esattamente come deve succedere per gli elementi della lista finale. Inoltre con il L->next piano piano si avanza nella lista elemento per elemento arrivando infine a NULL (quando una delle due liste sarà stata completamente iterata).


A questo punto il lavoro della funzione è terminate e ritorna l'altra lista che non è NULL come ultimo elemento della nuova lista (o se le liste hanno la stessa lunghezza ritorna comunque NULL).


Putroppo spiegare il funzionamento di una funzione ricorsiva senza un appoggio grafico è tosta. Ti consiglio di farti uno schizzetto su carta segnandoti i valori delle variabili tra le varie chiamate di funzioni per due liste relativamente corte (2 o 3 elementi)

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 20:28   #10
nixonik
Junior Member
 
Iscritto dal: May 2006
Messaggi: 19
ci proverò...
grazie mille per il tuo tempo
nixonik è 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: 00:01.


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