📘 CodingMarble Learn

Programmazione avanzata e applicazioni

Programmare in modo avanzato significa scegliere la struttura dati giusta (array, lista concatenata, pila, coda), scrivere e provare il codice in un IDE, disegnare grafici e animazioni, usare le funzioni del foglio di calcolo e salvare i dati in modo sicuro in un database relazionale che si interroga con SQL.

🎬 Storia passo dopo passo

  1. Un array ha un numero fisso di posti, qui sei. La dimensione si decide prima. Se è pieno, non puoi aggiungere altro.
  2. Una lista concatenata cresce quando serve. Ogni nodo contiene un valore e un collegamento al nodo successivo. L'ultimo punta a niente (null). Premi Aggiungi.
  3. Una pila funziona come un mucchio di piatti. Metti (push) e togli (pop) sempre dalla cima. L'ultimo che entra è il primo a uscire.
  4. Una coda funziona come la fila per i biglietti. Ti metti in fondo e esci dalla testa. Il primo che entra è il primo a uscire.
  5. Un database tiene i dati in tabelle. Due tabelle si uniscono con una chiave, l'id. Una query SQL sceglie solo le righe che vuoi, qui i voti da 50 in su.
  6. Tocca a te. Scegli lista, pila o coda e premi i pulsanti per aggiungere e togliere elementi.

Suggerimento: trascina la scena 3D per ruotarla. Usa due dita per zoomare.

🤔 Dubbi comuni, chiariti

Perché non posso aggiungere un settimo elemento all'array?

La dimensione di un array è fissata quando lo crei. Nel passo 0 i sei posti sono tutto l'array. Per una raccolta che cresce usa una lista.

Dove tiene l'ordine la lista concatenata?

Nei collegamenti. Ogni nodo conosce solo il nodo successivo, quindi si segue la catena di frecce. Guarda il passo 1.

Perché il pop mi dà l'ultimo elemento che ho aggiunto?

Una pila ha una sola estremità aperta, la cima. L'elemento più nuovo sta in cima, quindi è il primo a uscire. Guarda il passo 2.

In cosa una coda è diversa da una pila?

In una coda si aggiunge in fondo e si toglie dalla testa, quindi esce per primo il più vecchio. Premi i pulsanti nel passo 3.

Perché usare due tabelle e non una?

Così ogni informazione è salvata una volta sola. I nomi stanno in una tabella e i voti in un'altra, unite dall'id. Per correggere un nome basta cambiare un solo posto. Guarda il passo 4.

Quale struttura devo usare?

Serve dimensione fissa e accesso veloce con l'indice: array. Raccolta che cresce: lista. Annulla e indietro: pila. Fila d'attesa: coda. Provale tutte nel passo 5.

Strutture dati: array, lista concatenata, pila, coda

Una struttura dati è un modo di ordinare i dati perché un programma li usi in fretta e con facilità.

Le librerie contengono già questi strumenti. In Python una list funziona come pila (append, pop) e collections.deque funziona come coda veloce. Se esiste una libreria, usala: non riscriverla.

stack = []
stack.append(5); stack.append(8)
stack.pop()      # gives 8
from collections import deque
q = deque([4, 9]); q.append(2)
q.popleft()      # gives 4

Usare un IDE: scrivere, eseguire, provare

Un IDE (ambiente di sviluppo integrato) mette in un unico posto un editor, un pulsante per eseguire, un debugger e altri strumenti. Colora il codice, suggerisce i nomi e mostra gli errori mentre scrivi.

Visualizzazione e animazione in 2D e 3D

Le immagini ci aiutano a vedere gli schemi. I programmi possono disegnare grafici (a barre, a linee, a dispersione), disegni 2D e scene 3D. Un'animazione è la stessa immagine disegnata più volte, con un piccolo cambiamento ogni volta (circa da 30 a 60 volte al secondo). Un modo semplice: tieni una variabile come x, aggiungi un poco a ogni fotogramma e ridisegna. Il 3D di questa pagina è fatto allo stesso modo, con una libreria 3D.

Funzioni avanzate del foglio di calcolo

I fogli di calcolo possono fare lavori da programma con le funzioni:

Database relazionali e SQL

Un database relazionale tiene i dati in tabelle fatte di righe e colonne. Ogni tabella ha una chiave primaria, una colonna con valori unici (l'id). Un'altra tabella usa quel valore come chiave esterna per collegarsi. Un buon progetto salva ogni informazione una sola volta, così non ci sono dati ripetuti.

SQL è il linguaggio per fare domande e cambiare i dati:

SELECT name, score FROM students
JOIN marks ON students.id = marks.id
WHERE score >= 50 ORDER BY score DESC;

INSERT INTO marks (id, score) VALUES (5, 67);
UPDATE marks SET score = 55 WHERE id = 2;
DELETE FROM marks WHERE id = 5;

Integrità vuol dire che i dati restano corretti: le chiavi sono uniche, una chiave esterna deve corrispondere a una riga vera e i valori devono avere il tipo giusto. Sicurezza vuol dire password per gli utenti, a ogni utente solo i permessi che servono, copie di sicurezza e mai costruire SQL incollando il testo dell'utente nella query (usa i parametri): così si evita la SQL injection.

Contribuire alle risorse aperte

Molti strumenti e librerie sono open source: chiunque può leggerli, usarli e migliorarli secondo una licenza. Puoi aiutare correggendo un errore, migliorando una guida, traducendo una pagina o aggiungendo un esempio. Leggi sempre la licenza, cita gli autori e scrivi messaggi chiari e gentili quando proponi una modifica.

Prova tu

Nel 3D, passo 5, metti 3 elementi in una pila (push), poi toglili (pop). Scrivi l'ordine. Fai lo stesso con una coda. Poi prima prevedi, dopo controlla: se aggiungi 4, 9, 2 e togli un elemento, quale valore resta in testa alla coda e in cima alla pila?

Formule e definizioni chiave

Esempi svolti

1. Gli elementi 5, 8 e 2 vengono messi in una pila in quest'ordine. Poi si fa pop due volte. Cosa c'è ora in cima?

Pila dopo i push: 5, 8, 2 (il 2 in cima). Il pop toglie il 2, poi l'8. Resta: 5. In cima c'è 5.

2. Gli elementi 4, 9, 2 entrano in una coda in quest'ordine. Si fa un dequeue. Quale elemento è ora in testa?

Il primo entrato esce, quindi si toglie il 4. In testa c'è il 9.

3. Tabella dei voti: id da 1 a 4 con punteggi 72, 45, 88, 51. Quante righe restituisce WHERE score >= 50?

72, 88 e 51 sono 50 o più. Sono 3 righe.

4. Le celle B2:B5 contengono 72, 45, 88, 51. Quanto dà =SUMIF(B2:B5,">=50")?

Somma solo 72, 88 e 51: 72 + 88 + 51 = 211.

5. Perché usare una pila per controllare le parentesi come ( [ ] ) in un'espressione?

Si fa push di ogni parentesi aperta. Quando arriva una parentesi chiusa, si fa pop e si controlla che corrisponda. L'ultima aperta deve chiudersi per prima (LIFO), ed è quello che dà una pila. Se alla fine la pila è vuota, le parentesi sono corrette.

Errori comuni

Quiz di allenamento

1. Quale struttura è LIFO?
2. Quale struttura cresce un nodo alla volta con dei collegamenti?
3. In SQL, quale clausola sceglie le righe che rispettano una regola?
4. Una colonna con un valore unico per ogni riga è una:
5. Cosa fa un breakpoint del debugger?

Esercizi: rispondi da solo

Scrivi o scegli la risposta, poi premi Controlla. Usa un suggerimento se sei bloccato; la soluzione completa appare dopo la tua risposta.

Domande frequenti

Qual è la differenza tra un array e una lista concatenata?

Un array ha dimensione fissa e permette di saltare a qualsiasi elemento con l'indice. Una lista concatenata può crescere e ridursi, ma per arrivare a un elemento devi seguire i collegamenti uno per uno.

Cosa sono la chiave primaria e la chiave esterna?

La chiave primaria è una colonna che dà a ogni riga un valore unico, come il numero di matricola. La chiave esterna è una colonna di un'altra tabella che contiene quel valore per collegare le due tabelle.

Perché la SQL injection è pericolosa e come si evita?

Se incolli il testo dell'utente direttamente in un comando SQL, un utente furbo può aggiungere i suoi comandi e leggere o cancellare dati. Usa query con parametri, così il testo è sempre trattato solo come dato.

Da studiare prima

Da studiare dopo