episodio 18 del corso di C Oggi dobbiamo parlare degli Array non sono un argomento semplicissimo in C Più che altro perché a differenza di altri linguaggi per esempio JavaScript giusto per citarne uno gli arreci sono molto legati alla memoria nel senso che in JavaScript e altri linguaggi possiamo fregarcene fino a un certo punto di cosa c'è sotto banco in realtà in C lavorando a basso livello e anche con la memoria i due concetti sono molto legati perciò devo fare spiegazioni diverse in questo video o linguaggi più simile a c rispetto ad altri un po' più
di alto livello che ci permettono di parlare alla fine degli Array come sfruttarli eccetera qua dobbiamo fare una una grande introduzione per farvi capire al meglio cosa sono cominciamo col dire che gli Array definiamoli come delle collezioni di dati tutti uguali Nel senso che per ora abbiamo la variabile infine voto Io vi chiedo se doveste salvare i vostri voti dell'anno scolastico o gli esami universitari di storia ad esempio come risolvereste per ora sapete fare una cosa del genere int oppure Double se mettiamo 8.5 ma facciamo finta che siano tutto interint voto storia 1 probabilmente avresti
una cosa così col vostro Voto 8 se avete quattro verifiche o interrogazioni avete voto storia 2 voto storia 3 e voto storia 4 giusto L'insegnante poi li prende fa la media e vi dà il voto finale al momento sappiamo fare solo così però capite bene che diventa problematico Più che altro questione di nomi basta sbagliare un nome non è voto storia ma voto Storai 2 non riusciamo più a prenderlo e soprattutto Ok potrei non aver scritto i voti di matematica tutti uguali perché ad esempio qua magari ho avuto storia uno però in matematica ho scritto
voto interrogazione matematica 1 voto verifica matematica 1 di conseguenza tutte le le regole che ci possiamo dare finiscono fuori dalla finestra alla svelta perché perché questo è semplicemente un nome e il computer del nome in sé se ne frega è più una cosa logica nostra come vi dico a livello logico al computer va Tutto bene Se rispettate le regole di sintassi a lui va bene perciò gli Array sono a livello logico una collezione di dati anziché avere voto storia 1 2 3 Possiamo fare voti storia perfetto e qua dentro poi vi spiegherò la sintassi Non
preoccupatevi andiamo a mettere i nostri voti storia otto nove dieci due e quattro siamo peggiorati durante il corso dell'anno Quindi abbiamo una cosa del genere e come vedete ha molto lasciate perdere le parentesi qua a quadre Se volete le tolgo avremo errore per una questione di sintassi ma non preoccupatevi come vedete Adesso ha molto più senso il nome è voti storia e abbiamo un insieme di voti di storia poi avremo voti matematica voti francesi eccetera eccetera quindi Quindi è una collezione di dati perché è una variabile che non tiene un dato ma tiene una collezione
tiene un insieme collezione inteso come insieme di dati e soprattutto quando noi facciamo una collezione collezioniamo qualcosa che è logicamente unita non è collezioniamo le carte dei Pokémon con le carte di Magic collezioniamo i pupazzetti di Tot non è che nella nostra collezione c'è tutto insieme quindi la nostra collezione riguarda degli interi o dei Double va bene perché perché sono i voti di storia non è che qua dentro abbiamo la scritta Ciao come stai Non è che abbiamo True o false si tratta di voti di storia i voti di Storia sono tutti interi a sto
giro quindi è una collezione è un insieme logico di dati che hanno un senso che esistano tra di loro Spero che il concetto sia chiaro ripeto molto spesso andiamo a complicare concetti che logicamente già facciamo per conto nostro ma sembrano difficili solo perché li mettiamo nero colore bianco in realtà Scusatemi è giallo su nero per via del mio tema di Visual studio quindi li mettiamo Giallo su nero e di conseguenza vanno spiegati possono sembrare più complessi di quanto in realtà non siano detto questo questo è un Array va bene una collezione di dati che hanno
un valore logico tra di loro hanno un interesse logico a stare insieme perfetto Arriviamo adesso alla parte un po' più complessa parte lato memoria e qua Devo farvi degli esempi Allora immaginate delle cellette quindi immaginate delle cose così va bene Ognuna è una Celletta di memoria io Adesso copio incollo un po' di volte e vado a creare quella che potrebbe essere una griglia di cellette di memoria perfetto quindi immaginate la griglia di cellette di memoria del nostro computer e ho ad esempio lasciate un attimo perdere la variabile voti storia abbiamo la variabile int x e
mettiamo qua uno e poi abbiamo in Y e perché no in t z ok Tutto molto semplice abbiamo le nostre variabili questo Giusto Quindi uno tre e cinque cosa succede che la variabile è un nome per un indirizzo di una Celletta Quindi qua Potremmo avere uno qua Potremmo avere 5 e qua Potremmo avere tre Perfetto Quindi quando io vado a prendere x x è il nome dell'indirizzo per questa Celletta Quindi so dove andarlo a prendere esattamente come in biblioteca Dov'è il libro sul nazismo è nella sezione storia perciò no anzi se fossimo più precisi perché
è una biblioteca fatta bene eh storia sezione A2 Perfetto Quindi magari stora contemporanea seconda guerra mondiale avendo L'indirizzo corretto io vado qua e trovo il mio libro Perfetto non fa una piega stesso discorso per Y e per Z gli Array invece a livello di memoria sono un insieme di dati ma non sparsi Nel senso che io ho qua 8 9 10 e poi ho due e quattro non funziona così gli Array sono schermo un insieme di cellette una consecutiva all'altra Quindi se io torno indietro il nostro Array ci viene dato il punto iniziale perfetto e
poi abbiamo 9 10 2 e 4 Questo è il nostro Ray va bene queste sono le altre variabili in giro a cui abbiamo come riferimento X Y e z ma poi abbiamo voti storia e voti storia fa riferimento da 8 e poi gli elementi successivi quindi Partirà da 8 voti storia fa riferimento a 8 e poi abbiamo e questo è il primo è quello di partenza e l'indice di partenza numero di partenza che è lo zero Ok adesso ci arriviamo del perché e poi abbiamo l'elemento 1 2 3 e 4 quindi 0 1 2 3
4 capite bene che gli Array a livello di memoria si vede qua dall'esempio sono semplicemente degli elementi messi conseguenzialmente per tornare all'esempio della biblioteca che cosa succede noi chiediamo Harry Potter giusto anziché avere Harry Potter 1 qua Harry Potter 2 qui il tre qui il 4 qui il 5 qui il 6 e il 7 chissà dove che cosa ci dicono ci dicono guarda che Harry Potter si trova nella sezione tot e giustamente i libri poi sono consequenziali non è che ci spargono i libri in giro ci danno l'indicazione Dove trovare Harry Potter e da lì
poi troviamo tutti gli altri in sequenza va bene se utilizzate questo concetto della biblioteca Ve l'ho fatto in questo modo visivo per appunto fare il confronto il paragone la metafora con i libri Quindi i libri singoli possono essere in determinate zone perfetto ma i libri che sono una collezione giustamente si trovano conseguenziali Giusto Quindi vi dicono dove si trova il primo si trova qui e poi semplicemente continua ad andare avanti Questo è lo stesso discorso degli arra abbiamo fatto molto semplificato molto masticabile E digeribile va bene Poi ripeto sulla memoria potremmo e avremmo potuto spendere
molto più tempo ma il corso lo voglio strutturare in modo che sia appunto di facile comprensione per tutti e alla svelta per corsi più avanzati appunto vado a fare corsi avanzati dove chi entra dice ok per le prossime 15/20 ore faccio sta roba e la faccio con l'ottica di entrare fino allo specifico quindi non preoccupatevi che andrò a fare anche roba corsi più avanzati più nel dettaglio detto questo cancelliamo la nostra libreria di cellette e proseguiamo a parlare degli Array Quindi adesso sappiamo che gli Array sono una collezione di dati che in realtà rappresenta cellette
e sequenziali bla bla bla ok Dimentichiamoci questa definizione e andiamo a vedere nello specifico cosa sono lato sintattico Dunque per creare per creare gli Array possiamo farlo in due modi Innanzitutto l'array è una collezione fissa di dati se arrivate da altri linguaggi eccetera siete abituati ad esempio in JavaScript che Aggiungete elementi togliete le menti cambiate le menti fate quello che volete in C l'array se noi diciamo che vogliamo Uno slot da 5 cosa ci farà ci andrà a prendere 5 cellette quindi vuol dire che dalla sesta in poi potremmo avere qualcos'altro È per quello che
non possiamo aggiungere togliere elementi perché se sono sequenziali ma poi abbiamo il sesto spazietto bloccato da qualcos'altro non possiamo far scalare il tutto ok Ecco perché vi ho fatto l'esempio delle cellette quindi fin da subito noi dobbiamo dire i voti di storia per l'anno scolastico secondo la legge devo avere cinque voti tre verifiche due interrogazioni Perfetto Quindi andiamo a creare voti storia cinque così oppure possiamo non specificare il numero ma lasciarlo intendere perché se facciamo così Un due tre quattro e cinque potevo avere 10 8 9 quello che volete è solo per semplicità vedete che
la lunghezza qua in alto qualcuno ti sto a 5 la dedotta da cosa dal fatto che ho cinque elementi quindi gli Array sono fissi una volta che voi specificate Quanti ne volete o li fate dedurre nello specifico oppure dite Ne voglio cinque e poi ci lavoriamo lui dice Ah ok Quindi io mi salvo uno spazietto di 5 cellette e riserbo questo spazio un po' Come andare al ristorante e dire Voglio un tavolo da 5 loro ordinano il tavolo da 5 Se poi arrivati in 15 è un problema lei mi aveva detto 5 6 o 4
riusciamo a farcela in un ristorante qua negli Array No cioè se dite 5 e ne mettete 4 non è un problema se dite 5 e ne mettete 6 è un problema va bene quindi partiamo con la prima parte siamo a inizio anno non sappiamo quanti voti quali voti abbiamo ma sappiamo che ne avremo cinque ora per aggiungerli in corso d'opera Cosa possiamo fare voti storia vado ad aggiungere il primo il primo vi ho detto che si chiama lo zero si parte a contare da zero può sembrare una cosa settimane eccetera in realtà è la base
della programmazione lo farete ovunque e vi dico un'altra cosa che vi renderà molto più semplice la comprensione se li mettete in verticale anziché in orizzontale i numeri Pensate ad un appartamento noi abbiamo il piano terra il piano terra è il piano Zero giusto il primo piano l'uno è quello dopo va bene quindi quando Noi contiamo In Europa i piani di un condominio partiamo da zero va bene il piano zero è il piano terra Poi abbiamo il -1 per il garage e le cantine quant'altro mentre invece ad esempio in America per loro il primo piano è
il piano terra Quindi hanno uno lì di conseguenza c'è questa disparità Perciò se voi fate questo collegamento che in programmazione si parte a contare da zero è come cominciare a contare dal piano terra va bene come se fosse in verticale quindi abbiamo lo zero e mettiamo che abbiamo preso 8 Dopodiché andiamo a crearne 5 e abbiamo l'uno ci vediamo appena finito Perfetto Ho messo i voti notate una cosa notate subito una cosa che abbiamo cinque elementi giusto uno due tre quattro cinque Ma l'ultimo indice è il 4 perché perché se partiamo a contare da zero
è ovvio che l'ultimo è Quanti elementi ho meno uno perché Perché se avessi cominciato a contare da uno vi faccio vedere È ovvio che l'ultimo elemento era il 5 perfetto ma col fatto che comincia a contare da zero vuol dire che perdo il primo elemento praticamente di conseguenza il numero totale di elementi meno 1 ok questa cosa tornerà molto più utile in altri linguaggi dove si lavora molto di più con gli indici però ve la dovete ricordare molto semplice se ho 5 elementi Ma porta conta da 0 l'ultimo il numero 4 basta richiede qualche oretta
di pratica e poi vi assicuro che resterà nella vostra mente per sempre quindi così possiamo aggiungere degli elementi Ma attenzione perché ne abbiamo cinque non possiamo risolvere un altro elemento il Sesto Elemento perché non c'è spazio qua dentro quindi come abbiamo fatto così in realtà possiamo anche modificarli quindi io potrei dire voti storia Zero lo faccio diventare adesso 1000 e vi faccio vedere che se mando a schermo Print f e mando a schermo l'intero di Print Store Scusatemi non Print ma voti storia 0 mando a schermo Salvo Play e vedete che ottengo 1000 Quindi prima
non avevo niente Poi ho aggiunto gli elementi uno ad uno ho cambiato l'elemento e l'ho mandato a schermo Che cosa Che cosa deduciamo che per lavorare con gli Array modificare gli elementi qua aggiungere gli elementi eventualmente leggere gli elementi dobbiamo sempre far riferimento agli indici va bene quindi per ritornare ai nostri libri per arrivare ad Harry Potter 3 dobbiamo andare su Harry Potter Harry Potter 2 Perché Perché lo zero è riservato alla pietra filosofale che è il primo il numero uno è riservato alla camera dei segreti che è il 2 e poi il l'indice 2
che è il terzo è riservato al prigioniero di Azkaban va bene quindi molto semplicemente lavoriamo Così torniamo indietro e vediamo l'altro modo in cui possiamo farlo che è anzichè mettere qua il numero Se volete possiamo già aggiungere gli elementi e perciò mettiamo 10 20 30 40 50 ma non fa nessuna differenza perché potete accedere agli elementi allo stesso modo modificarli eccetera e vi faccio vedere che se mando a schermo non ho più 10 ma 8 perché l'ho modificato qua se tolgo tutta sta roba e mando ancora schermo lo zero che è il primo elemento ottengo
10 molto molto semplice Voglio farvi vedere la grandezza del Array adesso capirete il perché se io vado qua e faccio Zu così e qua vado a mettere Size off Array scusate con Rema non confuso voti storia Salvo faccio Play e vedete che abbiamo 20 ma 20 Che cos'è non è possibile perché noi abbiamo cinque elementi ma sappiamo attenzione e Qua abbiamo tutto il discorso della memoria eccetera che in altri linguaggi non abbiamo perché in altri linguaggi Se noi facciamo voti storia Appunto lenks così otteniamo la lunghezza e ci dà direttamente 5 quindi è lungo 5
in C così come ad esempio anche c++ funziona diversamente su questo tipo di Array quello che otteniamo è 20 ma 20 cosa ibite sappiamo che ogni intero Vale 4 Byte 4 per 5 che sono gli elementi fa 20 quindi noi non otteniamo il numero degli elementi otteniamo la grandezza in termini di Byte Quindi se vogliamo non la larghezza in termini di Byte ma in termini di elementi Quanti elementi ho noi dobbiamo fare che cosa tutta la lunghezza in termini di Byte Quindi 20 Byte diviso quanto è grosso un elemento in termini di Byte quindi per
ottenere cinque elementi dobbiamo fare 20 diviso 4 giusto 20 che è il totale diviso 4 e 4 è la larghezza del primo elemento ma tanto Son tutti uguali perché sono tutti interi quindi sono tutti grandi uguali sulla memoria di conseguenza ti faccio 20 diviso 4 e come faccio a sapere che è 4 devo prendere la Size off del primo elemento quindi voti storia 0 se io salvo mando a schermo ottengo 5 e 5 sono effettivamente i nostri elementi quindi un giro un po' più lungo ma vi fa capire quanto lavoriamo a contatto con la memoria
in C adesso che abbiamo spiegato questa cosa possiamo fare quello che si chiama il looping o Quindi iterare con ad esempio il ciclo for il nostro Array Perché Perché ad esempio sappiamo mandare a non solo un elemento alla volta sappiamo fare solo voti storia 0 e meno 30 voti storia 1 voti storia due Ma io vi ho fatto vedere col ciclo for che magari Vorrei mandare a schermo tutto senza stare ogni volta a scriverlo Quindi voglio dinamizzarlo automatizzarlo senza averlo fare ogni volta a mano perciò ci serve il for quindi facciamo for E abbiamo int
i = 0 e partiamo da zero perché Perché il primo indice è lo zero adesso capirete il perché abbiamo che i deve essere minore di cosa l'indice Qual è il massimo indice che abbiamo è il 4 ricordatevelo 01 2 3 e 4 quindi deve essere minore di 5 possiamo saperlo già da qua ma il modo dinamizzato in cui l'abbiamo poniamo che ci viene passato un altro re di cui non sappiamo la lunghezza dobbiamo dire che i deve essere minore di Quanti elementi ci sono in Ok domanda Come facciamo a sapere quanti elementi ci sono in
un Array l'abbiamo detto la lunghezza totale in memoria occupata diviso la larghezza in memoria occupata di un elemento otteniamo 5 che guarda caso è questo Quindi se io faccio tutta sta roba per quanto poco comoda sia faccio così Dopodiché vado con i più più se vado con i più più mando a schermo cosa mandiamo a schermo qua nascondiamo Ma andiamo a schermo ciascun elemento perciò Print f e cosa mandiamo voti storia voi sareste portati per fare magari una cosa del genere ma zero sarà sempre 0 quindi noi vogliamo dinamizzare e mettere i perché perché prima
gli sarà Zero voti storia zero è 10 poi andrà avanti di uno e sarà 1 Quindi avremo voti storia 1 che è 20 tatata fino arrivare a i = 4 mando a schermo 4 che è questo perfetto viene aumentato di 1 5 5 è minore di tutta sta roba qua che fa 5 no esce e basta vi dimostro che se Salvo mando a schermo e giustamente Abbiamo un problema perché perché sto mandando a schermo un intero senza far cosa quello che abbiamo fatto sempre dall'inizio che è così quindi Salviamo rimandiamo a schermo e vedete Magari
uno slash n Perfetto Mi dimentico sempre mentre spiego e vedete 10 20 30 40 50 va bene Molto molto semplice così possiamo passare in rassegna ad ogni elemento non volete mandarlo a schermo e volete cambiarlo nessun problema Quello che non possiamo fare è eliminare elementi O aggiungere elementi detto questo voglio farvi vedere un'ultima cosa Ma siamo già andati lunghi che sono gli Array multidimensionali o matrici gli Array multidimensionali sono Array presenti in Array quindi int matrice Cosa andiamo a fare voglio fare una matrice 3x3 Quindi anziché avere solo qua 3 facciamo un 3 per 3
TAC e qua dentro abbiamo cosa abbiamo il nostro primo Array giusto e il nostro Rei Cosa contiene è un Array di Array vedete è un Array di interi che però contiene un altro Array quindi facciamo così tac tac virgola TAC Ognuno di questi Quindi è un grande Array lo vedete questo qui il primo che contiene tre elementi Ognuno di questi Array lo vedete qui che è un sono tutti Array contengono tre elementi di cosa di interi Quindi se vado a fare 10 20 30 40 50 60 70 80 90 Questa è una matrice va bene
o un Array multidimen canale potete aumentare le dimensioni Se volete restiamo con questa che la versione più semplice come luppiamo un Array del genere Beh è molto semplice andiamo a fare il loop annidato come ve l'ho spiegato perché alla fine abbiamo se io faccio così Guardate un po' se faccio così cosa vi sembra Datemi un filino per formattarlo magari la virgola la teniamo Ma andiamo Cosa vi sembra righe e colonne giusto e noi abbiamo già parlato di righe e colonne l'abbiamo parlato durante il for Quindi se andiamo a fare for con int riga passiamo prima
alla riga perché vedete che ogni Array è una riga quindi in riga uguale a 0 riga sarà minore di cosa A sto punto mettiamo tre non siamo a fare Side of far Ray bla bla bla per ora non mi interessa sta cosa tanto l'abbiamo già vista Scusatemi non i più più ma riga più più e qua dentro andiamo a fare la medesima prima cosa Ma attenzione la andiamo a fare per Colonna Quindi qua colonna Copiamo e anche qua abbiamo Tre Colonne Perciò siamo a posto e poi prendiamo a schermo Ma andiamo a schermo sempre il
nostro intero con slash n e cosa mandiamo a schermo Ma andiamo a schermo la Celletta singola quindi riga Zero colonna Zero riga Zero colonna 1 riga poi la traina chiaramente Ok riga 2 Anzi non è Scusatemi è la numero due ma realtà l'indice è l'uno Quindi qua riga Zero qua è riga 1 colonna 0 e via discorrendo perciò sarebbe riga Zero colonna 1 colonna 0 riga Zero colonna 1 riga Zero Colonna 2 andiamo avanti riga 1 colonna 0 come sistemiamo ste cose Beh abbiamo riga una donna quindi riga e colonna e io vi dimostro che
se vado a mettere un punto e virgola per non avere errore Salvo manda schermo e la magia Eccola qua da 10 a 90 tutto compreso va bene questi sono gli Array non semplicissimi in C perché molto legate alla memoria un po' confusionari ma sono la base della programmazione a parte il discorso memoria il resto abbastanza semplice sono collezioni di date ben dentro gli stessi dati sono di numero finito gli ho dato tutte le metafore che potete usare per ricordarlo Finché poi diventa seconda natura non perdiamo tempo perché dobbiamo andare avanti ci vediamo tra poco