Estratto del documento

ABILITA’ INFORMATICHE 2025/2026

OPERAZIONI LOGICHE E TABELLE DELLA VERITÀ

Le variabili logiche possono assumere i valori 0 o 1 e, in base all’operazione che agisce su di esse, producono un

valore di output che sarà sempre 0 o 1, cioè falso o vero. Le operazioni logiche fondamentali sono tre: negazione,

congiunzione (prodotto logico) e disgiunzione (somma logica). Queste operazioni sono note anche come NOT,

AND, OR e possiedono differenti notazioni. Le più comuni prevedono l’uso del trattino sopra la variabile per indicare

la negazione, il simbolo · o && per il prodotto logico AND, e il simbolo + oppure || per la disgiunzione logica OR.

CARATTERISTICHE DELLE OPERAZIONI LOGICHE

La negazione è un’operazione che si applica su una singola variabile. Essa inverte il valore della variabile,

restituendo il suo complementare. Poiché le variabili booleane possono assumere soltanto i valori 0 o 1, quando la

variabile vale 0 la negazione vale 1, e quando vale 1 la negazione vale 0. L’operazione consiste dunque

nell’inversione del valore: da 0 diventa 1 e da 1 diventa 0.

Le operazioni AND (prodotto logico) e OR (somma logica) si applicano invece su almeno due variabili; quindi, non

agiscono su un’unica variabile ma mettono in relazione due o più variabili.

L’operazione AND restituisce vero solo quando tutte le variabili coinvolte sono vere. Considerando che 0 indica il

valore falso e 1 indica il valore vero, l’AND fornisce risultato vero solo se entrambe le variabili sono 1. In tutti gli altri

casi restituisce falso.

L’operazione OR restituisce vero quando almeno una delle variabili è vera. Non è necessario che entrambe siano

vere: è sufficiente che almeno una sola variabile sia 1 affinché anche l’operazione OR restituisca 1. Risulta falsa

soltanto quando entrambe le variabili sono false.

Queste operazioni logiche costituiscono mattoni fondamentali per la costruzione delle funzioni booleane,

utilizzate per relazionare variabili booleane.

TABELLE DELLA VERITÀ

Le operazioni possono essere rappresentate attraverso le tabelle della verità, che illustrano tutte le possibili

combinazioni dei valori delle variabili e mostrano il risultato dell’operazione logica considerata.

Per la negazione, essendo coinvolta un’unica variabile X che può assumere i valori 0 e 1, le combinazioni possibili

sono due, pari a 2¹. Il valore della negazione è semplicemente il valore complementare: se X = 0, NOT X = 1; se X = 1,

NOT X = 0.

Nel caso degli operatori AND e OR, che relazionano due variabili, le combinazioni sono 2², quindi quattro. L’AND

restituisce 1 solo quando entrambe le variabili sono 1; l’OR restituisce 1 quando almeno una delle variabili è 1 e

risulta 0 solo quando entrambe sono 0.

ESPRESSIONI LOGICHE E ORDINE DI PRECEDENZA

Le operazioni elementari possono essere combinate per formare espressioni logiche, analoghe alle espressioni

algebriche. Come nell’algebra tradizionale si eseguono prima i prodotti e poi le somme, anche nell’algebra booleana

esiste un ordine di precedenza degli operatori. L’ordine è il seguente:

1. NOT

2. AND

3. OR

Le espressioni vengono quindi risolte applicando prima tutte le negazioni, poi tutte le congiunzioni e infine le

disgiunzioni.

A seconda della notazione utilizzata, le operazioni possono essere rappresentate in modi diversi. È possibile

indicare la somma logica con +, il prodotto logico con ·, e la negazione con una barra sopra la variabile. Le stesse

operazioni possono essere scritte anche tramite le parole AND, OR, NOT.

PROPRIETÀ DELL’ALGEBRA BOOLEANA

L’algebra booleana presenta numerose proprietà, molte delle quali analoghe a quelle dell’algebra aritmetica. Tra

queste compaiono le proprietà associativa e commutativa sia della somma logica che del prodotto logico. Ad

esempio, l’espressione A + A restituisce sempre A, poiché se A è vero l’OR è vero, e se A è falso l’OR è falso.

Analogamente, A · A restituisce sempre A, perché l’AND tra due valori identici restituisce sempre quel valore.

Tali proprietà permettono di semplificare le espressioni, esattamente come avviene nell’algebra classica.

ESEMPIO DI ESPRESSIONE LOGICA

Considerando l’espressione NOT A AND B OR NOT C, si hanno tre variabili A, B e C, ciascuna delle quali può

