Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Informatica Modulo B (Programmazione), Appunti di Sistemi Informativi

Appunti del secondo modulo di Informatica e Sistemi Informativi, riguardanti sia la parte teorica che pratica della programmazione e di Excel, presi col professore Giorgio Alessandro Motta. Voto conseguito: 30L. A fine elenco è allegato un indice con tutti gli argomenti trattati.

Tipologia: Appunti

2025/2026

In vendita dal 05/02/2026

lorenzo-mlg
lorenzo-mlg 🇮🇹

5

(1)

5 documenti

1 / 67

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Pagina 1 di 64
INTRODUZIONE ALLA PROGRAMMAZIONE:
Tipologie di linguaggi di programmazione:
I primi linguaggi di programmazione:
I primi microcalcolatori permettevano l’inserimento di istruzioni e dati solo in forma
numerica. Questo metodo di inserimento veniva chiamato linguaggio macchina e
di basso livello. Col tempo, il linguaggio macchina diventò di forma alfanumerica
grazie al Linguaggio Assembly, che veniva tradotto in istruzioni per il processore
grazie ad un programma chiamato Assembler, che è ciò che permette la compilazione.
Def: La compilazione è la traduzione di un programma scritto in linguaggio simbolico
(quindi definito di alto livello) nel linguaggio macchina compreso dalla CPU.
I linguaggi interpretati:
Nel 1957 venne creato il primo linguaggio di alto livello, il Fortran, orientato allo
sviluppo di programmi scientifici e matematici. Nel 1964 venne creato il BASIC,
adottato poi da Microsoft nel 1975, che ha come caratteristica quella di essere
interpretato: il programma viene tradotto in linguaggio macchina ed eseguito una
istruzione alla volta, da parte di un programma chiamato interprete (≠ compilatore,
dove tutte le istruzioni devono essere convertite dal compilatore prima di essere eseguito).
I linguaggi con bytecode:
Una forma ibrida tra linguaggi compilati e interpretati sono i linguaggi dotati di
macchina virtuale, come Java.
Def: La macchina virtuale è un modello di macchina che accetta/esegue istruzioni in
un linguaggio a medio livello d’astrazione, detto bytecode.
La traduzione avviene in due passaggi: da codice sorgente a bytecode, e da bytecode
a codice macchina. Di fatto, un software simula il funzionamento della macchina
virtuale per eseguire le istruzioni del bytecode. Le prestazioni sono intermedie tra un
linguaggio interpretato (più lento) ed un linguaggio compilato (più veloce).
Gli algoritmi:
Def: L’algoritmo è una sequenza finita di istruzioni/operazioni elementari non
ambigue ed effettivamente computate da un agente di calcolo che, se eseguite,
producono la soluzione/risultato di un certo problema in tempo finito.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43

Anteprima parziale del testo

Scarica Informatica Modulo B (Programmazione) e più Appunti in PDF di Sistemi Informativi solo su Docsity!

INTRODUZIONE ALLA PROGRAMMAZIONE:

Tipologie di linguaggi di programmazione:

I primi linguaggi di programmazione:

I primi microcalcolatori permettevano l’inserimento di istruzioni e dati solo in forma numerica. Questo metodo di inserimento veniva chiamato linguaggio macchina e di basso livello. Col tempo, il linguaggio macchina diventò di forma alfanumerica grazie al Linguaggio Assembly , che veniva tradotto in istruzioni per il processore grazie ad un programma chiamato Assembler , che è ciò che permette la compilazione.

Def: La compilazione è la traduzione di un programma scritto in linguaggio simbolico (quindi definito di alto livello) nel linguaggio macchina compreso dalla CPU.

I linguaggi interpretati:

Nel 1957 venne creato il primo linguaggio di alto livello, il Fortran , orientato allo sviluppo di programmi scientifici e matematici. Nel 1964 venne creato il BASIC, adottato poi da Microsoft nel 1975, che ha come caratteristica quella di essere interpretato: il programma viene tradotto in linguaggio macchina ed eseguito una istruzione alla volta, da parte di un programma chiamato interprete (≠ compilatore, dove tutte le istruzioni devono essere convertite dal compilatore prima di essere eseguito).

