Python #2 Esercizi con blocchi condizionali

Obiettivo: Sono riportati in seguito una serie di esercizi utili per testare le proprie conoscenze nell’ambito dei linguaggi di programmazione strutturata relativamente all’utilizzo dei blocchi condizionali.
Gli esercizi,  a complessità crescente, possono essere risolti utilizzando blocchi condizionali, blocchi condizionali nidificati e blocchi condizionali che prevedono l’utilizzo della logica booleana.

Per la risoluzione degli esercizi si suggerisce l’utilizzo del compilatore online:


https://www.onlinegdb.com/online_c++_compiler

ESERCIZI CON SELEZIONE SEMPLICE – IF ELSE

1) Realizzare un programma che permetta di inserire due numeri interi e determini il numero maggiore.

2) Realizzare un programma che permetta di inserire un numero e determinare il suo valore assoluto. (Un numero negativo deve diventare positivo, un numero positivo deve restare positivo).

3) Realizzare un programma che permetta di inserire l’età di un utente e determini se l’utente è maggiorenne oppure no.

4) Realizzare un programma che permetta di inserire il valore di un carattere e determini se il valore inserito è una vocale.

5) Realizzare un programma che permetta di inserire i coefficienti a, b, c di un’equazione di secondo grado e ne calcoli, se possibile, le soluzioni.

6) Realizzare un programma che permetta di inserire due differenti orari espressi nella forma ore, minuti e secondi (CONSIGLIO: utilizzare tre differenti variabili, una per le ore, una per i minuti, ed una per i secondi) e riporti quale dei due orari viene prima.

7) Realizzare un programma che permetta di determinare tra due differenti macchine quale delle due ha una velocità media maggiore date le seguenti informazioni: lo spazio percorso dalla macchina A, il tempo impiegato dalla macchina A a percorrere lo spazio, lo spazio percorso dalla macchina B, il tempo impiegato dalla macchina B a percorre lo spazio (CONSIGLIO: determinare le due velocità medie e poi confrontarle).

8) Realizzare un programma che permetta di inserire un numero intero e che determini se il numero inserito è positivo, negativo oppure zero.

ESERCIZI CON SELEZIONE NIDIFICATA

9) Realizzare un programma che permetta di inserire tre numeri interi e determini se questi numeri possano rappresentare le lunghezze dei lati di un triangolo. Ricorda: affinché un triangolo possa essere tale, la somma di ogni coppia lati deve essere maggiore dell’altro.

10) Realizzare un programma che legga tre valori rappresentanti le lunghezze dei lati di un triangolo e riporti se il triangolo è scaleno, isoscele o equilatero.

11) Realizzare un programma che permetta di inserire tre numeri interi e determini il valore maggiore.

12) Realizzare un programma che permetta di inserire tre numeri interi e determini il valore minore.

13) Realizzare un programma che permetta di inserire tre numeri interi (i.e., A, B, e C) e determini se B è compreso tra A e C.

14) Realizzare un programma che permetta di applicare gli sconti applicati da un negozio. Nello specifico, se il prezzo degli acquisti è minore di 50€ il negozio effettuo lo sconto del 10%. Se il prezzo degli acquisti è maggiore di 50€ e minore di 100€, il negozio effettua lo sconto del 20%. Se il prezzo degli acquisti è maggiore di 100€, il negozio effettua lo sconto del 30%. Il programma deve chiedere all’utente di inserire il prezzo relativo ai propri acquisti e mostri a schermo lo sconto ed il prezzo finale da pagare.

Spesa Totale Sconto Applicato
totale<50 10%
50<=totale<=100 20%
totale>100 30%

15) Gli abbonamenti della metropolitana di Milano possono essere settimanali (S), mensili (M), o annuali (A) e valgono per la sola zona centrale (tipo 1), per la sola zona periferica (tipo 2) o per entrambe le zone (tipo 3). I costi sono quelli riportati nella seguente tabella. Realizzare un algoritmo che calcola il costo dell’abbonamento a partire dalla durata e dal tipo.

