[C++] Strutture

Messaggioda Cip Upupa » 19/09/2017, 14:41

Ciao a tutti! Sono alle prese con questo argomento: classi e strutture.

Ebbene, diciamo che ho capito più o meno buona parte della teoria che ci sta dietro, ma ho difficoltà a lavorarci sopra. Ad esempio, questo esercizio:

Dato questo codice:
Codice:
struct elem{
    int tipo;
    float fattore;
    elem*punt;
} oggetto[20];


Come indico:
(1) "fattore" del terzo "oggetto"?
(2) "tipo" del primo?
(3) "punt" dell'ultimo?

Avendo invece
Codice:
struct elem{
    int tipo;
    float fattore;
    elem*punt;
};


(a) Cosa devo dichiarare per poter accedere al primo elemento della lista?
(b) Come posso fare per capire che un elemento e’ l’ultimo elemento della lista?
(c) Come potrei modificare la struttura elem per poter percorrere la lista muovendomi in avanti e all’indietro?



Chiedo scusa se non posto tentativi di soluzione, ma non so come procedere. :roll:
Se qualcuno potesse spiegarmi il ragionamento e la sintassi che ci sta dietro, ne sarei immensamente grato!

Grazie in anticipo a tutti.
Cip Upupa
Starting Member
Starting Member
 
Messaggio: 11 di 40
Iscritto il: 16/07/2017, 17:34

Re: [C++] Strutture

Messaggioda Super Squirrel » 19/09/2017, 16:16

Con

Codice:
struct elem{
    int tipo;
    float fattore;
    elem *punt;
};


dichiari una struttura composta da 3 membri. Inoltre nel C++ la definizione di una struttura comporta la creazione di un nuovo tipo (astratto, in contrapposizione ai tipi nativi del linguaggio come int, float, ecc...).
A questo punto puoi utilizzare l'istruzione

Codice:
elem oggetto[20];


per dichiarare un array di nome "oggetto" costituito da 20 oggetti di tipo "elem".
Non ne ero al corrente, ma a quanto pare la scrittura

Codice:
struct elem{
    int tipo;
    float fattore;
    elem *punt;
} oggetto[20];


dovrebbe essere equivalente, anche se mi sembra meno chiara.
Detto questo come si accede ad un membro di una struttura? Gli operatori . e -> ti ricordano qualcosa?

Per quanto riguarda la seconda richiesta c'è da dire che il passaggio da struttura/classe al concetto di lista non è così immediato. Sai cos'è una lista e come funziona?
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 143 di 1486
Iscritto il: 16/05/2013, 22:05

Re: [C++] Strutture

Messaggioda Cip Upupa » 19/09/2017, 18:10

Allora, conosco il . ma non la ->...

Ma non ho grandi idee su come applicarlo concretamente... se dichiaro elem oggetto[20], poi come uso il punto per indicare il fattore del terzo oggetto?

Forse oggetto[32].fattore?

Sulla lista, non saprei proprio.
Ultima modifica di Cip Upupa il 19/09/2017, 23:33, modificato 1 volta in totale.
Cip Upupa
Starting Member
Starting Member
 
Messaggio: 12 di 40
Iscritto il: 16/07/2017, 17:34

Re: [C++] Strutture

Messaggioda Super Squirrel » 19/09/2017, 23:12

Ma non ho grandi idee su come applicarlo concretamente... se dichiaro elem oggetto[20], poi come uso il punto per indicare il fattore del terzo oggetto?

Forse oggetto[3].fattore?


Esatto, anche se il terzo sarebbe oggetto[2], ricorda che l'indice parte sempre da 0.

Allora, conosco il . ma non la ->...


-> ha la stessa funzione di . e si utilizza nel caso di puntatore ad oggetto.
Per esempio se vogliamo mostrare a video il membro "fattore" di k avremo:

Codice:
elem k;
cout << k.fattore;

elem *p = &k;
cout << p->fattore;


Sulla lista, non saprei proprio.


