PDA

View Full Version : C-Cosa sono gli array multidimensionali???


Malta
13-10-2007, 10:37
Ciao a tutti!!!
Qulacuno mi può spiegare cosa sono gli array multidimensionali in C???
Dato che io non è che di programmazione sono proprio un esperto potreste fare una spiegazione abbastanza di base???:D
Grazie moltissimo.
Ciao.

P.S:di base, però solo per gli array multidimensionali, gli array so cosa sono.

anonimizzato
13-10-2007, 10:43
Non conosco C comunque un array multidimensionale in qualsiasi linguaggio di programmazione è semplicemente un array che al proprio interno contiene valori che possono a loro volta essere degli array.

Una sorta di array annidati.

es: PHP

<?php
$shop = array( array( Title => "rose",
Price => 1.25,
Number => 15
),
array( Title => "daisy",
Price => 0.75,
Number => 25,
),
array( Title => "orchid",
Price => 1.15,
Number => 7
)
);
?>

Malta
13-10-2007, 10:48
Ti ringrazio per la risposta.
Però nella guida di HTML.it che 'sto seguendo per imparare il C cera questa spiegazione e in più delle altre affermazioni che non sono sicuro di aver compreso:
Ovviamente la potenza degli array risiede anche nel fatto che si possono usare degli array multidimensionali. Come? in pratica ogni elemento contenuto da un array è a sua volta un array; in questo modo si possono rappresentare facilmente tabelle e matrici, o qualunque altra cosa che richieda un rappresentazione anche superiore, si pensi a programmi di grafica tridimensionale, dove un array cubico può essere usato per disegnare i punti all'interno dello spazio tridimensionale creato, o ad un array a quattro dimensioni, che può servire per registrare anche la variabile tempo.

Con gli array multidimensionali si possono rappresentare insomma cose che hanno più di una dimensione in maniera facile ed intuitiva. L'esempio sotto proposto usa un array bidimensionale per definire una matrice di N righe ed M colonne:


int matrix[n][m];


i cui elementi possono essere, ad esempio, stampati, utilizzando solo due cicli for, come mostrato qui sotto:

int n = 10;
int m = 12;
int matrix[n][m];
int i;
int j;

for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
printf("%d", matrix[i][j]);
}
printf("n");
}



Mi potreste spiegare il siginficato???
Il link della pagina è questo (http://programmazione.html.it/guide/lezione/1101/array-multidimensionali/).
Grazie, ciao.

PGI-Bis
13-10-2007, 10:55
Sai già che un array è una lista di componenti. Un array di 10 interi è un elenco di 10 celle ognuna delle quali può contenere un numero intero. Ogni cella salvo la prima ha una cella precedente, ogni cella salvo l'ultima ha una cella successiva eccetera eccetera.

Un array multidimensionale è:

prima di tutto un array quindi è un elenco, una lista di celle che possono contenere dei valori. Da qui non si scappa.

Ogni cella di un array multidimensionale è a sua volta un array, cioè un elenco di celle. Questi secondi array hanno tutti quanti la stessa dimensione. Questa seconda dimensione, questa seconda quantità di componenti che puoi immagazzinare in questi array, è ciò che rende multi-dimensionale l'array. C'è una prima dimensione, il numero di celle dell'array, è c'è una seconda dimensione, il numero di celle di ogni array contenuto nelle celle del primo.

Così come accade per il primo array, anche i secondi array possono a loro volta contenere altri array. In questo caso le dimensioni saranno tre. La quantità di celle del primo array, la quantità di celle di ognuno degli array contenuti nelle celle del primo, la quantità di celle di ognuno degli array contenuti nelle celle dei secondi array, contenuti nelle celle del primo.

Si parla di array multidimensionale quando per ogni livello la dimensione degli array è identica e immutabile. Se la dimensione degli array appartenenti ad uno stesso livello può variare allora siamo di fronte ad un array di array. In C è possibile avere entrambi. La notazione:

int[5][4]

indica un array multidimensionale (in questo caso a 2 dimensioni): abbiamo un primo array di 5 componenti (prima dimensione) dove ognuno dei componenti è un array che può contenere 4 numeri interi (seconda dimensione). Lo stesso vale nel caso:

int[5][10][20]

Qui abbiamo un array di 5 componenti (prima dimensione) ciascuno dei quali è un array di 10 componenti (seconda dimensione) ciascuno dei quali è un array che può contenere 20 numeri interi (terza dimensione).

Malta
13-10-2007, 11:04
Una spiegazione più dettagliata non poteva esserci.
Grazie mille.
By.

D4rkAng3l
13-10-2007, 11:15
Ti ringrazio per la risposta.
Però nella guida di HTML.it che 'sto seguendo per imparare il C cera questa spiegazione e in più delle altre affermazioni che non sono sicuro di aver compreso:


Mi potreste spiegare il siginficato???
Il link della pagina è questo (http://programmazione.html.it/guide/lezione/1101/array-multidimensionali/).
Grazie, ciao.

Un array multidimensionale, se bidimensionale come in questo caso dicesi matrice sinonimo di tabella è formato da un certo numero di righe ed un certo numero di colonne.

Nel tuo caso hai m righe ed n colonne quindi hai una tabella di 12 righe e 10 colonne come puoi vedere dalla dichiarazione delle variabili.

Si presuppone che tu usi una matrice per metterci qualcosa dentro (dati). Esattamente come faresti con una tapella in HTML o di EXCEL ogni elemento della tabella conterrà qualcosa, nel tuo caso conterrà VALORI INTERI, te lo dice la dichiarazione della matrice stessa tramite questa dichiarazione int matrix[n][m]; che sostanzialmente la puoi leggere come: "Crea un array bidimensionale (matrice) chiamato matrix di n righe ed m colonne che contiene valori interi (per l'int iniziale che come per le variabili ti stabilisce il TIPO DI DATO che quella struttura dovrà contenere...è una cosa molto importante sapere con che dati stai operando...questa matrice potrà contenere solo valori numerici interi).

Poi si presuppone che tale tabella venga popolata in qualche modo con dei valori (li puoi mettere a mano con una dichiarazione stile array, puoi farli mettere ad un programma in maniera random, etcetc) ma adesso non ti frega cosa ci sia dentro.

Nel programma vengono dichiarate anche due variabili intere i, j che vengono usate come indici per scorrere le righe e le colonne della tua tabella matrix.

Essa viene "esplorata" tramite le seguenti linee di codice:


for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
printf("%d", matrix[i][j]);
}
printf("n");
}


