introduzione alla programmazione (Caravagna e Russo)
Programmazione in C
Nozioni Fondamentali
Programma: Un insieme di istruzioni che descrivono un algoritmo per calcolare un risultato (output) a partire da dati iniziali (input). Un programma può essere pensato come una funzione matematica.
Computazione: L’esecuzione di un programma, che comporta modifiche successive al suo stato interno.
Variabile: Un nome associato a un valore modificabile.
Stato: L’insieme delle variabili e i loro valori in un dato momento durante l’esecuzione di un programma.
Assegnamento: Istruzione che modifica il valore di una variabile. nome_variabile = espressione;
Espressione: Combinazione di variabili, costanti, operatori e funzioni che produce un valore.
Ambiente e Memoria: L’ambiente mappa le variabili agli indirizzi di memoria, mentre la memoria memorizza i valori a quegli indirizzi. Lo stato di un programma è definito dalla coppia ambiente-memoria.
Dichiarazione di Variabile:tipo nome_variabile; o tipo nome_variabile = espressione;
Tipi di Dato:int, float, double, char, etc.
Istruzioni Condizionali e Iterative
Istruzione if: Esegue un blocco di codice solo se una condizione è vera. if (condizione) { ... } else { ... }
Espressioni Logiche: Usano operatori di confronto (<, >, <=, >=, ==, !=) e operatori logici (&&, ||, !).
Istruzione while: Esegue un blocco di codice ripetutamente finché una condizione è vera. while (condizione) { ... }
Istruzione for: Esegue un blocco di codice un numero determinato di volte. for (inizializzazione; condizione; aggiornamento) { ... }
Blocchi di Codice e Pile di Frame: I blocchi di codice definiscono lo scope delle variabili. La pila di frame tiene traccia dello stato di esecuzione dei blocchi, implementando il meccanismo LIFO (Last In, First Out).
Funzioni
Definizione di Funzione:tipo_ritorno nome_funzione(tipo_argomento_1 nome_argomento_1, ...) { ... }
Passaggio di Parametri: In C, il passaggio di parametri avviene per valore. Si può simulare il passaggio per riferimento usando i puntatori.
Funzioni Ricorsive: Funzioni che chiamano sé stesse. Devono avere un caso base per terminare la ricorsione.
Puntatori
Definizione: Variabili che contengono indirizzi di memoria. tipo *nome_puntatore;
Operatore & (Address of): Restituisce l’indirizzo di una variabile.
Operatore * (Dereferenziazione): Accedi al valore memorizzato all’indirizzo puntato da un puntatore.
Passaggio per Indirizzo: Passare un puntatore a una funzione permette di modificare il valore della variabile originale.
Array (Vettori)
Dichiarazione:tipo nome_array[dimensione];
Indicizzazione: Inizia da 0. nome_array[indice]
Array e Puntatori: In C, il nome di un array è un puntatore al suo primo elemento.
Aritmetica dei Puntatori: Si possono usare operatori aritmetici su puntatori per accedere ad elementi di un array.
Stringhe
Rappresentazione: Array di caratteri terminati da \0.
Magic Methods (Dunder Methods): Metodi speciali con nomi che iniziano e finiscono con doppio underscore (e.g., __str__, __repr__, __init__, __iter__, __next__).
Ereditarietà
Sottoclasse: Classe che eredita da un’altra classe (superclasse).
Superclasse: Classe da cui eredita una sottoclasse.
super(): Funzione per accedere ai metodi della superclasse.
Overriding: Ridefinire un metodo della superclasse nella sottoclasse.
Classi Astratte
Definizione: Classi che non possono essere istanziate direttamente. Servono come base per altre classi.
abstractmethod: Decoratore per definire metodi astratti (metodi senza implementazione).
List Comprehensions
Sintassi:[espressione for elemento in iterabile if condizione]
Utilizzo: Creare liste in modo conciso ed efficiente.
Iteratori
__iter__: Metodo speciale che restituisce un iteratore.
__next__: Metodo speciale che restituisce il prossimo elemento dell’iteratore.
StopIteration: Eccezione sollevata quando l’iteratore non ha più elementi.