I linguaggi con bytecode:

Una forma ibrida tra linguaggi compilati e interpretati sono i linguaggi dotati di macchina virtuale, come Java.

Def: La macchina virtuale è un modello di macchina che accetta/esegue istruzioni in un linguaggio a medio livello d’astrazione, detto bytecode.

La traduzione avviene in due passaggi: da codice sorgente a bytecode, e da bytecode a codice macchina. Di fatto, un software simula il funzionamento della macchina virtuale per eseguire le istruzioni del bytecode. Le prestazioni sono intermedie tra un linguaggio interpretato (più lento) ed un linguaggio compilato (più veloce).

Gli algoritmi:

Def: L’algoritmo è una sequenza finita di istruzioni/operazioni elementari non ambigue ed effettivamente computate da un agente di calcolo che, se eseguite, producono la soluzione/risultato di un certo problema in tempo finito.

Le caratteristiche principali degli algoritmi sono tre:

  • Terminazione: l’algoritmo deve terminare dopo un numero finito di passi, ognuno dei quali dev’essere eseguito in tempo finito;
  • Correttezza: l’algoritmo deve risolvere il problema per cui è stato progettato: ▪ Altrimenti, si ha un algoritmo approssimato, accettabile solo in alcuni casi e solo se più efficiente.
  • Determinismo: l’algoritmo eseguito sugli stessi input deve fornire lo stesso output. ▪ In alcune applicazioni si può rinunciare al determinismo per avere algoritmi più efficienti.

Raffigurazione degli algoritmi:

Lo standard internazionale ISO 5807 detta le regole ed i simboli usati per creare diagrammi relativi a processi, programmi e sistemi.

Def: I diagrammi di flusso (flowchart) mostrano la sequenza di operazioni o azioni che sono svolte da un algoritmo, un processo o un programma.

Def: I diagrammi di rete del progetto (Project Network Chart) mostrano la relazione tra le attività di un programma o di un progetto (es: PERT, diagramma di Gantt).

Def: I diagrammi di sistema (System Resources Chart) rappresentano l’allocazione delle risorse di sistema, come ad esempio la memoria e l’unità di elaborazione.

Per raffigurare gli algoritmi, si usano solitamente i diagrammi di flusso, visto che permettono di evidenziare passi e sottoprocessi.

Diagrammi di flusso:

Nei diagrammi di flusso, si assegna ad ogni elemento grafico una funzione specifica:

  • Il cerchio indica l’inizio o la fine del flowchart;
  • Il parallelogramma indica la lettura e scrittura dei dati (operazioni di input/output);
  • Il rettangolo indica l’esecuzione di una procedura;

Esempio di diagramma di flusso:

BASI DI DATI:

Il modello ER:

La progettazione concettuale è la prima fase del processo di sviluppo di una base di dati. In questa fase si rappresenta la realtà del dominio applicativo (ossia, la realtà che il database dovrà rappresentare, ad esempio gli ordini di un’azienda) in modo astratto, attraverso un modello dei dati indipendente dalla tecnologia sottostante.

Per rappresentare questa realtà, viene utilizzato il modello Entità-Relazione, introdotto da Peter Chen nel 1976, che permette di descrivere in modo formale e visivo gli elementi fondamentali di un sistema informativo.

Gli strumenti all’interno del diagramma ER:

Questo avviene attraverso tre strumenti:

  • Le entità: rappresentano classi di oggetti o concetti del mondo reale; ▪ Le entità rappresentano dei concetti, concreti (es: l’insieme dei dati che si ha di una persona) o astratti (es: tutte le informazioni che si ha su un pagamento).
  • Gli attributi: descrivono le proprietà/caratteristiche delle entità; ▪ Ogni attributo assume valori appartenenti ad un determinato dominio, cioè un insieme di valori ammessi per quella voce, come numeri interi, testo e date; ▪ Il dominio specifica il tipo di informazione che può essere registrata, i vincoli di formato, gli intervalli ammessi, o talvolta anche l’insieme finito di valori validi; ▪ Il dominio garantisce l’integrità dei dati e permette di evitare errori di inserimento o inconsistenze.
  • Le relazioni: collegano le entità tra loro e rappresentano la loro interazione. ▪ Ogni relazione: - Collega entità diverse; - Ha un nome significativo che ne indica il ruolo; - Può avere attributi propri, se la relazione possiede informazioni aggiuntive inerenti quel legame. ▪ Più relazioni possono coinvolgere le stesse entità; ▪ Le relazioni possono coinvolgere due o più entità.