Cosa fanno queste linee di codice?
è molto semplice, devi scorrere riga per riga tutte le 12 colonne, per cui usi 2 cicli annidati:

Il ciclo più interno scorre le n righe, quello più esterno scorre le m colonne.
Che succede? sostanzialmente questo

Inizzi con l'esecuzione del ciclo più esterno:

stai posizionato sulla colonna 0, parte il secondo ciclo che come prima cosa stampa a video il valore contenuto nella prima riga prima colonna ovvero il valore contenuto in matrix[0][0] tramite questa operazione:
printf("%d", matrix[i][j]);
che dice di stampare il valore decimale contenuto nella matrice matrix nella posizione identificata dall'indice di riga i e dall'indicedi colonna j.
Poi il ciclo annidato più interno rinizia e l'indice j viene incrementato di 1 quindi stampa il valore intero contenuto in matrix[0][1], quindi rinizia e stampa matrix[0][2]

Questo ciclo interno si fermerà quando l'indice j sarà uguale ad n (detto in maniera rozza ma efficace quando le righe della prima colonna sono state tutte lette), allora rinizierà il ciclo esterno con i incrementato di 1 (quindi i=1) e riprenderà il ciclo interno come prima ma questa volta stampando tutte le righe della seconda colonna e così via finchè non ha stampato tutta la matrice a video.

In pratica questo programma scrive prima tutti i valori della prima colonna, poi della seconda colonna, poi della terza e così via fino alla fine della matrice.

Spero di non aver detto cazzate ma è aprecchio che non tocco C cmq dovrebbe esse giusto :)

Malta
13-10-2007, 11:27
Ringrazio anche te.
C'è da dire che sarebbe molto più semplice l'HTML per creare le tabelle!!!:D
Ti ringrazio ancora.
Ciao.

D4rkAng3l
13-10-2007, 11:38
Ringrazio anche te.
C'è da dire che sarebbe molto più semplice l'HTML per creare le tabelle!!!:D
Ti ringrazio ancora.
Ciao.

questo non è ancora nulla :-P

Pensa che il C è già un linguaggio ad un livello piuttosto alto (oddio non altissimo...hai i puntatori, cazzi e mazzi e puoi operare direttamente sulla macchina però almeno hai modo di far vedere al linguaggio una array multidimensionale come una tabella).

In realtà quellla tua matrice la macchina non la vede assolutamente come ua tabella...la rappresenta come un unico array monodimensionale e se devi lavorare in assembler sono cazzi tuoi tener conto di quanto è lunga ogni singola porzione dell'array dhe definisce per esempio una riga =) hehehe c'è di peggio :D