assumere i valori 0 o 1. Le combinazioni possibili sono 2³ = 8 e possono essere rappresentate attraverso una tabella

della verità.

Per calcolare l’espressione, si procede rispettando l’ordine di precedenza:

1. Calcolo delle negazioni NOT A e NOT C.

2. Calcolo del prodotto NOT A AND B.

3. Calcolo della somma logica con NOT C.

La colonna di NOT A si ottiene invertendo i valori della variabile A. Lo stesso vale per NOT C. La colonna

dell’operazione AND si ottiene verificando quando entrambe le variabili coinvolte sono vere. Infine si applica l’OR tra

il risultato dell’AND e la colonna di NOT C, ottenendo il valore dell’espressione per ciascuna combinazione.

Il risultato mostra come l’espressione assuma valori diversi in base alle combinazioni delle variabili.

APPLICAZIONI FISICHE E CIRCUITI LOGICI

L’utilità dell’algebra booleana deriva dal fatto che, a livello fisico, i computer sfruttano transistor e porte logiche

per eseguire operazioni sui dati binari. Componenti come l’ALU (unità aritmetico-logica), parte della CPU, operano

su circuiti logici in grado di eseguire un numero elevatissimo di operazioni logiche sui bit.

PORTE LOGICHE E LORO CORRISPONDENZA FISICA

Le operazioni logiche eseguite a livello macchina corrispondono a istruzioni elementari di tipo logico. A livello fisico,

queste operazioni vengono implementate attraverso porte logiche, denominate porta AND, porta OR e porta NOT

(inverter). Queste porte realizzano esattamente gli effetti delle operazioni logiche di congiunzione, disgiunzione e

negazione.

Per rendere più concreto il funzionamento, una porta AND può essere rappresentata come un circuito in serie: la

corrente può fluire soltanto se entrambi gli interruttori sono chiusi, quindi solo se entrambe le variabili sono vere.

Una porta OR, invece, è equivalente a un circuito in parallelo, dove basta che uno solo degli interruttori sia

chiuso affinché la corrente fluisca. Di conseguenza, è sufficiente che almeno una delle variabili sia vera perché il

risultato dell’operazione OR sia vero. Questo parallelismo aiuta a comprendere la relazione tra rappresentazione

logica e implementazione fisica.

Oltre all’aspetto di implementazione hardware, la logica booleana è fondamentale per la programmazione. Ogni

programma eseguito dal computer si basa su confronti logici, decisioni, controlli di flusso e cicli. Tutto può essere

ricondotto a variabili booleane e funzioni logiche. Per questo motivo, l’algebra booleana e i suoi principi

rappresentano la base per introdurre i concetti di decisione, confronto e strutture iterative.

INTRODUZIONE ALLA PROGRAMMAZIONE

Per comprendere la programmazione è necessario partire da un presupposto fondamentale: il computer non è una

macchina intelligente, ma esegue esattamente ciò che gli viene indicato. Le istruzioni che compie sono

estremamente semplici, come somme, spostamenti (shift) o altre operazioni elementari, ma vengono eseguite a

una velocità elevatissima. L’insieme di queste istruzioni molto semplici consente di creare programmi complessi

costruiti come combinazioni di operazioni elementari.

Il programma è l’insieme delle istruzioni create dal programmatore. La complessità apparente del computer deriva

dal fatto che è programmato per svolgere operazioni specifiche, definite attraverso una sequenza precisa di

istruzioni scritte in un determinato linguaggio di programmazione, con la sua sintassi e semantica. Queste istruzioni

vengono poi implementate all’interno del sistema software del computer.

Per costruire un programma eseguibile occorre partire dal problema da risolvere. È necessario definire con

chiarezza l’obiettivo, i dati iniziali (input) e i dati finali attesi (output). Il programma deve essere in grado di

funzionare su qualsiasi input previsto, gestendo tutte le possibilità rilevanti in modo generalizzabile.

Poiché il computer esegue istruzioni semplici e rigorose, la strategia per risolvere un problema deve essere

scomposta in passaggi minimi, chiari e non ambigui. L'attività di programmazione può quindi essere descritta

attraverso due fasi fondamentali: problem posing e problem solving. La prima fase consiste nella definizione

precisa del problema; la seconda riguarda la definizione della strategia con cui risolverlo.

ALGORITMO E PROGRAMMA

Il computer esegue una sequenza di istruzioni: questa sequenza costituisce ciò che viene chiamato algoritmo, che

definisce l’ordine e la natura dei passaggi necessari per raggiungere un obiettivo. Un programma è

l’implementazione concreta di un algoritmo in un determinato linguaggio di programmazione.

Un programma presenta alcune caratteristiche fondamentali:

È specifico, perché scritto in un linguaggio determinato che ne stabilisce la sintassi.

È dipendente dall’ambiente, poiché può richiedere determinate librerie, un certo sistema operativo o condizioni

particolari per essere eseguito correttamente.

È eseguibile, cioè può essere effettivamente avviato su un computer e svolgere il compito per cui è stato progettato.

L’algoritmo descrive cosa fare in maniera indipendente dal linguaggio. Il programma descrive come farlo attraverso

comandi specifici del linguaggio scelto.

Per esempio, l’algoritmo per sommare due numeri è l’insieme delle istruzioni: prendere due numeri, sommarli,

restituire il risultato. Il programma è la traduzione di queste istruzioni in un linguaggio come Python.

DATI, MEMORIA E CPU

L’esecuzione di un programma comporta l’utilizzo di dati e istruzioni. Entrambi devono essere caricati nella

memoria del computer affinché la CPU possa leggerli ed eseguirli. La CPU esegue sempre una istruzione alla

volta, in sequenza. Durante l’esecuzione, può verificarsi una interazione con l’utente, come l’inserimento di un

dato tramite tastiera o un clic del mouse, che viene trattato come una nuova istruzione.

DEFINIZIONE DI PROGRAMMAZIONE

La programmazione è l’atto di progettare, implementare e verificare programmi. Essa comporta la scrittura di un

insieme di istruzioni, organizzate in un file sorgente, che descrivono la soluzione a un problema. A un problema

possono corrispondere molte soluzioni possibili; il compito del programmatore è trovare quella funzionante e,

quando possibile, efficiente, cioè in grado di minimizzare l’uso delle risorse come tempo di esecuzione e memoria.

La programmazione costituisce la parte più creativa del processo: il programmatore analizza il problema, elabora

strategie, aggiunge conoscenza e prende decisioni su come strutturare la soluzione. Il processo può essere

paragonato al lavoro di un cuoco, che pur avendo ingredienti simili ad altri, costruisce una ricetta secondo

creatività, competenza tecnica e capacità organizzative.

PROCESSO DI RISOLUZIONE DI UN PROBLEMA

La programmazione è un’attività complessa perché non procede mai in modo completamente lineare. Il processo

può essere descritto in vari passaggi:

1. Identificazione del problema.

2. Formulazione di una soluzione informale, iniziale, in linguaggio naturale, che elenca i passaggi da seguire.

3. Sviluppo di una soluzione formale, che descrive gli step con maggiore precisione attraverso strumenti

standardizzati come lo pseudo-codice o i diagrammi di flusso (flowchart). In questa fase si elencano in

modo strutturato tutte le operazioni necessarie, indipendentemente dal linguaggio di programmazione

scelto.

Durante la definizione della soluzione formale, emergono spesso condizioni o casi particolari non considerati in

precedenza. Questo comporta la necessità di tornare indietro, rivedere gli step e correggere la formulazione

precedente. Il processo è quindi iterativo.

Un esempio semplice è il procedimento per preparare un caffè con una macchinetta. Una descrizione informale

può essere: inserire una cialda, premere il pulsante, attendere il caffè. Passando alla descrizione formale, si

aggiungono dettagli: verificare la presenza dell’acqua, accendere la macchinetta, inserire la cialda, premere il

pulsante. Durante la formalizzazione si possono individuare passaggi mancanti o condizioni non considerate, che

richiedono di correggere la descrizione informale.

Quando tutti gli step sono chiari e completi, si può procedere alla scrittura del programma nel linguaggio di

programmazione scelto, traducendo fedelmente l’algoritmo in codice.

DEFINIZIONE E CARATTERISTICHE DELL’ALGORITMO

L’implementazione di un algoritmo in un linguaggio di programmazione specifico richiede semplicemente di

riadattare la strategia alla sintassi del linguaggio scelto. Struttura generale necessaria per passare dal problema al

programma: per effettuare questa transizione occorre definire la soluzione in modo progressivamente più preciso: si

parte da una soluzione informale, descritta in linguaggio naturale, e si procede verso una soluzione formale,

strutturata attraverso strumenti come lo pseudo-codice o il diagramma di flusso, fino all’implementazione

effettiva nel linguaggio scelto. È possibile che durante il processo emergano parti mancanti, rendendo necessario

tornare indietro per correggere e completare le definizioni.

Per consentire a un computer di eseguire un compito, il primo passo fondamentale è definire l’algoritmo.

L’algoritmo, costituito da una serie di istruzioni ordinate, rappresenta la strategia adottata per raggiungere una