Inizia col cercare "liste c++" su google e dai un'occhiata ai primi due risultati. Sarebbe utile anche una lettura del capitolo "Allocazione dinamica della memoria" dal sito che ti ho consigliato nell'altro messaggio.
Una volta che ti sarai fatto un'idea dell'argomento se ci sono dubbi chiedi pure.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 144 di 1486
Iscritto il: 16/05/2013, 22:05

Re: [C++] Strutture

Messaggioda Cip Upupa » 19/09/2017, 23:29

Ti ringrazio! Come al solito dimentico che i vettori partono da 0...

Quindi -> si usa con i puntatori, perfetto. Invece per il secondo esercizio mi guardo con calma domani le fonti che mi hai suggerito.
Cip Upupa
Starting Member
Starting Member
 
Messaggio: 14 di 40
Iscritto il: 16/07/2017, 17:34

Re: [C++] Strutture

Messaggioda Cip Upupa » 20/09/2017, 14:19

Mi sono reso conto di non aver capito bene come indicare punt dell'ultimo oggetto nel primo esercizio usando ->.

Non si usa quando voglio accedere con un puntatore a un membro della classe? Ma se il puntatore è già all'interno della classe come me la cavo?

Non credo sia corretto scrivere punt->oggetto[19]...
Cip Upupa
Starting Member
Starting Member
 
Messaggio: 15 di 40
Iscritto il: 16/07/2017, 17:34

Re: [C++] Strutture

Messaggioda Cip Upupa » 20/09/2017, 15:08

Per il secondo esercizio: se voglio accedere al primo elemento della lista, mi basta dichiarare elem*p=NULL? Oppure devo usare punt, come elem*punt=NULL?

Le altre due domande ancora mi eludono...
Cip Upupa
Starting Member
Starting Member
 
Messaggio: 17 di 40
Iscritto il: 16/07/2017, 17:34

Re: [C++] Strutture

Messaggioda Super Squirrel » 20/09/2017, 16:04

Mi sono reso conto di non aver capito bene come indicare punt dell'ultimo oggetto nel primo esercizio usando ->.

Non si usa quando voglio accedere con un puntatore a un membro della classe? Ma se il puntatore è già all'interno della classe come me la cavo?

Non credo sia corretto scrivere punt->oggetto[19]...


"oggetto"."dato/funzione membro"
"puntatore"->"dato/funzione membro"

L'uso degli operatori . o -> dipende solo dal left-operand (quello che si trova a sinistra dell'operatore). Il right-operand può essere qualsiasi cosa e non influisce sull'utilizzo di uno o l'altro operatore.

Per il secondo esercizio: se voglio accedere al primo elemento della lista, mi basta dichiarare elem*p=NULL? Oppure devo usare punt, come elem*punt=NULL?

Le altre due domande ancora mi eludono...


Ti sei fatto un'idea di cosa sono e come funzionano le liste?
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 146 di 1486
Iscritto il: 16/05/2013, 22:05

Re: [C++] Strutture

Messaggioda Cip Upupa » 20/09/2017, 17:15

Okay, quindi se ho ben capito, anche se punt è un puntatore essendo il right operand in questo caso me ne frego e dichiaro oggetto[9].punt

Per quanto riguarda le liste: ho dato un'occhiata a questa pagina e mi sono fatto un'idea molto generale.

Da quello che vedo per dichiarare una lista vuota si usa l'espressione elem*(puntatore)=NULL; per capire che un elemento è l'ultimo della lista, l'unica cosa che mi salta in mente prendendo spunto da quanto letto è usare un ciclo che sposti un puntatore di nodo in nodo, contandoli; quando trova un NULL si ferma.

Tipo una roba così:

Codice:
nodo *q;
q = p;

do {
     int numero;
     numero=numero+1
} while ( q != NULL );
Cip Upupa
Starting Member
Starting Member
 
Messaggio: 18 di 40
Iscritto il: 16/07/2017, 17:34

Re: [C++] Strutture

Messaggioda Super Squirrel » 20/09/2017, 18:58

Dovresti approfondire ancora un po' l'argomento. Nel caso poi ti posso postare un esempio di codice.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 148 di 1486
Iscritto il: 16/05/2013, 22:05


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron