Un dato può contenere più valori?

3

Sono un principiante e sto seguendo un corso sulla programmazione in C.
Nel mio libro, una variabile è definita come uno spazio di memoria che memorizza una singola unità di dati ( datum ).
Una struttura dati è considerata una singola unità di dati ( datum )?
Ex: struct Point single_point;

    
posta Othman 03.09.2016 - 01:41
fonte

6 risposte

3

Is a data structure considered to be a single unit of data (datum)?

Bene, a volte sì, in modo molto astratto, ma spesso no se si guarda sotto il cofano.

... a variable is defined as a memory space that stores a single unit of data (datum) ...

Ma anche quella singola unità di dati di solito consiste in più bit binari individuali, forse più byte o parole. Quindi è davvero una questione di terminologia, o, più importante, prospettiva , se considerare un dato o dati. È probabilmente la risposta più completa.

Penso che il punto principale che vorrei fare sia che ci sono diversi punti di vista a seconda di chi la sta guardando.

Considerare la natura del ruolo del cliente rispetto al ruolo di implementazione - una delle relazioni più importanti nella programmazione. Cerchiamo di separare il cliente dall'implementazione usando l'astrazione; questo facilita la programmazione, specialmente quando i programmi diventano più grandi e cambiano nel tempo.

Dal punto di vista del cliente di alto livello, molti elementi potrebbero essere considerati una sola astrazione e quindi, logicamente un dato, nonostante siano costituiti da più singoli bit di stato.

Tuttavia, sotto il cofano e dal punto di vista dell'implementazione, il dato si decompone in un'organizzazione o composizione di altri elementi.

Ad esempio, un array di int potrebbe essere considerato un singolo dato per un solo modo di guardarlo. Ma è anche una composizione di più int's. Un elenco o albero collegato è una struttura dati ancora più complessa (rispetto a un array) e in genere è composto da più blocchi di memoria indipendenti, quindi è composto da più dati. Tuttavia, possiamo spesso trattare un elenco o un albero collegato come un'astrazione, ad esempio, possiamo passare un intero albero facendo riferimento a un'altra funzione con un singolo parametro. Quindi, da un altro punto di vista è logicamente una singola entità (anche se sicuramente composta da più parole di memoria).

C ha union 's e struct ' s, che riflettono tipi di somma e tipi di prodotto in Tipi di dati algebrici . Questi possono o non possono essere considerati strutture dati: tuttavia, quando la maggior parte usa il termine struttura dati , stanno evocando un complesso (e possibilmente algoritmica) entità (rispetto a una singola struttura o unione) composta da più strutture collegate tra loro da riferimenti di qualche tipo (es. puntatori).

Si noti che per quanto riguarda le strutture dati, viene visualizzato il termine Tipo di dati astratti , che deve essere differenziato dal tipo di dati algebrico ( entrambi ADT abbreviato). Strutture dati astratte supportano la relazione cliente / implementazione (per astrazione, ovviamente).

C'è anche mereology , che è lo studio della composizione di una parte intera ed è un concetto ricorsivo. Una macchina è un'entità in sé e per sé, tuttavia, può essere scomposta nelle sue parti. Mereology è lo studio filosofico dei vari aspetti e relazioni tra tutto e parte, e come tale è a proposito della domanda su dati e dati.

    
risposta data 03.09.2016 - 02:45
fonte
1

Sì, una struct o termine più generico, record può essere considerato una singola unità di dati. Puoi dichiarare le variabili per mantenere le strutture e creare puntatori ( riferimenti ) per indicarle.

struct s sono memorizzati in blocco di memoria contigua , e tu può usare sizeof per ottenere le sue dimensioni, rendendole l'uso molto simile ai tipi primitivi.

Detto questo, puoi anche prendere in considerazione un struct come raggruppamento di più variabili insieme, poiché ci sono modi per accedere a ogni singola variabile all'interno di una struttura. Quindi, in questo senso, contiene più valori.

Penso che il punto principale da capire è che il linguaggio C è stato progettato in modo che tu possa trattare struct molto simile a tipi primitivi come int o char , e in che ti percepiscono può considerarlo come una singola unità di dati.

    
risposta data 03.09.2016 - 02:08
fonte
0

Ciò a cui ti riferisci come una "struttura dati" è una funzionalità linguistica di C chiamata una struttura .

Se il tuo libro definisce una variabile come qualcosa che memorizza una singola unità di dati, e C ti permette di memorizzare una struttura in una variabile, allora il tuo libro deve definire una struttura come una singola unità di dati.

Non vorrei entrare troppo nella semantica di data , datum , una singola unità di qualunque . Se volessi approfondire, una singola unità di dati dovrebbe probabilmente essere definita come un bit, ma visto che praticamente nessun sistema può indirizzare niente meno di un byte di memoria alla volta, allora è un byte l'unità base migliore?

È solo semantica. Direi che se hai chiesto alla persona alla tua sinistra avrebbe una diversa, ma appropriata, definizione di singola unità di dati alla persona alla tua destra.

    
risposta data 03.09.2016 - 02:22
fonte
0

In my book,a variable is defined as a memory space that stores a single unit of data (datum). Is a data structure considered to be a single unit of data (datum)?

