{"id":142,"date":"2010-06-24T13:43:00","date_gmt":"2010-06-24T13:43:00","guid":{"rendered":"http:\/\/e-ware.org\/blog\/?p=142"},"modified":"2010-06-24T13:43:00","modified_gmt":"2010-06-24T13:43:00","slug":"strutture-dati-array","status":"publish","type":"post","link":"http:\/\/e-ware.org\/blog\/strutture-dati-array\/","title":{"rendered":"Strutture dati: Array"},"content":{"rendered":"<p><a href=\"http:\/\/3.bp.blogspot.com\/_Tg1CIil2fDM\/TCNnxZ6wGHI\/AAAAAAAAAmc\/mue_jA91EdA\/s1600\/array.gif\"><img decoding=\"async\" src=\"http:\/\/3.bp.blogspot.com\/_Tg1CIil2fDM\/TCNnxZ6wGHI\/AAAAAAAAAmc\/mue_jA91EdA\/s320\/array.gif\" border=\"0\" alt=\"\"><\/a><\/p>\n<div><span><br \/><\/span><\/div>\n<div><b><span>DEFINIZIONE<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>      Con il termine <\/span><b><span>array<\/span><\/b><span> si intende un tipo di <\/span><i><span>struttura dati complessa<\/span><\/i><span> che trae le proprie caratteristiche dalla definizione matematica di <\/span><b><span>vettore<\/span><\/b><span>. <\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Un array pu\u00f2 essere visto come una serie di celle contigue ognuna delle quali ha il compito di contenere un determinato dato. Ogni cella che compone tale struttura \u00e8 accessibile mediante una chiave denominata <\/span><b><span>indice<\/span><\/b><span>. L&#8217;\u2019indice \u00e8 un fattore fondamentale per accedere ai dati interni al vettore e nella maggior parte dei linguaggi di programmazione \u00e8 di tipo numerico intero. I valori di tali parametro sono spesso contigui e possono partire da 0 o da 1.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Ad esempio, se volessi accedere al primo elemento di un array di nome vettore, il cui primo indice \u00e8 0 mi baster\u00e0 usare la sintassi:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><i>vettore[0]<\/i><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>mentre per accedere al terzo elemento dovr\u00f2 utilizzare l&#8217;\u2019indice 2:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><i>vettore[2]<\/i><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Bisogna precisare che nei linguaggi compilati, l&#8217;\u2019uso degli indici di questa struttura, porta a degli errori se non si trattano in maniera consona questi parametri poich\u00e9 tali linguaggi non hanno alcun riferimento in memoria della dimensione dei vettori con cui si lavora. Questo \u00e8 un punto fondamentale poich\u00e9, l\u2019&#8217;uso scorretto degli indici, pu\u00f2 portare ad ottenere di dati errati e quindi potenzialmente pericolosi.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>DATI DEGLI ARRAY<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>      La concezione dei tipi di dati degli array varia in base ai diversi linguaggi di programmazione. Nel C, ad esempio, quando si definisce un vettore esso viene inizializzato con un tipo di dato che dovr\u00e0 essere poi compatibile con i singoli dati in esso contenuti. Questo vuol dire che se all&#8217;\u2019atto della definizione di un array lo dichiaro di tipo int, esso potr\u00e0 contenere solo dati di tipo int. Nel PHP, invece, non importa il tipo di dato che l\u2019&#8217;array andr\u00e0 a contenere poich\u00e9 il linguaggio \u00e8 di tipo typeless. <\/span><\/div>\n<div><span>Il prototipo di dichiarazione del lingaggio C \u00e8:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><i>tipo nome_array[numero elementi];<\/i><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>pertanto  un esempio di definizione pu\u00f2 essere:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><i>float vector[5];<\/i><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Si nota come si sia definito un vettore di 6 elementi tutti di tipo float al quale \u00e8 possibile accedere subito dopo la sua creazione. Se volessimo, infatti, inizializzare i suoi dati con i primi 6 numeri reali baster\u00e0 utilizzare la sintassi<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><i>nome_array[indice] = dato;<\/i><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Che nel nostro caso sar\u00e0:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><i>vector[0] = 0.0;<\/i><\/span><\/div>\n<div><span><i>vector[1] = 1.0;<\/i><\/span><\/div>\n<div><span><i>vector[2] = 2.0;<\/i><\/span><\/div>\n<div><span><i>vector[3] = 3.0;<\/i><\/span><\/div>\n<div><span><i>vector[4] = 4.0;<\/i><\/span><\/div>\n<div><span><i>vector[5] = 5.0;<\/i><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><b>DINAMICIT\u00c0<\/b><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>      Un array, nella maggior parte dei casi, pu\u00f2 subire modifiche durante l\u2019&#8217;uso del programma. Basti immaginare, ad esempio, un vettore che deve contenere le macchine parcheggiate in un parcheggio custodito. Ogni indice dell\u2019&#8217;array indica un posto numerato e il dato in esso contenuto sar\u00e0 il modello della macchina. Se un giorno il padrone del parcheggio decide di ampliare lo stabile aggiungendo nuovi posti allora anche l\u2019&#8217;array dovr\u00e0 essere ampliato per contenere nuovi indici. In tal caso baster\u00e0 ricorrere ai mezzi che ogni linguaggio di programmazione pone a disposizione dello sviluppatore per riallocare la memoria utile a tale fine. Questo evidenzia come, se adeguatamente trattata, l\u2019&#8217;array \u00e8 una struttura dati dinamica. Tale concetto di dinamicit\u00e0 (<\/span><b><span>array allocato dinamicamente<\/span><\/b><span>) \u00e8 da separare dal concetto di <\/span><b><span>array dinamico<\/span><\/b><span>.<\/span><\/div>\n<div><span>Un array si definisce dimanico quando consente di aggiungere e\/o rimuovere alcuni elementi. Esso si compone di due zone separate: la prima viene allocata e definita come un comune array mentre la seconda \u00e8 nascosta ed \u00e8 dedicata ai futuri allocamenti. Tale sezione pu\u00f2 essere utilizzata sino a che la sua memoria non si esaurisce. L&#8217;\u2019uso degli array dinamici risulta alle volte troppo dipspendioso sia in termini di spazio che di tempo poich\u00e9, una sua riscrittura, pu\u00f2 richiedere anche la copia dell&#8217;\u2019intero array.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><b>ARRAY MULTIDIMENSIONALI<\/b><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>      Sino ad ora abbiamo trattato vettori i cui dati erano accessibili mediante un solo indice. Pu\u00f2 accadere, per esigenze di sviluppo, che si abbia bisogno di pi\u00f9 indici da trattare. Tali elementi vengono chiamati <\/span><b><span>array multidimensionali<\/span><\/b><span>. Immaginiamo di voler utilizzare un array che mi indichi se in un determinato punto cartesiano ci sia o no un punto mediante la presenza di un 1 o un 0. I dati di tale vettore potranno essere accessibili mediante l\u2019&#8217;uso di due indici: uno che indichi il valore dell\u2019&#8217;asse delle ascisse da considerare ed uno quello delle ordinate.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Se, ad esempio, in un piano cartesiano prendiamo in considerazione le coppie di valori (2, 2), (2, 3), (3, 2) e (3, 3) e sappiamo che sono presenti solo due punti nelle coordinate (2, 2) e (3, 3), il nostro array potr\u00e0 essere consultato accedendo ai dati mediante la sintassi:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><i>nome_array[indice 1][indice 2]<\/i><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Nel nostro caso sar\u00e0:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><i>vettore[2][2] = 1;<\/i><\/span><\/div>\n<div><span><i>vettore[2][3] = 0;<\/i><\/span><\/div>\n<div><span><i>vettore[3][2] = 0;<\/i><\/span><\/div>\n<div><span><i>vettore[3][3] = 1;<\/i><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>E\u2019 facile notare come tale discorso pu\u00f2 essere facilmente espanso ad array con un numero maggiore di indici.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><b>CONCLUSIONI<\/b><\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>   L&#8217;array \u00e8 sicuramente una delle strutture dati pi\u00f9 semplice da gestire e da utilizzare. La sua convenienza, in termini tecnici, \u00e8 da apprezzare per un suo uso basilare. Quando i dati iniziano a diventare eccessivamente numerosi e quando le dimensioni iniziano a crescere e sicuramente molto pi\u00f9 pratico puntare ad altre strutture pi\u00f9 consone a questi compiti.<\/span><\/div>\n<div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>DEFINIZIONE Con il termine array si intende un tipo di struttura dati complessa che trae le proprie caratteristiche dalla definizione matematica di vettore. Un array pu\u00f2 essere visto come una serie di celle contigue ognuna delle quali ha il compito di contenere un determinato dato. Ogni cella che compone tale struttura \u00e8 accessibile mediante una [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30,52,4,57],"tags":[],"class_list":["post-142","post","type-post","status-publish","format-standard","hentry","category-algoritmi","category-didattica","category-opencode","category-strutture-dati"],"views":1579,"_links":{"self":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/comments?post=142"}],"version-history":[{"count":0,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/142\/revisions"}],"wp:attachment":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/media?parent=142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/categories?post=142"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/tags?post=142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}