Tipo/Zona Settimanale Mensile Annuale
1 10 Euro 30 Euro 250 Euro
2 5 Euro 20 Euro 150 Euro
3 15 Euro 40 Euro 300 Euro

16) Realizzare un programma per determinare le tasse pagate da un lavoratore sulla base delle aliquote IRPEF 2022.
Nello specifico la percentuale di tasse viene determinata in funzione del reddito percepito come riportato nella seguente tabella.

Reddito imponibile Aliquota Imposta dovuta
redditi fino a 15.000 euro 23% 23% sull’intero importo
da 15.001 fino a 28.000 euro 25% 3.450 euro + 25% sul reddito che supera i 15.000 euro fino a 28.000 euro
da 28.001 fino a 50.000 euro 35% 6.700 euro + 35% sul reddito che supera i 28.000 euro fino a 50.000 euro
oltre 50.001 euro 43% 14.400 euro + 43% sul reddito che supera i 50.000 euro

VIDEO:




Python #1 Esercizi Sequenziali

Obiettivo: Sono riportati in seguito una serie di esercizi utili per testare le proprie conoscenze nell’ambito dei linguaggi di programmazione strutturata. Tutti gli esercizi sono risolvibili semplicemente utilizzando istruzioni sequenziali senza l’utilizzo di blocchi condizionali o cicli.

Per la risoluzione degli esercizi si suggerisce l’utilizzo del compilatore online:


https://www.onlinegdb.com/online_c++_compiler

1) Realizzare un programma per il calcolo del perimetro e dell’area di un rettangolo dato il valore del lato e dell’altezza.

2) Realizzare un programma per il calcolo del perimetro e dell’area di un quadrato dato il valore del lato.

3) Realizzare un programma per il calcolo del perimetro e dell’area di un trapezio isoscele dato il valore della base maggiore, base minore, altezza e lato obliquo.

4) Realizzare un programma per il calcolo della circonferenza e dell’area di un cerchio dato il valore del raggio. (ATTENZIONE: alla gestione del PiGreco: import math, math.pi).

5) Realizzare un programma per determinare la velocità media di una automobile dato lo spazio percorso ed il tempo impiegato

6) Realizzare un programma che permetta a un negozio di calcolare automaticamente il prezzo di vendita di un prodotto, utilizzando come input: il prezzo iniziale (senza sconto) la percentuale di sconto da applicare

7) Realizzare un programma che acquisisca tre numeri e calcoli la loro media aritmetica.

8) Realizzare un programma che, dato un numero di secondi, calcoli a quante ore, minuti e secondi corrispondono.

9) Realizzare un programma che calcoli il volume e la superficie totale di un parallelepipedo, date lunghezza, larghezza e altezza.

10) Realizzare un programma che calcoli il volume e la superficie di un cilindro, dati il raggio della base e l’altezza.

10) Realizzare un programma che legga tre valori rappresentanti le lunghezze dei lati di un triangolo e riporti se il triangolo è scaleno, isoscele o equilatero.

Video: risoluzione di alcuni esercizi




Scilab #3 Elaborazione di una immagine in Scilab: aumentare o diminuire la luminosità di una foto

Obiettivo: Effettuare una semplice elaborazione di una immagine in scilab con l’obiettivo di aumentare o diminuire la luminosità di una foto.

Teoria Rappresentazione di una immagine:

Un’immagine in scala di grigi a 8 bit rappresenta ogni pixel con un singolo valore che descrive la sua luminosità. Questi valori possono variare da 0 (completamente nero) a 255 (completamente bianco), con 256 livelli intermedi che rappresentano diverse sfumature di grigio. Ogni pixel dell’immagine è associato a una matrice bidimensionale, dove ogni elemento della matrice contiene un valore di luminosità che definisce il tono di grigio di quel pixel. Nel contesto delle immagini a 8 bit, un’immagine in scala di grigi è generalmente memorizzata come una matrice di interi compresi tra 0 e 255. La rappresentazione in scala di grigi è particolarmente utile per applicazioni che richiedono analisi di luminosità o contrasto, come nel caso della visione artificiale, della fotografia in bianco e nero e nell’elaborazione delle immagini mediche.