Il modello Entità-Relazione è sia una rappresentazione grafica dei dati con un diagramma di schema, sia uno strumento di analisi e comunicazione, visto che permette di tradurre le informazioni ed i processi di un’organizzazione in forma logica e condivisibile. Infatti, usare il modello ER permette di:

  • Rappresentare il frammento di realtà in modo chiaro e sintetico, evidenziando solo le informazioni rilevanti;
  • Individuare errori o ambiguità già nella fase di analisi, prima di costruire il database;
  • Condividere facilmente il modello dei dati tra diversi ruoli nel sistema informativo;
  • Modellare i concetti/fatti del contesto applicativo in maniera astratta e indipendente dalla struttura logica dei dati.

Rappresentazione grafica del diagramma ER:

Indichiamo le entità con un rettangolo, le relazioni invece con un rombo, mentre gli attributi vengono indicati in maniera diversa in base al loro tipo:

Tipo di attributo: Descrizione: Forma nel diagramma ER:

Semplice (es: codice cliente)

Atomico, non scomponibile Ovale singolo

Composto (es: indirizzo) Composto da sottoattributi Ovale con rami

Multivalore (es: telefono) Può avere più valori Doppio ovale

Derivato (es: età) Calcolato da altri attributi Ovale tratteggiato

▪ Es: Ogni studente può iscriversi a più corsi, ed ogni corso può avere più studenti.

Cardinalità minima:

Nei diagrammi si può specificare anche la cardinalità minima, ossia quante volte almeno ciascuna occorrenza di A dev’essere associata a qualche occorrenza di B, e viceversa.

Nell’esempio:

  • Ogni docente può essere relatore di 0 o più studenti (0…M);
  • Ogni studente può avere 0 o più relatori (0…N);
  • Ogni impiegato abita esattamente in una città (1…1), ma ogni città può avere 0 o più impiegati che vi abitano (0…N).

Il modello relazionale:

Il modello relazionale, introdotto da Edgar F. Codd nel 1970 (antecedentemente al modello ER), ha l’obiettivo rappresentare la struttura logica dei dati. Si basa sul concetto matematico di relazione: prendendo gli insiemi 𝐷 1 , 𝐷 2 … 𝐷𝑛, chiamati domini , possiamo definire che:

  • La relazione su 𝐷 1 , 𝐷 2 , … , 𝐷𝑛 è un qualunque sottoinsieme 𝑟 del prodotto cartesiano;
  • 𝑛 si chiama grado o arità della relazione 𝑟;
  • Il numero 𝑁 = |𝑟| di tuple è chiamato cardinalità della relazione 𝑟.

Caratteristiche:

Nel modello relazionale:

  • I dati sono organizzati in relazioni, che sono rappresentate da tabelle a doppia entrata (cioè a due dimensioni: righe e colonne); ▪ La relazione è quindi un insieme di righe che hanno stessa struttura.
  • Ogni riga rappresenta una tupla , ossia un membro della relazione; ▪ Cardinalità = numero di righe.

Esempio:

  • Ogni colonna rappresenta un attributo, cioè un dominio dotato di nome; ▪ Grado = numero di colonne.
  • Nelle applicazioni reali le tabelle possono avere righe duplicate.

Le tabelle:

Ogni tabella ha il compito di descrivere un insieme di oggetti dello stesso tipo, e può rappresentare le occorrenze di un’entità o di una relazione del modello ER. Le componenti fondamentali sono:

  • Intestazione/schema: insieme dei nomi degli attributi, assieme al nome della relazione/tabella;
  • Corpo/istanze: l’insieme delle tuple (le righe), cioè i record memorizzati;
  • Domini: insiemi di valori ammessi per ogni attributo.

Lo schema logico:

Def: Lo schema logico è la descrizione formale e completa della struttura del database relazionale. Definisce le tabelle, le colonne, le chiavi, i vincoli e i legami tra le diverse entità, indipendentemente da come i dati verranno fisicamente memorizzati.

È l’equivalente tecnico del modello concettuale: infatti, il modello ER rappresenta cosa memorizzare, mentre lo schema logico definisce come organizzarlo in tabelle.

Tipologie di dati:

All’interno del modello relazionale, esistono una serie di elementi:

Elemento: Descrizione: Esempio: Tabella Rappresenta un’entità Cliente Attributo Proprietà della tabella Nome, email Chiave primaria Identifica univocamente una tupla

id_cliente

Chiave esterna Collega tabelle diverse id_cliente → cliente Vincolo Regola sui valori ammessi NOT NULL, UNIQUE, CHECK

Vincolo: Scopo: Esempio:

(forza che NOME sia un valore esistente) UNIQUE (UQ) Evita duplicati email UNIQUE (in nessun’altra riga ci può essere un campo email uguale) CHECK (CK) Impone una condizione prezzo > 0 DEFAULT (DF) Impedisce un valore automatico

disponibile DEFAULT TRUE (se non è specificato il campo default, restituisci VERO) PRIMARY KEY (PK) Identifica univocamente una riga

id_cliente PK

FOREIGN KEY (FK) Permette di collegare una riga ad un’altra tabella

id_cliente → CLIENTE (ad esempio, se sono nella tabella SPEDIZIONI, l’id_cliente, se uguale in entrambe le tabelle, mi permette di ottenere i dati iscritti anche nella tabella CLIENTE, e non solo in quella che sto guardando adesso)

Le chiavi:

Le chiavi sono elementi fondamentali per garantire l’integrità e l’organizzazione dei dati nei database relazionali. Le chiavi permettono di identificare in modo univoco ogni record, stabiliscono collegamenti logici tra diverse entità e garantiscono la coerenza dei dati nel sistema.

Le chiavi possono essere di quattro tipi:

  • Superchiave: insieme di attributi che identifica univocamente una tupla (riga) nella tabella. Può contenere attributi ridondanti; ▪ È l’insieme di attributi che permette di differenziare una riga da un’altra, anche se contiene attributi in più che non servono a renderla unica.
  • Chiave candidata: superchiave minimale, visto che non contiene attributi ridondanti per l’identificazione univoca; ▪ Contiene solo il minimo essenziale per identificare una riga rispetto ad un’altra.
  • Chiave primaria (PK): chiave candidata scelta per identificare univocamente le tuple/righe; ▪ Dev’essere solo una per tabella.
  • Chiave esterna (FK): attributo che referenzia la chiave primaria di un’altra tabella per stabilire relazioni;
  • Chiave alternativa: dato ulteriore alla chiave primaria per evitare doppioni. ▪ Si imposta con il vincolo UNIQUE; ▪ Ad esempio, l’ID cliente può essere la chiave primaria, e l’e-mail la chiave alternativa.

Esiste anche una distinzione tra chiave naturale (valori reali) e chiavi surrogate (valori, come l’ID cliente, creati apposta e senza significato).

Dal modello concettuale al modello logico:

Per convertire le idee concettuali in una struttura dati implementabile, dobbiamo passare dal modello concettuale (ER) al modello logico (relazionale).

Def: Una relazione descrive il collegamento logico tra due entità in un database.

Le relazioni possono essere, secondo la cardinalità, uno-a-uno, uno-a-molti e molti- a-molti.