soluzione ed è assimilabile a un libretto di istruzioni che contiene tutti gli step necessari. In termini ufficiali, un

algoritmo è una serie finita e ben definita di istruzioni finalizzate alla risoluzione di un problema specifico. Esso deve

possedere alcune caratteristiche fondamentali: deve essere chiaro e non ambiguo, non deve contenere passaggi

incerti o non interpretabili; deve essere finito, ossia deve sempre terminare dopo un numero finito di operazioni;

deve essere efficace, perché ogni istruzione deve poter essere eseguita entro un tempo limitato; deve infine essere

generale, cioè deve funzionare per qualunque valore di input previsto, considerando tutti i casi possibili.

La rappresentazione dell’algoritmo può avvenire in modi diversi. Lo pseudo-codice e i diagrammi di flusso

consentono di descrivere la struttura dell’algoritmo in modo chiaro e universalmente comprensibile. Gli elementi

fondamentali di un algoritmo sono i dati di input, i dati di output e la sequenza di operazioni che permettono di

trasformare gli input negli output. L’esecutore dell’algoritmo, nel contesto dell’informatica, è la macchina che legge

ed esegue le istruzioni. La sequenza di operazioni deve rispettare un ordine preciso, poiché l’algoritmo è una

successione di azioni strutturate per risolvere un compito. Le operazioni possono essere suddivise in sotto-

operazioni più elementari, creando una struttura modulare che consente una maggiore chiarezza nella definizione

dei passaggi.

Inoltre, l’algoritmo può includere operazioni ripetute attraverso meccanismi specifici come cicli o strutture di

controllo, che consentono di eseguire determinate operazioni solo al verificarsi di una certa condizione, oppure di

ripetere uno o più passi fino al soddisfacimento di un criterio prestabilito. Un algoritmo è quindi costituito da input,

output e una serie di istruzioni precise e non ambigue che possono includere condizioni e cicli, e deve rispettare le

caratteristiche già individuate.

Un’analogia utile per comprendere la natura di un algoritmo è quella della ricetta di cucina. Ad esempio,

nell'algoritmo per preparare la pasta, si può descrivere una sequenza come: mettere l’acqua, accendere il fuoco,

attendere, e, se l’acqua non bolle, tornare indietro al passaggio precedente finché la condizione non è soddisfatta.

Una volta che l’acqua bolle, si passa allo step successivo come buttare la pasta, attendere, assaggiare e, se la pasta

è ancora cruda, tornare indietro per continuare la cottura fino a raggiungere il punto desiderato. Questo esempio

evidenzia alcune criticità tipiche degli algoritmi imprecisi. Manca, ad esempio, l’istruzione che indica di mettere la

pentola sul fuoco, e altre istruzioni sono ambigue: il comando “aspetta” non specifica alcun tempo esatto, l’azione

“assaggia” non descrive come valutare la condizione, e mancano dettagli essenziali come l’aggiunta del sale.

L’espressione “quanto basta” non può essere utilizzata in un algoritmo, poiché non rappresenta un’informazione

quantificabile da una macchina. Risulta quindi evidente che un algoritmo apparentemente corretto può rivelare

numerose ambiguità e mancanze non appena viene analizzato con attenzione.

Un altro esempio quotidiano è l'algoritmo per preparare un bicchiere di succo d'arancia. Si ipotizza di avere un

bicchiere pulito nell’armadio e una bottiglia di succo in frigorifero. La sequenza proposta potrebbe essere: prendere

il bicchiere dall’armadio, andare al frigorifero, prendere la bottiglia, aprirla, versare il succo nel bicchiere, riporre la

bottiglia in frigorifero e bere il succo. Anche in questo caso emergono problematiche: manca l’istruzione per

chiudere la bottiglia dopo l’uso, e si assumono condizioni che potrebbero non essere vere, come la presenza

effettiva del bicchiere o del succo. Una buona pratica consiste nell’inserire precondizioni, per esempio: “se il

bicchiere è presente, prendilo; altrimenti utilizza un altro co

Anteprima
Vedrai una selezione di 20 pagine su 118
Abilità Informatiche - Python  Pag. 1 Abilità Informatiche - Python  Pag. 2
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 6
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 11
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 16
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 21
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 26
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 31
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 36
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 41
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 46
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 51
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 56
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 61
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 66
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 71
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 76
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 81
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 86
Anteprima di 20 pagg. su 118.
Scarica il documento per vederlo tutto.
Abilità Informatiche - Python  Pag. 91
1 su 118
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher CrissGia di informazioni apprese con la frequenza delle lezioni di Abilità informatiche e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università Politecnica delle Marche - Ancona o del prof Rossi Marco.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community