Esempio di una immagine in scala di grigi a 8 bit

Funzioni non lineari per modificare la luminosità:

Oltre alle funzioni iperboliche, altre funzioni non lineari come i logaritmi e le funzioni polinomiali sono utilizzate per modificare la luminosità dei pixel in modo non uniforme. Queste funzioni consentono di alterare l’intensità dei pixel in modo che alcune aree dell’immagine vengano più schiarite o scurite rispetto ad altre, permettendo così di applicare effetti visivi complessi.

Funzione Logaritmica:

Una delle funzioni più comuni per manipolare la luminosità in modo non lineare è la funzione logaritmica. La funzione logaritmica è utile per schiarire le aree scure dell’immagine senza modificare troppo le aree già chiare. La formula logaritmica applicata ai valori dei pixel può essere espressa come:

h(x) = 255*log(x+1)/log(255)

Questa funzione ha l’effetto di aumentare la luminosità nelle aree scure dell’immagine, rendendo più visibili i dettagli nelle ombre. Tuttavia, non ha un impatto significativo sulle aree già luminose, poiché il logaritmo cresce più lentamente man mano che x x aumenta. È particolarmente utile quando si desidera “illuminare” le ombre senza sovraesporre le luci.

Esempio di una immagine in scala di grigi a 8 bit elaborata utilizzando il logaritmo

Funzione Polinomiale:

Le funzioni polinomiali sono un’altra classe di funzioni non lineari utilizzate per modificare la luminosità. Una funzione polinomiale di grado nn applicata ai valori dei pixel può essere scritta come:

f(x) = 255*x^2/255^2

Questa funzione ha l’effetto di diminuire la luminosità nelle aree chiare dell’immagine.

Esempio di una immagine in scala di grigi a 8 bit elaborata utilizzando una funzione polinomiale

CONFRONTO TRA LE FUNZIONI:
Per comprendere al meglio l’effetto di queste funzioni sulle immagini vengono in seguito riproposti i differenti studi di funzione confrontati con l’equalizzazione della retta bisettrice del primo e del terzo quadrante

Codice SCILAB:
Il codice SCILAB presentato, si occupa di caricare un’immagine in formato .dat, applicare una trasformazione logaritmica per alterarne la luminosità e quindi visualizzare sia l’immagine originale che quella elaborata. Il codice è caratterizzato da differenti fasi:

  • Lettura dell’immagine: Il codice legge un’immagine salvata in formato .dat (un formato di dati binari). La matrice che rappresenta l’immagine viene creata usando i valori di luminosità per ogni pixel. L’immagine è rappresentata come una matrice di dimensioni 1024×683.
  • Elaborazione dell’immagine: Viene applicata una funzione logaritmica a ciascun pixel dell’immagine per modificarne la luminosità. La trasformazione logaritmica è progettata per schiarire le aree più scure dell’immagine, modificando l’intensità dei pixel.
  • Visualizzazione delle immagini: Il codice mostra due versioni dell’immagine:

    • La versione originale, letta dal file .dat.
    • La versione elaborata, che ha subito la trasformazione logaritmica per modificare la luminosità.

In sostanza, l’immagine viene letta e poi trasformata utilizzando una formula logaritmica per migliorare la visibilità delle aree scure, per poi visualizzare entrambe le immagini.



FILE immagine:

http://www.arduinofacile.it/wp-content/uploads/2025/02/immagine.dat_.zip




Scilab #3 Metodo dei rettangoli (Riemann) per determinare il valore di un integrale definito

Obiettivo: Determinare il valore di un integrale definito utilizzando il metodo dei rettangoli e sfruttando il software di calcolo numerico Scilab.