Regole di trasformazione:

  • Le entità del modello ER diventano tabelle nel modello relazionale;
  • Gli attributi dell’entità diventano colonne nella tabella;
  • Gli identificatori univoci diventano chiavi primarie;
  • Le relazioni si trasformano in: ▪ Chiavi esterne (in caso di relazione 1 :N); ▪ Tabelle di congiunzione (in caso di relazione M:N).
  • Anomalie di inserimento: difficoltà nell’inserire nuovi dati senza avere informazioni complete o duplicate; ▪ Es: Non posso aggiungere un nuovo dipartimento se non ho almeno un dipendente.
  • Anomalie di aggiornamento: inconsistenze quando si modificano dati duplicati in più luoghi; ▪ Es: Cambio l’indirizzo del dipartimento, ma lo aggiorno in un solo record.
  • Anomalie di cancellazione: perdite involontarie di informazioni quando si elimina un record. ▪ Es: Eliminando l’ultimo dipendente, perdo le informazioni del dipartimento.

SQL:

Def: SQL (Structured Query Language) è il linguaggio standard per interrogare e gestire database relazionali.

Le caratteristiche di SQL sono:

  • Linguaggio dichiarativo: specifichi cosa vuoi, non come ottenerlo;
  • Standard internazionale: supportato da tutti i principali DBMS;
  • Potente e flessibile: dalle query semplici alle analisi complesse;
  • Intuitivo: sintassi simile al linguaggio naturale.

Un sito per programmare in SQL è: https://www.w3schools.com/sql/trysql.asp?filename=trysql_editor.

L’attributo SELECT:

Ogni indicazione di SQL deve iniziare con l’operatore «SELECT», seguito dal nome di tutte le colonne che vogliamo che il programma legga.

  • Nel caso volessimo selezionare tutte le colonne della tabella, basta scrivere «SELECT *»
  • Se volessimo eliminare le righe duplicate, dovremmo inserire il comando «DISTINCT» subito dopo al «SELECT» e prima delle righe da selezionare.
  • Se vogliamo far apparire una colonna con un nome diverso dell’intestazione rispetto al suo, basta inserire dopo il suo nome originale il comando «AS», seguito dal nome sostitutivo della colonna.

Il «SELECT» va seguito dal «FROM», con il quale si indica il nome della tabella da cui prendere il dato.

Affiancare le colonne:

SQL permette inoltre di affiancare le colonne di tabelle diverse, in base ad una condizione che dev’essere messa tra parentesi: supponiamo di essere un negozio online, e di avere in una tabella l’ID del cliente e le informazioni su un suo ordine, ed in un’altra tabella l’ID del cliente e le informazioni sul cliente in sé. Sfruttando che entrambe le tabelle hanno l’ID del cliente, possiamo affiancare le colonne delle due tabelle in modo da ottenere più informazioni sul cliente.

Tutto parte utilizzando l’operatore FROM e specificando, tra parentesi, l’identificatore della tabella iniziale che dev’essere unita. Si deve specificare prima la tabella che dev’essere unita a quella selezionata, per poi specificare dopo l’operatore «ON» la condizione che dev’essere soddisfatta per unire le due tabelle.

Esempio:Codice:

SELECT DISTINCT S.SupplierName, S.Address as IND FROM Suppliers S

Spiegazione:

Ho chiesto a SQL di darmi le due colonne intitolate «SupplierName» ed «Address», ottenendo le righe distinte. Inoltre, gli ho chiesto di rinominare, solo nel risultato, la colonna Address su «IND». Infine, gli ho dato il riferimento da cui prendere i dati, specificando la tabella («Suppliers») e stabilendo un nome con cui chiamarla nel codice («S»).

Risultato:

SupplierName IND Primo fornitore

Via del primo fornitore Secondo fornitore

Via del secondo fornitore Terzo fornitore Via del terzo fornitore

Se voglio chiedere che una condizione non sia soddisfatta, posso usare l’operatore «NOT» prima della condizione.

Per invece chiedere che siano soddisfatte condizioni più avanzate, uso l’operatore «LIKE», nel quale posso usare una sintassi particolare per creare query complesse:

  • Mettendo WHERE S.Country LIKE "a%" si chiede che la prima lettera sia «a»;
  • Mettendo S.Country LIKE "%a%", si chiede che la «a» sia contenuta all’interno della parola;
  • Con le parentesi quadre S.Country LIKE " [AB]%", si può chiedere che la prima lettera sia o «a» o «b».