Sì. C non è diverso da nessuno degli altri linguaggi in questo senso. Una variabile non è altro che un'etichetta che fa riferimento a un blocco di memoria facendo riferimento all'indirizzo iniziale di quel blocco. In C hai due tipi di variabili primarie su cui ti imbatterai. Hai (1) una variabile normale (dove l'etichetta si riferisce all'indirizzo di memoria che contiene il valore stesso) e hai (2) un puntatore (dove l'etichetta si riferisce a un indirizzo di memoria che memorizza l'indirizzo di memoria in qualcos'altro). Invece di memorizzare un valore, un puntatore memorizza l'indirizzo dove è possibile trovare qualcos'altro (come un valore o un altro puntatore).

Ad esempio, se dichiari:

int a = 5;

È chiaro che a fa riferimento a un indirizzo di memoria che contiene il valore 5 . D'altra parte se dichiari:

int a = 5;
int *b = &a;

b è una variabile che contiene l'indirizzo di a come valore. (il * precedente b dichiara b come variabile puntatore.)

Poiché come dice il tuo libro, una variabile può solo memorizzare un singolo valore, quindi come vengono gestiti gli array (o struct (strutture))? La variabile dell'array contiene l'indirizzo di il primo valore dell'array, ad es.

int a[] = { 1, 2, 3, 4, 5 };  /* declares a 5 element array */

a stesso memorizzerà l'indirizzo in cui 1 è memorizzato. (puoi dereferenziare a (ad esempio *a ) per verificare che il valore indicato sia 1 ) Una struttura non è diversa (ignorando il riempimento automatico che può essere inserito dal compilatore) Ad esempio:

struct structa {
    int x, y, z;
};

struct structa a = { .x = 1, .y = 2, .z = 3 };

La variabile a sopra contiene l'indirizzo di memoria in cui si trova l'inizio di struct .

In tutti gli esempi sopra, la variabile fa riferimento a un blocco di memoria in cui è memorizzato solo un singolo valore. Nel caso di valori immediati come 5 , mantengono l'indirizzo in cui è memorizzato 5 . Nel caso di oggetti composti come matrici o struct, ecc., La variabile mantiene come valore l'indirizzo iniziale dove l'array o la struct è memorizzato nella memoria.

    
risposta data 03.09.2016 - 02:49
fonte
0

Can a data hold multiple values?

A meno che i dati non siano solo un bit, sono valori multipli.

Is a data structure considered to be a single unit of data (datum)?

Dipende. Oh dipende gloriosamente.

Come programmatore, dipende da te.

Puoi impacchettare il più grande o il poco significato in qualsiasi porzione di informazione che puoi farla franca. Questo è in realtà il modo in cui funziona la compressione (pensa i file zip).

Una struttura dati può rappresentare un intero computer o può rappresentare la C in CandiedOrange che di solito è rappresentata con una serie di bit (di solito alcuni multipli di 8 di essi) ognuno dei quali potrebbe essere giustamente chiamato un odio questa parola) dato.

Tuttavia di solito non lo sono. La parola datum (ouch) proviene principalmente dalle statistiche. Probabilmente è usato qui per significare un'idea.

Le idee tipiche che trovi già inserite in c sono normalmente chiamate tipi di dati. Di questi ti suggerisco di iniziare a studiare primitive . Ci sono molte strutture dati più complicate, di solito ricavate da questi primitivi, che possono essere meravigliosamente complesse, ma se ben progettate ti permettono di fare un passo indietro e dire "questo rappresenta una sola idea".

Mantenere questa idea aiuta con molte cose. Non ultimo dei quali è scegliere un buon nome per l'identificatore / variabile che punta ad esso.

Se qualcuno ritiene che, si spera, l'idea che la struttura dati rappresenti un singolo dato (ew) o molti datum (i dati lo rammolliscono) dipende da quanto lo guardino da vicino. Dovrebbe sempre essere un'idea che è composta da idee più piccole a cui a volte non ci pensi.

Quindi sì. Dipende. Lo fa davvero davvero. Perché costruirai queste cose. E rappresenteranno ciò che decidi di rappresentare. Se insisti a chiamare quel dato (ick) bene.

    
risposta data 03.09.2016 - 06:15
fonte
0

Un singolo elemento di dati può essere descritto da più attributi , ognuno dei quali potrebbe essere potenzialmente di un tipo diverso. Ad esempio, una persona può essere descritta per nome, età, sesso, altezza, peso, ecc. Un'auto può essere descritta per marca, modello, anno, colore, opzioni, ecc.

Un tipo C struct ti consente di raggruppare più attributi insieme in un singolo oggetto:

struct person {
  char *name;
  struct tm date_of_birth;
  char sex; 
  double height;
  double weight;
  ...
};

struct person me = { 
  "John Bode", 
  {.tm_year=<some year>, .tm_mon=<some month>, .tm_day=<some day>}, 
  'm', 
  73.0, // inches
  195.0, // lbs
  ...
};

me è un singolo oggetto di dati, ma è composto da più attributi.

Si noti che possiamo avere un struct in un struct - struct tm è un tipo che memorizza i valori datetime suddivisi per anno, mese, giorno, ora, minuto, secondo, ecc. Di nuovo, abbiamo un singolo dato (data o ora) descritto da più attributi.

    
risposta data 06.09.2016 - 18:09
fonte

Leggi altre domande sui tag