Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-12-2005, 21:09   #1
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1846
[C] Non riesco a capire alcune cose sulle code

Scusate ma non riesco proprio a capire questo codice sulle code.
Allora il codice seguente l'ha scritto il mio prof di programmazione.

Codice:
struct cella
{
    int valore;
    struct cella *next;
};

struct wrapperCoda
{
    struct cella *ptrTesta;
    struct cella *ptrCoda;
};

int creaElemento(struct wrapperCoda *c, int num);
void stampaCoda(struct wrapperCoda c);
int cercaInCoda(struct wrapperCoda c, int numero);
int eliminaElemento(struct wrapperCoda *c, int num);
void resetCoda(struct wrapperCoda *c);

int main()
{
    struct wrapperCoda coda ;
    coda.ptrTesta = NULL;
    coda.ptrCoda = NULL;
}

void resetCoda(struct wrapperCoda *c)
{
    struct cella *temp;
    
    while ((*c).ptrCoda != NULL)
    {
        temp = (*c).ptrCoda;
        (*c).ptrCoda = (*c).ptrCoda->next;
        free(temp);
    }
    c->ptrTesta = NULL;    
}

/*
restituisce 1 se l'elemento è stato eliminato, 0 altrimenti
*/
int eliminaElemento(struct wrapperCoda *c, int num)
{
    struct cella *prec, *temp;
    
    temp = (*c).ptrCoda;
    prec = NULL;
    
    while (temp != NULL)
    {
        if (temp->valore == num)
        {
            if (prec == NULL)
                (*c).ptrCoda = (*c).ptrCoda->next;
            else
            {
                prec->next = temp->next;
                if (prec->next == NULL)
                    (*c).ptrTesta = prec;
            }    
            free(temp);
            return 1;
        }
        prec = temp;
        temp = temp->next;
    } 
    
    return 0;
}

/*
viene restituito 1 se l'elemento è stato inserito, 0 se l'elemento è già presente in coda
*/
int creaElemento(struct wrapperCoda *c, int num)
{
    struct cella *nuovoElemento;
    
    if (cercaInCoda(*c,num) == 0)
    {
        nuovoElemento = (struct cella*)malloc(sizeof(struct cella));
        if (nuovoElemento == NULL)
        {
            printf("\n\n Errore nell\'allocazione della memoria.\n Il programma verra\' chiuso!\n ");
            system("pause");                    
            exit(1);
        }
        nuovoElemento->valore = num;
        nuovoElemento->next = NULL; 
        if ((*c).ptrTesta != NULL)
            (*c).ptrTesta->next = nuovoElemento;
        else
            (*c).ptrCoda = nuovoElemento;
        (*c).ptrTesta = nuovoElemento;
        return 1;
    }    
    else
        return 0;
}
Ho tagliato i pezzi che non mi interessavano, analizzando le funzioni non capisco le seguenti cose:

1) Quando viene creata la lista, diciamo una lista di 5 elementi
struct cella *ptrTesta e struct cella *ptrCoda che sono elementi del wrapper a cosa puntano? (dal nome direi testa al primo elemento e coda all'ultimo ma non capisco perchè).
2) Il ciclo che elimina la coda a guardare il codice mi sembra che cancelli gli elementi a partire dall'ultimo, invece quando uso il codice in un programma mi cancella dal primo.
-Ivan- è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 21:25   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da -Ivan-
Scusate ma non riesco proprio a capire questo codice sulle code.
Allora il codice seguente l'ha scritto il mio prof di programmazione.
Ma il tuo prof è un genio se riesce a scrivere:

(*c).ptrCoda

invece di

c->ptrCoda

(io ce l'ho un pochino con i prof perché mi hanno rovinato la carriera... mica per altro)

P.S. adesso leggo bene il codice e ti dico.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 21:47   #3
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da -Ivan-
1) Quando viene creata la lista, diciamo una lista di 5 elementi
struct cella *ptrTesta e struct cella *ptrCoda che sono elementi del wrapper a cosa puntano? (dal nome direi testa al primo elemento e coda all'ultimo ma non capisco perchè).
2) Il ciclo che elimina la coda a guardare il codice mi sembra che cancelli gli elementi a partire dall'ultimo, invece quando uso il codice in un programma mi cancella dal primo.
Semplice ... le due variabili sono gestite al "contrario". ptrTesta punta sempre all'ultimo elemento inserito mentre ptrCoda punta al primo elemento inserito.

Piuttosto (non avendo tutto il sorgente completo):

if (cercaInCoda(*c,num) == 0)

così gli passa la struttura per valore. Che gli serve a fare?

Dai ... 10 e lode al prof e non ne parliamo più
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 22:52   #4
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1846
Quote:
Originariamente inviato da andbin
Semplice ... le due variabili sono gestite al "contrario". ptrTesta punta sempre all'ultimo elemento inserito mentre ptrCoda punta al primo elemento inserito.

Piuttosto (non avendo tutto il sorgente completo):

if (cercaInCoda(*c,num) == 0)

così gli passa la struttura per valore. Che gli serve a fare?

Dai ... 10 e lode al prof e non ne parliamo più
Porca pupazza ecco io davo quasi per scontato che testa puntasse al primo e code all'ultimo e questo mi faceva partire con i "pregiudizi" nella lettura del codice.
Dio sto schiattando non ci capisco più una mazza tra code pile e alberi qualcuno mi salvi.
Grazie come al solito delle risposte .
-Ivan- è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2005, 08:14   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Come sempre andbin ha dato una risposta impeccabile.

Direi che quel codice e' davvero strano, e mi sembra impossibile che sia stato scritto da un professore. Oltretutto doveva essere codice con uno scopo didattico...

E' davvero difficile pensare che questo codice sia stato scritto per la gestione di una coda, non essendo nemmeno una lista bidirezionale. Il fatto che memorizzi l'elemento di coda non importa a nessuno. Inoltre l'inserimento non avviene ad un estremo, come d'altronde la cancellazione.

Proprio strano. Tienici informati

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2005, 10:06   #6
cj++
Member
 
L'Avatar di cj++
 
Iscritto dal: Sep 2005
Città: Barcelona
Messaggi: 200
Quote:
Originariamente inviato da andbin
Ma il tuo prof è un genio se riesce a scrivere:
(*c).ptrCoda invece di c->ptrCoda
Questo è niente. Io ho avuto chi scriveva
*((*((*(myArray+i))+j))+k)
invece di myArray[i][j][k]

__________________
Code without tests is broken by design.
cj++ è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2005, 11:07   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da cj++
Questo è niente. Io ho avuto chi scriveva
*((*((*(myArray+i))+j))+k)
invece di myArray[i][j][k]
Per carità!!! Se qualche mio collega facesse una cosa del genere in un sorgente C allora ...
uaaataaaa! lo spiezzo in due, compresa la tastiera
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2005, 14:50   #8
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1846
Quote:
Originariamente inviato da sottovento
Come sempre andbin ha dato una risposta impeccabile.

Direi che quel codice e' davvero strano, e mi sembra impossibile che sia stato scritto da un professore. Oltretutto doveva essere codice con uno scopo didattico...

E' davvero difficile pensare che questo codice sia stato scritto per la gestione di una coda, non essendo nemmeno una lista bidirezionale. Il fatto che memorizzi l'elemento di coda non importa a nessuno. Inoltre l'inserimento non avviene ad un estremo, come d'altronde la cancellazione.

Proprio strano. Tienici informati

High Flying
Sottovento

E' stato scritto dal mio prof di programmazione, il problema è che io l'ho usato circa uguale nel mio progetto e adesso mi si stanno complicando le cose.
Non vi faccio vedere il codice per le pile ma anche quello mi sta dando dei bei problemi.
-Ivan- è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2005, 21:17   #9
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
io non capisco perchè per gestire la struttura delle code che è la più semplice al mondo il tuo prof. abbia usato i puntatori...

sono sempre stato abituato ad usare le code per un numero finito di elementi, altrimenti non sarebbe una coda...nel senso che una coda prima o poi si riempie quindi sappiamo a priori quanti elementi dovrebbe contenere, di conseguenza mi viene spontaneo pensarla come una "struttura" che non fa altro che gestire in maniera particolare un vettore; ovvero gestirlo in maniera circolare!
__________________
| 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 24-12-2005, 12:23   #10
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Ecco una bella gestione di una coda usando un array invece di una lista. Spero possa esservi utile.
Allegati
File Type: zip queue_arr.zip (1.6 KB, 6 visite)
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2005, 18:34   #11
nightfly
Senior Member
 
Iscritto dal: Jun 2005
Città: Reggio Calabria
Messaggi: 377
Il codice è macchinoso e poco chiaro... è evidente che lo scopo di tale esempio non è illustrativo o tantomeno didattico... l'unica cosa che risulta chiara sono l'inizializzazione della testa e delle coda (che identificano la pila) a null poichè originariamente la pila si suppone vuota... oltre alle diverse funzioni che implementano le varie operazioni da eseguire su di essa (cancellazione, inserimento ecc ecc). Peccato per i body di ciascuna di esse, praticamente incomprensibile. Dici al tuo prof di iniziare a leggere il significato degli operatori booleani e non, e dopo, eventualmente, di proporti un esempio del genere Saluti.
__________________
Here Comes The Music Ecstasy
nightfly è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2005, 18:19   #12
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1846
Infatti io all'iti ricordo che le pile e le code non mi davano problemi però ora non ci capisco più niente.
Porca miseria visto che ci siamo:
una pila può essere stampata senza che venga svuotata?

questa è la funzione che la stampa fatta dal mio prof:
Codice:
void stampaPila(struct cella **t)
{
    struct cella *temp;
    
    printf("\n");
    if (t == NULL)
    {
        printf(" La pila e\' vuota!\n");
        return;
    }
    
    do
    {
        temp = pop(t);
        printf(" valore: %d\n",temp->valore);
        free(temp);
    } (*t != NULL); 
}
struct cella * pop(struct cella **t)
{
    struct cella *temp;

    if (*t == NULL)
        return NULL;
    temp = *t;
    *t = (*t)->next;
    temp->next = NULL; 
    return temp;
}
La pila contiene solo un campo int valore e il puntatore next.
t è una variabile di tipo cella.
Ho tre giorni per finire il progetto e sono messo veramente male.
-Ivan- è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2005, 21:56   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da -Ivan-
una pila può essere stampata senza che venga svuotata?
Beh, certo. È solo questione di studiare come accedere alla pila senza fare casini sul contenuto.

Quote:
Originariamente inviato da -Ivan-
questa è la funzione che la stampa fatta dal mio prof:
Codice:
...
A ridaje con il codice del prof ...
Non capisco la necessità del doppio puntatore struct cella **t (non ho il codice completo, comunque) e non capisco perché si debba eseguire una funzione pop() per stampare i dati in una pila se non la si vuole svuotare!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 28-12-2005, 13:53   #14
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da cj++
Questo è niente. Io ho avuto chi scriveva
*((*((*(myArray+i))+j))+k)
invece di myArray[i][j][k]

Coding HORROR!
Dovresti farlo partecipare all'OCCC.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 28-12-2005, 14:50   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da DanieleC88
Dovresti farlo partecipare all'OCCC.
IOCCC, "International Obfuscated C Code Contest", www.ioccc.org

Indubbiamente, uno che scrive *((*((*(myArray+i))+j))+k) ha molte buone possibilità di vincere, specialmente nella categoria "Abuse of the rules".
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 28-12-2005, 17:05   #16
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da andbin
IOCCC, "International Obfuscated C Code Contest", www.ioccc.org
Ah, avevo dimenticato la I... e vabbe', tutti posso sbagliare.
Quote:
Originariamente inviato da andbin
Indubbiamente, uno che scrive *((*((*(myArray+i))+j))+k) ha molte buone possibilità di vincere, specialmente nella categoria "Abuse of the rules".
Appunto!
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 28-12-2005, 17:21   #17
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1846
Forse il mio prof ha intenzione di farci partecipare tutti e ci sta preparando in segreto.
Si spiega tutto adesso.
Tra poco metterò mano agli alberi...ho paura .
-Ivan- è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
I Meta Ray-Ban Display potrebbero non ar...
La serie di God of War ha trovato l'attr...
Il nuovo iPhone Fold si farà atte...
Ex CEO di Intel furioso verso Wall Stree...
Un foglietto di rame e le prestazioni di...
100 agenti AI per dipendente: quello che...
Le 10 migliori offerte del weekend Amazo...
75'' e 85'' QD-Mini LED: 2 TV interessan...
Offerte Amazon sui componenti hardware P...
iOS 27 porterà tante novità...
Tutte le migliori offerte sui robot aspi...
Attenti ai Samsung 990 Pro contraffatti,...
2 prezzi eccezionali: scope elettriche l...
Crimson Desert arriva anche su Switch 2?...
2 iPhone in offerta su Amazon: il 17 256...
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: 18:11.


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