Esempio:

Codice: ▼ SELECT S.SupplierName, S.Country FROM Suppliers S WHERE NOT S.Country = 'UK'

Spiegazione:

Prendiamo le due colonne «SupplierName» e «Country» dalla tabella Suppliers, e chiediamo a SQL di filtrare la tabella in modo da restituirci tutte le righe dove il valore impostato su COUNTRY non sia su UK.

Risultato:

SupplierName Country

Primo fornitore

Stati Uniti

Secondo fornitore

Finlandia

Inoltre, se volessi ottenere un valore compreso tra due numeri, potrei usare l’operatore BETWEEN AND.

Infine, se volessi ottenere solo i primi 𝑥 risultati, dovrei usare l’operatore «LIMIT».

Accodare righe:

Con l’operatore «UNION» si possono unire due tabelle che hanno già la stessa struttura. L’UNION consiste quindi in un semplice modo per accodare delle righe, al contrario del JOIN, che invece viene usato per affiancare delle colonne.

Con l’UNION, possiamo inserire anche un valore predefinito nel caso non esista una delle colonne richieste.

Esempio:Codice: ▼ SELECT S.SupplierName, S.Country FROM Suppliers S WHERE S.Country LIKE '[IG]%'

Spiegazione:

In questo caso, ho chiesto a SQL di darmi tutte le righe dove la nazione del fornitore iniziasse con la G o con la I.

Risultato:

SupplierName Country Primo fornitore

Germania

Secondo fornitore

Italia

Esempio:

Codice: ▼ SELECT P.ProductName, P.Price FROM Products P WHERE P.Price BETWEEN 5 AND 10

ordinati. È possibile anche specificare DESC per l’ordine discendente e ASC per l’ordine ascendente.

Il GROUP BY:

L’operatore GROUP BY permette di unire tutte le righe che hanno uno stesso tipo di valore, per poi eseguire un’operazione (SUM, AVG, COUNT, MAX, MIN) su quei valori.

La creazione di colonne derivate:

SQL permette di usare una serie di operatori per svolgere una serie di calcoli, tra cui:

  • AVG: media di un valore numerico;
  • COUNT: numero di colonne;
  • MAX e MIN: valore più alto o basso;
  • LEN: numero di caratteri nel testo.

Esempio:Codice: ▼ SELECT CustomerName, City, Country FROM Customers ORDER BY (CASE WHEN City IS NULL THEN Country ELSE City END)

Spiegazione:

Chiediamo a SQL di ordinare i risultati della tabella: se il valore nella colonna «CITY» è vuoto, prendiamo il valore nella colonna «COUNTRY», altrimenti quello della colonna «CITY».

Risultato:

Customer- Name

City Country

Primo cliente

Francia

Secondo cliente

Milano Italia

Terzo cliente

Ottawa Canada

In questi casi, dopo aver dichiarato il comando, dobbiamo inserire nelle parentesi il nome della colonna su cui vogliamo applicare l’operazione, ed infine (dopo le parentesi) dobbiamo nominare la nuova colonna con l’«AS nome».

Quali valori vanno messi nel GROUP BY:

Ogni colonna del SELECT che non fa parte di una funzione aggregata deve far parte del GROUP BY. Aggiungendo però più colonne al GROUP BY, chiediamo che siano soddisfatte più condizioni allo stesso tempo.

Esempio:

Codice: ▼ SELECT P.ProductName, LEN(P.ProductName) AS Length FROM Products P GROUP BY P.ProductName

Spiegazione:

Ho chiesto a SQL di prendere la tabella «Products», e l’ho nominata P per convenienza. Da qui, gli ho chiesto di avere la colonna «ProductName», e di crearne una nuova, chiamata «Length», con il numero di caratteri del valore «ProductName» di quella riga.

Risultato:

ProductName Length

Primo prodotto

Secondo prodotto

Terzo prodotto 14