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 22-12-2005, 20: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, 20:25   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 20:47   #3
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 21: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, 07: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, 09: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, 10:07   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2005, 13: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, 20: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, 11:23   #10
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2005, 17: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, 17: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, 20:56   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 28-12-2005, 12: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, 13:50   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 28-12-2005, 16: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, 16: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


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...
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...
OpenAI strappa ad Apple il capo dell'har...
Caso Anthropic, l'Austria all'UE: "...
Occhiali smart a scuola: cresce il numer...
Picchi di consumi e blackout in Italia: ...
Pannelli fotovoltaici e caldo estremo: q...
Colpisce droni in movimento senza fermar...
TikTok punta a diventare una super app: ...
Google contro l'Europa: 'Così sta...
Il Trump Phone è ora ordinabile c...
GTA VI su PS5 8 volte più richies...
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:11.


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