View Full Version : C:qualcuno sa spiegarmi cm si fa?
ciao a tutti,lunedì ho l'esame di informatica,guardando le prove d'esame ho trovato in tutte esercizi di questo tipo:
Sia data la seguente espressione C esibire una dichiarazione che la rende possibile, altrimenti motivare l’impossibilità:
x.a[3].b = x.a[4].c[1]
qualcuno sa spiegrami in modo semplice cm si risolve???? e soprattutto perchè da questo risultato???
typedef struct {int b, c[3];} INTE;
typedef struct {INTE a[6];} A;
A x;
nn ci capisco niente:doh:
nuovoUtente86
07-06-2008, 10:41
Non conosco il C, ma ad intuito (rispetto agli altri liguaggi di programmazione che conosco)..ti basta che l' intero b e il secondo elemento del vettore c (c[1]) siano uguali.
eh ma io cm faccio ad arrivare alla dichiarazione con il typedef?la parte che ho scritto sotto è gia il risultato che dovrei ottenere...io ho bisogno di capire cm arrivare alla dichiarazione typedef...:confused:
nuovoUtente86
07-06-2008, 10:48
studiando??
Il C è un linguaggio procedurale....e quindi l' esercizio ti chiede in qualche modo di simulare una sorta di classettina.
a studiare ho studiato,se hai voglia di prendermi in giro evita di rispondere
khelidan1980
07-06-2008, 10:49
eh ma io cm faccio ad arrivare alla dichiarazione con il typedef?la parte che ho scritto sotto è gia il risultato che dovrei ottenere...io ho bisogno di capire cm arrivare alla dichiarazione typedef...:confused:
in che senso arrivare al typedef?il typedef è solo una comodità,sai cosa sono le struct no?perchè se non hai chiaro quel concetto è dura fare l'esercizio!
khelidan so cosa sono,infatti gli esercizi in cui creo le struct e le uso nelle funzioni le so fare..il mio unico problema è questo particolare esercizio carogna,che il prof nn ha spiegato a lezione e sul libro non c'è
la cosa che nn capisco io è dall'espressione matematica che mi da in base a quali parametri dichiaro la struct in quel modo...
khelidan1980
07-06-2008, 10:54
khelidan so cosa sono,infatti gli esercizi in cui creo le struct e le uso nelle funzioni le so fare..il mio unico problema è questo particolare esercizio carogna,che il prof nn ha spiegato a lezione e sul libro non c'è
ok quello è semplicemente un modo un po contorto di usare le struct....su due piedi non te lo so spiegare,devo guardalo un attimo anchio(sto studiando anchio il C) cmq che ci sia una sruct innestata è chiaro dal fatto che ci sono due operatori punto sulla x
P.s: modifica il titolo,metti il linguaggio tra parentesi quadre se no chiudono il 3d
nuovoUtente86
07-06-2008, 10:55
in che senso arrivare al typedef?il typedef è solo una comodità,sai cosa sono le struct no?perchè se non hai chiaro quel concetto è dura fare l'esercizio!
credo per altro che manchi il nome delle struct....nel codice postato.
ok khelidan:-)grazie:-)cmq mi sta tirando scema sto esame,è l'ultimo
i nomi delle strutture sono INTE e A...
eh si ma quella è gia la soluzione dell'ex,era un tema d'esame vecchio in cui avevan messo i risultati..il testo è solo al parte sopra che ho scritto
nuovoUtente86
07-06-2008, 10:59
pensa a come un linguaggio ad oggetti (Java ad esempio) accede ai campi (non protetti) di classe....è la medesima cosa.
studio economia e commercio,nn informatica..java nn l'ho mai visto in vita mia..qdi per me è arabo
nuovoUtente86
07-06-2008, 11:08
i nomi delle strutture sono INTE e A...
quelli credo siano gli alias di typedef altrimenti non avrebbe senso mettere anche il typedef...
bastava fare struct INTE {......................}
Se ricordo bene poi è tipico del typedef utilizzare la nomenclatura maiuscola, mentre per le struct si usa il minuscolo..
Dovrebbe essere cosi la dichiarazione
typedef struct nomeStruct {.....................} NomeTypeDef
khelidan1980
07-06-2008, 11:12
quelli credo siano gli alias di typedef altrimenti non avrebbe senso mettere anche il typedef...
bastava fare struct INTE {......................}
Se ricordo bene poi è tipico del typedef utilizzare la nomenclatura maiuscola, mentre per le struct si usa il minuscolo..
Dovrebbe essere cosi la dichiarazione
typedef struct nomeStruct {.....................} NomeTypeDef
quello ok,era ciò che mi riferivo io per comodità,quello che chiede lei è come faccio,senza avere le dichiarazioni a risalire alla struttura delle struct(scusate il gioco di parole)....in effetti può non essere immediato
khelidan ha centrato il senso della mia domanda..
nuovoUtente86
07-06-2008, 11:16
L' unico modo è partire da sinistra verso destro in ambo le espressioni e ragionare su...
ad esempio troviamo x che per forza di cosa sarà una struct...e cosi via..
khelidan1980
07-06-2008, 11:22
secondo me invece è meglio partire da destra,con il secondo punto si scopre che c'è una struct innestata nella prima e gli si sta assegnando il valore
direi prima di tutto di scrivere il risultato in forma più umana (e permettimi di cambiare i nomi alle strutture per rendere il listato più leggibile)
typedef struct {
int b;
int c[3];
} struttura_1;
typedef struct {
struttura_1 a[6];
} struttura_2;
struttura_2 x;
ora procediamo per gradi:
Dichiarazione:
abbiamo dichiarato due strutture (struttura_1 e struttura_2), la seconda delle quali contiene un array formato da 6 elementi appartenenti alla prima struttura, che a sua volta contiene un intero (int b) e un normale array di 3 interi (int c[3]).
Se immaginassimo gerarchicamente il risultato potremmo rappresentarlo come segue:
x:struttura_2:
||
||--> a[0]:struttura_1
|| |
|| |--> int b;
|| |--> int c[3];
||
||
||--> a[1]:struttura_1
|| |
|| |--> int b;
|| |--> int c[3];
||
||
||--> a[2]:struttura_1:
|| |
|| |--> int b;
|| |--> int c[3];
||
||
||--> a[3]:struttura_1:
| |
| |--> int b;
| |--> int c[3];
|
|
|--> a[4]:struttura_1:
| |
| |--> int b;
| |--> int c[3];
|
|
|--> a[5]:struttura_1:
|
|--> int b;
|--> int c[3];
Richiesta esercizio:
Analizziamo la richiesta dell'esercizio, dividendo l'operazione di assegnamento nei due membri che la compongono (ho colorato nella rappresentazione i valori a cui accede l'oprazione di assegnamento):
x.a[3].b = ...
L'operatore punto (.) in questo caso permette di navigare tra gli elementi che compongono le strutture, ovvero, ricordando che x è di tipo struttura_2, scrivendo x.a[3] intendiamo l'elemento di indice 3 dell'array a di x. Ma l'array a in realtà è formato da elementi di tipo struttura_1. (ti ricordo che le posizioni degli array partono da 0)
Quindi x.a[3] è di tipo struttura_1 e, in quanto tale possiamo applicare ancora una volta l'operatore punto per accedere ai suoi elementi, in particolare all'elemento b che è un intero.
In conclusione x.a[3].b ritorna l'intero b contenuto nella struttura_1 di indice 3 dell'array a di x.
... = x.a[4].c[1]
Analogamente a prima navighiamo dall'elemento x verso l'elemento di indice 4 dell'array a (ovvero un elemento di tipo struttura_1). Ma questa volta invece di prendere l'elemento b, viene scelto l'elemento di indice 1 dell'array c (che in reltà è un intero).
x.a[3].b = x.a[4].c[1]
L'operazione di assegmannto è quindi valida dato che abbiamo a sinistra l'intero b dell'elemento 3 dell'array di x e a destra l'intero contenuto in posizione 1 nell'array c dell'elemento 4 dell'array di x.
nuovoUtente86
07-06-2008, 11:56
secondo me invece è meglio partire da destra,con il secondo punto si scopre che c'è una struct innestata nella prima e gli si sta assegnando il valoresi rischia di fare confusione partendo da destra a sinistra.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.