Il metodo dei rettangoli:
Il metodo dei rettangoli, o somme di Riemann, è un approccio numerico per approssimare l’integrale definito di una funzione su un intervallo [a, b]. È uno dei metodi più semplici per comprendere l’integrazione come somma di aree.

L’idea alla base di questo approccio è quella di suddividere l’intervallo [a,b] in n sotto-intervalli di ampiezza costante h=(b−a)/n. Su ciascun sottointervallo, si costruisce un rettangolo la cui altezza dipende dal valore della funzione in un punto scelto del sottointervallo.

Metodo dei rettangoli destri e sinistri

Codice:

Un esempio del metodo dei rettangoli viene effettuato utilizzando il seguente codice Scilab il quale ha l’obiettivo di determinare il valore dell’integrale definito nell’intervallo [0, 2] della funzione

y = x^2



Esercizi:

Graficare le seguenti funzioni utilizzando il software di calcolo numerico Scilab:

  • y = 1 nell’intervallo [0, 2]
  • y = cos(x) nell’intervallo [0, pi/2]
  • y = x*ln(x) nell’intervallo [1, 2]



Scilab #2 Metodo di Bisezione per determinare gli zeri di una funzione

Obiettivo: Determinare gli zeri di una funzione utilizzando il metodo di bisezione e sfruttando il software di calcolo numerico Scilab.

Il metodo di bisezione:

Il metodo di bisezione è un metodo numerico iterativo che serve per trovare una radice (zero) di una funzione continua su un intervallo [a, b], a condizione che la funzione cambi segno su quell’intervallo:

f(a)*f(b) < 0

Questo significa che la funzione passa da negativa a positiva (o viceversa), quindi c’è almeno uno zero in mezzo (per il teorema degli zeri di Bolzano).

Il funzionamento del metodo di bisezione:

  • Si sceglie un intervallo iniziale [a, b] tale che f(a)*f(b)<0
  • Si calcola il punto medio c=(a+b):2
  • Si valuta f(c):
  • Se f(c)=0 si è trovata la soluzione esatta.
  • Se f(a)*f(c)<0, la radice è tra a e c: si aggiorna il valore di b = c
  • Se f(b)*f(c)<0, la radice è tra b e c: si aggiorna il valore di a = c
  • Si ripete il procedimento fino a che l’intervallo è sufficientemente piccolo, cioè:∣b−a∣<tolleranza desiderata.
Esempio del metodo di bisezione

Codice:

Un esempio del metodo di bisezione viene effettuato utilizzando il seguente codice Scilab il quale ha l’obiettivo di determinare gli zeri della funzione:

y = cos(x) – x



Esercizi:

Graficare le seguenti funzioni utilizzando il software di calcolo numerico Scilab:

  • y = x^3 nell’intervallo [-1, 1]
  • y = x^3-x-2 nell’intervallo [1, 2]
  • y = sin(x) – x/2 nell’intervallo [1, 2]



Scilab #1 Analisi di Funzioni Matematiche Elementari

Obiettivo: Analizzare alcune semplici funzioni elementari utilizzando il software di calcolo numerico Scilab.

Principi di calcolo numerico

Quando a scuola si studiano funzioni come sin(x), cos(x), 3x, etc… si pensa alle funzione come ad un oggetto continuo.
Nel immaginario comune, esistono un’infinità di valori tra due numeri, mentalmente è possibile “zoomare” in modo arbitrario la funzione, e questa avrà sempre un valore.
E’ importante considerare che un software di calcolo numerico come Scilab non può fare questo.
Nel dettaglio, Scilab, invece di “conoscere” tutta la curva, fa una cosa molto più semplice e concreta:

  • Crea un vettore di punti del dominio (es. da 0 a 2π , con passo 0.1)
  • Valuta la funzione solo per quei punti
  • Memorizza in un vettore i punti del codominio
  • Collega i punti con seguenti sul grafico.



Nel codice presentemente riportato il software di calcolo numeri ha:

  • Ha preso circa 63 valori di x (da 0 a 2π)
  • Per ognuno ha calcolato sin⁡(x)
  • Ha ottenuto una lista di coppie (x, y)
  • Ha disegnato il grafico unendo i punti con delle linee