Malta
13-10-2007, 11:45
E pensare che avevo scelto il C per iniziare dato che si diceva che era il linguaggio di programmazione più facile!!!
Beh, ci credo anchio che in assembler sarà un casino (praticamente l'assembler è come il linguaggio macchina)!!!
Volevo farti una domanda forse un po' OT:secondo te qual è il linguaggio di programmazione più facile???
Grazie, ciao.

D4rkAng3l
13-10-2007, 11:50
E pensare che avevo scelto il C per iniziare dato che si diceva che era il linguaggio di programmazione più facile!!!
Beh, ci credo anchio che in assembler sarà un casino (praticamente l'assembler è come il linguaggio macchina)!!!
Volevo farti una domanda forse un po' OT:secondo te qual è il linguaggio di programmazione più facile???
Grazie, ciao.

Non esiste come domanda...diciamo che un linguaggio devi vedere a cosa ti serve...C non è facile eprchè và abbastanza a basso livello...cioè usando i puntatori puoi operare anche con le singole regioni di memoria...
Diciamo che col C a meno che non sei un mostro non ci fai nulla...quindi se te lo impari lo impari a puro scopo didattico perchè lo si usa in ambienti molto specifici e tosti.
Se vuoi imparare un linguaggio che cmq nel bene o nel male ci fai subito qualcosina di potenzialmente utile imparati php.
Ma se lo stai studiando solo a scopo didattico per farti unac erta cultura di programmazione C va benissimo (non sperare di farci nulla per ora), poi passa ad altro

Malta
13-10-2007, 11:55
Aspetta.
Io il php lo conosco (non alla perfezzione ma il grosso lo so).
Però con il php puoi realizzarti sì anche software oltre a pagine web ma sei obbligato a utilizzare un browser per visualizzarli.
Per questo ho abbandonato i Web-Devolpment e sono passato a linguaggi di programmazione "seri".
Io non voglio fare certamente qualcosa con il C.
Una volta imparato il C voglio passare al C++ e infine al Java.
Secondo HTML.it il Java è il più dificoltoso tra i tre ma anche il migliore.
Ti ringrazio per il consiglio.
By.

P.S:i puntatori non so ancora cosa siano.

D4rkAng3l
13-10-2007, 12:01
Aspetta.
Io il php lo conosco (non alla perfezzione ma il grosso lo so).
Però con il php puoi realizzarti sì anche software oltre a pagine web ma sei obbligato a utilizzare un browser per visualizzarli.
Per questo ho abbandonato i Web-Devolpment e sono passato a linguaggi di programmazione "seri".
Io non voglio fare certamente qualcosa con il C.
Una volta imparato il C voglio passare al C++ e infine al Java.
Secondo HTML.it il Java è il più dificoltoso tra i tre ma anche il migliore.
Ti ringrazio per il consiglio.
By.

P.S:i puntatori non so ancora cosa siano.


JAva lo stò studiando ora all'uni...più difficoltoso?
mmm allora se entri nell'ottica della programmazione ad oggetti certe cose che con il C sono delle pesantate diventano delle minchiate, per altre cose è un bordello.
Soo due tipi di difficoltà diverse...il C è pesante perchè essendo molto a basso livello se ti devi scrivere una lista o un albero ti IMPICHI perchè ogni struttura deve puntare alla struttura dopo, per scorrere liste e alberi ti scervelli con puntatori e non ti funziona mai nulla prima di ore ed ore di smanettamenti...con Java tutto ciò è molto più automatico e tranquillo per esempio

Malta
13-10-2007, 15:40
Scusa, ma io sono ancora al inizio della programmazione.
Non so nè che cosa intendi per liste e alberi nè cosa intendi per puntatori.
Comunque ti ringrazio per i suggerimenti che mi stai dando.
Ciao.

D4rkAng3l
13-10-2007, 15:41
Scusa, ma io sono ancora al inizio della programmazione.
Non so nè che cosa intendi per liste e alberi nè cosa intendi per puntatori.
Comunque ti ringrazio per i suggerimenti che mi stai dando.
Ciao.

che manuale usi? quando arriverai a quegli argomenti capirai che intendo heheeh ;-)

Malta
13-10-2007, 15:42
Questo (http://programmazione.html.it/guide/leggi/32/guida-c/).
Per ora sono al capitolo 23.

AnonimoVeneziano
13-10-2007, 15:46
"Array Multi-dimensionale" , che parola :D .
Come disse il mio caro vecchio prof di informatica 1 all'epoca "è un nome un po' da guerra tecnologica ...."

:D :sofico: :D

Ciao