Un secondo metodo utile per graficare le funzioni, sicuramente meno intuitivo, è quello di utilizzare un ciclo for per elaborare un punto alla volta. Dal punto di vista pratico questo approccio è sicuramente molto meno intuitivo d’altro canto è sicuramente utile per rendere visibile cosa fa Scilab internamente, cioè valutare la funzione punto per punto.



Esercizi:

Graficare le seguenti funzioni utilizzando il software di calcolo numerico Scilab:

  • y = x^2
  • y = 10cos(x)
  • y = sin(10*x)
  • y = x^2+4*x+6



Programmare Arduino – Le basi

Arduino è collegabile al PC tramite un cavo USB. L’IDE (Integrated Development Environment) è l’ambiente in cui si scrive e si carica il codice sulla scheda Arduino (scaricabile dal sito ufficiale di Arduino (https://www.arduino.cc/). E’ possibile anche usare l’Arduino Web Editor per programmare online, anch’esso disponibile nel sito ufficiale di Arduino.

Un programma Arduino è chiamato sketch e usa un linguaggio simile a C/C++. Ogni sketch ha due funzioni fondamentali (spiegate nel dettaglio qui)

  • setup(): Configura i pin o inizializza componenti (eseguito una sola volta all’inizio).
  • loop(): Contiene il codice che viene eseguito continuamente.

[crayon-6ab1653a3acfc395867952/]

Ogni funzione e in generale ogni blocco di codice, viene racchiuso tra parentesi graffe { e }. Il totale delle parentesi aperte {  deve essere lo stesso di quelle chiuse }.

Ogni istruzione di programma termina con un punto e virgola ;

E’ possibile inserire dei commenti nel codice, utilizzando la doppia barra  // per commentare su una linea e  barra asterisco (e asterisco barra) /* … */ per commenti su più linee.

Nella funzione setup(), vengono tipicamente configurati i pin. La funzione da usare è pinMode. Ad esempio:

[crayon-6ab1653a3ad0a078962552/]
[crayon-6ab1653a3ad0d010800991/]

Altre funzioni importanti e ricorrenti sono:

  • digitalWrite(pin, valore): Imposta un pin su HIGH o LOW.
  • digitalRead(pin): Legge lo stato di un pin digitale (HIGH o LOW).
  • analogWrite(pin, valore): Imposta un’uscita PWM (valori tra 0 e 255).
  • analogRead(pin): Legge un valore analogico da un pin (da 0 a 1023).
  • delay(millisecondi): Imposta una pausa nell’esecuzione del programma. La pausa è espressa in millisecondi

Esistono molte altre funzioni, che vengono illustrate con gli esempi presenti nel sito.

Per altre funzioni, si rimanda ai tutorial ufficiali di Arduino.




JAVASCRIPT #6 Realizzazione di una Avventura Testuale, CSS e JAVASCRIPT

Obiettivo: Realizzare un programma che implementi una semplice avventura testuale utilizzando il linguaggio di programmazione HTML, CSS e JAVASCRIPT.

Codice:

Viene in seguito illustrato il codice utilizzato per implementare una semplice avventura testuale. Questa avventura è caratterizzata da una sequenza di scene attraverso le quali è possibile muoversi premendo due differenti pulsanti. I due pulsanti permettono di cambiare scena attraverso due differenti funzioni javascript (Funzione1() e Funzione2()).
Nello specifico, dal punto di vista del codice HTML, la pagina è caratterizzata da:

  • Un titolo principale (“L’Isola del Mistero”) (<h1>).
  • Una descrizione della scena corrente (<p>).
  • Immagine della scena corrente (<img>).
  • Due differenti pulsanti  che permettono di cambiare scena (<button>).

Viene in seguito riportato uno screenshot relativo all’avventura testuale.

Differentemente, dal punto di vista del codice JAVASCRIPT, il codice è costituito da 5 differenti array. Ogni array è utilizzato per aggiornare la singola scena in seguito alla pressione di uno dei due pulsanti. E’ importante considerare che ad ogni specifico indice degli array corrisponde ad una specifica scena. 
In seguito sono descritti i 5 array impiegati nel codice javascript

  • Array delle descrizioni (descrizione [])
  • Array delle opzioni associate al pulsante1 (opzioni1 [])
  • Array delle opzioni associate al pulsante2 (opzioni2 [])
  • Array degli stati successivi associati al pulsante1 (next1 [])
  • Array degli stati successivi associati al pulsante2 (next2 [])






JAVASCRIPT #5 Realizzazione del gioco della Roulette HTML, CSS e JAVASCRIPT

Obiettivo: Realizzare un programma che implementi il gioco della Roulotte utilizzando il linguaggio di programmazione HTML, CSS e JAVASCRIPT.

Codice:

Viene in seguito illustrato il codice utilizzato per implementare una semplice versione del gioco della Roulotte.
Nello specifico, la pagina è caratterizzata da:

  • Un titolo principale (“Roulette”).
  • Immagine della roulette (che si trova in img/Roulette.png).
  • Visualizzazione del saldo (fisso a 100$).
  • Input per inserire un numero proposto dal giocatore.
  • Bottone SPIN per avviare l’estrazione. Premendo il tasto SPIN viene eseguita la funzione Spin() che genera un numero randomico e lo scrive nel relativo spazio.
  • Visualizzazione del numero estratto, inizialmente impostato su “0”.

Modifiche:
Al fine di terminare il gioco è necessario introdurre una serie di modifiche:

  • Completare il codice gestendo i casi di vittoria e sconfitta (il giocatore perde dei soldi nel caso di sconfitta oppure vince dei soldi nel caso di vittoria)
  • Aggiungere una animazione legata alla vincita o alle possibili vincite.
  • Dare la possibilità all’utente di scegliere la puntata.
  • Dare la possibilità all’utente di scegliere se puntare sul colore oppure sul numero
  • Aggiungere suoni nel caso di vincite



E’ possibile scaricare il progetto completo cliccando sul link:
http://www.arduinofacile.it/wp-content/uploads/2025/03/Roulette.zip




JAVASCRIPT #4 Realizzazione del gioco del TRIS HTML, CSS e JAVASCRIPT

Obiettivo: Realizzare un programma che implementi il gioco del TRIS utilizzando il linguaggio di programmazione HTML, CSS e JAVASCRIPT.

Codice:

Viene in seguito illustrato il codice utilizzato per implementare una semplice versione del gioco del TRIS.
Nello specifico, la pagina è caratterizzata da:

  • Nove immagini rappresentanti la matrice 3×3 del TRIS (inizialmente impostate su img/0.png immagine vuota). Premendo su ogni immagine viene lanciata una funziona denominata Premuto alla quale viene passato un parametro che riporta l’informazione del pulsante che è stato premuto attraverso un identificativo da 0 a 8. Premendo i pulsanti cambiano le immagini riportate sul matrice 3×3 diventano rispettivamente croci oppure cerchi.
  • Due paragrafi (i.e., giocatore1 e giocatore2 che dovrebbero riportare lo status delle vittorie di ogni giocatore).

Modifiche:
Al fine di terminare il gioco è necessario introdurre una serie di modifiche:

  • Completare il codice associando la funzione Premuto a tutte le immagini della matrice 3×3.
  • Introdurre un meccanismo utile per determinare il giocatore vincitore.
  • Impedire all’utente di premere una casella già scelta.
  • Aggiungere una animazione legata alla vincita o alle possibili vincite.
  • Aggiungere un contatore delle vittorie.
  • Introdurre una intelligenza artificiale per giocare contro il computer.
  • Aggiungere suoni nel caso di vincite



E’ possibile scaricare il progetto completo cliccando sul link:
http://www.arduinofacile.it/wp-content/uploads/2025/03/Tris.zip