C++ #5 Esercizi con numeri random

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 numeri randomici (numeri casuali).
Gli esercizi,  a complessità crescente, prevedono inizialmente la semplice generazione di numeri random ed infine applicazioni più complesse che richiedono l’impiego di cicli iterativi e blocchi condizionali. 

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


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

ESERCIZI CON NUMERI RANDOMICI

1) Realizzare un programma che simuli il lancio di un dado a sei facce e riporti il risultato.

2) Realizzare un programma che simuli il lancio di una moneta e riporti il risultato (testa o croce).

3) Realizzare un programma che simuli il lancio di un dado a 20 facce (utile per i giocatori di Dungeons and Dragons) e riporti il risultato.

4) Realizzare un programma che permetta all’utente di definire il numero di facce di un dado e ne simuli il lancio riportando il risultato.

ESERCIZI CON NUMERI RANDOMICI E BLOCCHI CONDIZIONALI

5) Realizzare un programma che simuli il lancio di due dadi a sei facce e dopo avere riportato il risultato indichi se è uscita una coppia di numeri uguali.

6) Realizzare un programma che permetta di simulare l’estrazione del lotto attraverso la generazione di 5 numeri casuali nel range 1-90. Attenzione i numeri non possono essere ripetuti e devono risultare equiprobabili.

ESERCIZI CON NUMERI RANDOMICI E CICLI ITERATIVI
7) Realizzare un programma che generato un numero naturale nel range 0-10, permetta all’utente di indovinare il numero generato. Il programma deve terminare quando il numero viene indovinato (CICLO INDEFINITO).

7bis) Realizzare un programma che generato un numero naturale nel range 0-10, permetta all’utente di indovinare il numero generato. Il programma deve terminare quando il numero viene indovinato (CICLO INDEFINITO). Ad ogni iterazione, nel caso in cui l’utente non abbia individuato, deve essere fornito un feedback all’utilizzatore in cui si riporta se il numero generato risulta maggiore o inferiore al numero inserito.




C++ #4 Esercizi con cicli iterativi e 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 di cicli iterativi e blocchi condizionali.
Gli esercizi,  a complessità crescente, devono essere risolti utilizzando cicli iterativi (definiti e indefiniti) . L’utente può scegliere in modo autonomo se utilizzare i costrutti while, do-while, for e se in caso impiegare blocchi condizionali semplici, nidificati, o se sfruttare la logica booleana.

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


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

ESERCIZI CON CICLI ITERATIVI E BLOCCHI CONDIZIONALI

1) Realizzare un programma che permetta all’utente di inserire 10 numeri naturali e determini quanti numeri positivi e negativi siano stati inseriti.

2) Realizzare un programma che permetta all’utente di inserire N numeri naturali e determini quanti numeri positivi e negativi siano stati inseriti. Il programma deve terminare quando l’utente inserisce un numero uguale a 0.

3) Realizzare un programma che permetta all’utente di inserire 10 numeri naturali e determini quanti numeri pari e dispari siano stati inseriti. Utilizzare l’operatore modulo per determinare se un numero è pari oppure dispari.

4) Realizzare un programma che permetta all’utente di inserire 5 voti e ne determini la media, il valore massimo ed il valore minimo.

4bis) Realizzare un programma che permetta all’utente di inserire 5 voti e ne determini la media, il valore massimo ed il valore minimo. Inserire inoltre un controllo per fare in modo che nel caso in cui sia inserito un voto non valido (maggiore di 10 o minore di 0) il programma richieda di inserire nuovamente il dato.

5) Realizzare un programma che permetta all’utente di inserire 5 voti e per ogni voto indichi se questo risulta sufficiente oppure insufficiente.

6 NEW) Realizzare un programma che permetta all’utente di inserire una sequenza di numeri interi, terminata dall’inserimento del numero zero. Il programma dovrebbe quindi determinare se la sequenza inserita è crescente oppure no. Il programma dovrebbe quindi stampare un messaggio appropriato che indichi il tipo di sequenza inserita.

6bis) Realizzare un programma che permetta all’utente di inserire una sequenza di numeri interi, terminata dall’inserimento del numero zero. Il programma dovrebbe quindi determinare se la sequenza inserita è decrescente oppure no. Il programma dovrebbe quindi stampare un messaggio appropriato che indichi il tipo di sequenza inserita.

7 NEW) Realizzare un programma che permetta all’utente di calcolare il fattoriale di un numero inserito dall’utente (nel caso di un numero negativo viene stampato un messaggio di errore perché il fattoriale non è definito per numeri negativi.
A seguire sono riportati alcuni esempi relativi al calcolo del fattoriale: Il fattoriale di 5 è parti a 120 e si calcola in questo modo 5*4*3*2*1. Il fattoriale di 3 è parti a 6 e si calcola in questo modo 3*2*1. Il fattoriale di 0 è uguale ad 1




C++ #2 Esercizi con cicli iterativi

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 cicli iterativi definiti e indefiniti. L’utente può scegliere in modo autonomo se utilizzare i costrutti while, do-while e for.

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


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

ESERCIZI CON ITERAZIONE DEFINITA

1) Realizzare un programma che permetta di scrivere a monitor i primi 100 numeri naturali.

2) Realizzare un programma che, definito un numero N inserito dall’utente, permetta di scrivere a monitor i numeri naturali compresi tra 1 ed N.

3) Realizzare un programma che permetta all’utente di inserire 10 differenti numeri e ne calcoli la somma.

4) Realizzare un programma che permetta all’utente di inserire 10 differenti numeri e ne calcoli la media.

5) Realizzare un programma che, definito un numero N inserito dall’utente, permetta di scrivere a monitor i primi 10 multipli del numero inserito (e.g., N, 2N, 3N, …, 10N).

6) Realizzare un programma che permetta di scrivere a monitor i primi N numeri della successione di Fibonacci. Nel dettaglio, i primi due numeri della successione i Fibonacci sono 0 e 1, i successivi sono dati dalla somma dei due numeri precedenti. Ad esempio: 0, 1, 1, 2, 3, 5, 8, 13 …

ESERCIZI CON ITERAZIONE INDEFINITA

7) Realizzare un programma che permetta all’utente di inserire una serie indefinita di numeri interi. Il programma deve fermarsi quando la somma dei numeri inseriti supera 100.

9) Realizzare un programma che permetta all’utente di inserire una serie indefinita di numeri interi e ne calcoli la media Il programma deve fermarsi quando l’utente inserisce uno zero.

10) La popolazione di rane in uno stagno raddoppia ogni giorno. Definita la popolazione iniziale e la popolazione finale da raggiugnere, determinare il numero di giorni necessari per raggiungere la popolazione obiettivo.

10bis) La popolazione di rane in uno stagno raddoppia ogni giorno. Ogni tre giorni a causa di una epidemia generica la popolazione di rane diminuisce di un terzo. Definita la popolazione iniziale e la popolazione finale da raggiugnere, determinare il numero di giorni necessari per raggiungere la popolazione obiettivo.




C++ #1 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 (ATTENZIONE: utilizzare il tipo dati char).

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 NEW) 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

8) 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.

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

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

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

12) 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.

13) 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%

14) 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 Settimanale Mensile Annuale
1 10 Euro 30 Euro 250 Euro
2 5 Euro 20 Euro 150 Euro
3 15 Euro 40 Euro 300 Euro

15) 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




Rivelatore di Gas con Allarme Sonoro e Visivo

Obiettivo: L’obiettivo di questa esperienza è realizzare un rilevatore di GAS con allarme sonoro (buzzer) e visivo (led lampeggiante). Per la realizzazione di questo dispositivo è stato utilizzato un particolare sensore denominato MQ-2.

Componenti Elettronici:

  • Arduino Uno
  • Breadboard
  • Sensore MQ-2
  • Resistenza (220 Ohm)
  • Led
  • Buzzer passivo

Pre-Requisiti:


Buzzer Passivo


TeoriaIl sensore MQ-2 appartiene alla famiglia di sensori MQ (rivelatori di gas) utili per determinare la concentrazione di specifici gas in aria. Al momento i sensori MQ più utilizzati sono i seguenti:

Nome Datasheet Gas Rilevabile
MQ-2 Link Metano, Butano, LPG (Gas di Petrolio Liquefatto), fumo.
MQ-3 Link Alcol.
Utile per realizzare un etilometro.
MQ-4 Link Gas naturale compresso (CNG)
MQ-5 Link GPL e Gas di Città
MQ-6 Link GPL
MQ-7 Link Monossido di Carbonio
MQ-8 Link Idrogeno
MQ-9 Link Monossido di Carbonio, metano, e GPL
MQ-135 Link Ammoniaca e ossido di azoto.

Nello specifico le caratteristiche del sensore MQ-2 (come riportato nel datasheet sono le seguenti):

  • Tensione di alimentazione: 5V
  • Potenza assorbita: 800mW
  • Temperatura operativa: da -20 a +50 gradi
  • Peso 7grammi

Il dispositivo presenta inoltre 4 pin utilizzati per i collegamenti:

  • VCC
  • GND
  • Uscita Analogica
  • Uscita Digitale

Sensore MQ2

Da un punto di vita elettronico gli elementi caratteristici sono rappresentati dalla resistenza di carico RL (aggiustabile attraverso un trigger) e la resistenza del sensore RS (il cui valore è funzione della concentrazione di gas presente nell’ambiente. Nello specifico il valore della resistenza RS viene riportato nella seguente figura, opportunamente normalizzato (R0 rappresenta il valore della resistenza RS assunto nell’ambiente di riferimento con aria pulita).

Curva caratteristica della resistenza del sensore MQ-2

Essendo RS ed RL collegati in serie, come riportato dal datasheet, è possibile determinare il valore di RS attraverso la seguente formula:

RS = (VCC/VRL-1)*RL

Codice: Due sono i differenti codici utilizzati per realizzare il rivelatore di gas.
Il primo codice viene utilizzato per determinare il valore di R0 caratteristico dell’ambiente nel quale viene posizionato il sensore, considerando che il rapporto tra RS ed R0 è uguale a 10 in un ambiente contenente aria pulita.



Determinato il valore di RS in aria è possibile eseguire il secondo codice che permette di implementare il rivelatore di gas.






Il Bastone Sensibile per Ipovedenti [Light]

Obiettivo: Il Bastone Sensibile per Ipovedenti rappresenta un’attività di stampo inclusivo utilizzabile in un contesto scolastico al fine di compensare la cecità e permettere agli alunni non vedenti di superare ostacoli ed impedimenti ambientali. Tale attività permette di sviluppare attraverso un processo meta-inclusivo l’empatia necessaria per comprendere le difficoltà affrontate da un ragazzo ipovedente all’interno di un contesto scolastico.
Tale strumento, rappresenta l’evoluzione del più comune e tradizionale bastone assistivo per compensare la cecità e permettere agli alunni non vedenti di superare ostacoli ed impedimenti ambientali. Un sensore di prossimità, montato sul telaio, conferisce la sensibilità al bastone. A seconda della distanza calcolata attraverso il sensore, vengono generati degli impulsi sonori con durata variabile. A differenza di quanto avviene con l’uso di un bastone tradizionale, con il quale gli ostacoli vengono individuati attraverso il tocco, in questo caso basterà concentrarsi sulla durata sonora per capire la posizione di eventuali impedimenti al percorso, proprio come avviene con i sensori di parcheggio delle automobili. Durante le attività, gli alunni sono chiamati in prima persona ad affrontare e cercare di superare gli ostacoli dovuti alla cecità. Nello stesso tempo si rendono conto delle diverse-abilità che un loro pari, non vedente o ipovedente, deve necessariamente sviluppare per compensare la mancanza della piena percezione visiva.

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Sensore Ultrasuoni (e.g., HC-SR04)
  • 1 Buzzer attivo

Pre-requisiti:

TeoriaIl bastone sensibile per ipovedenti rappresenta dal punto di vista tecnologico la naturale evoluzione del tradizionale sensore di parcheggio, ovvero un dispositivo ampiamente utilizzato in ambito automobilistico per favorire l’operazione del una delle moderne tecnologie che permettono al guidatore di un autoveicolo di essere a conoscenza della distanza tra la propria automobile ed un eventuale altro veicolo.
Nel caso specifico, il bastone sensibile si basa su un sensore di prossimità ad ultrasuoni (INPUT) ed un buzzer (OUTPUT) utilizzato come segnalatore acustico.
Nel dettaglio, maggiore è la distanza maggiore sarà il ritardo tra una segnalazione acustica e la successiva, analogamente, minore è la distanza minore sarà il ritardo tra una segnalazione acustica e la successiva. In particolare, la relazione ingresso uscita che lega la distanza al ritardo impiegato nella segnalazione acustica è funzione dei seguenti quattro parametri:

  • DistanzaMassima: la distanza massima dopo la quale non viene più segnalato un’ostacolo.
  • DistanzaMinima: la distanza minima per la quale il buzzer emette un tono continuo
  • RitardoMassimo: Il ritardo tra una segnalazione acustica e la successiva nel caso di massima distanza.
  • RitardoMinimo: Il ritardo tra una segnalazione acustica e la successiva nel caso di minima distanza.

Questi valori vengono utilizzati al fine di determinare l’equazione fondamentale per il calcolo del ritardo:

ritardo = distanza*((RitardoMax-RitardoMin)/(DistanzaMax-DistanzaMin))

Collegamento Circuitale:

Collegamento Circuitale

Codice:




PersonalizzazioniE’ possibile introdurre un secondo sensore ad ultrasuoni per evidenziare la presenza di un ostacolo a destra oppure a sinistra dell’utilizzatore.





Il Semaforo della Rabbia

Obiettivo: Il semaforo della rabbia rappresenta un’attività di stampo inclusivo utilizzabile in un contesto scolastico al fine di favorire la comunicazione dei ragazzi che riescono difficilmente ad esprimere le proprie emozioni causa difficoltà comunicative.
Il semaforo, dotato di tre pulsanti e tre led colorati (rosso, giallo, verde), permette di evidenziare lo stato emotivo di uno studente ed il suo livello di frustrazione, al fine di favorire la comunicazione studente-studente e studente-docente ed una più facile gestione della rabbia.
Le difficoltà comunicative negli studenti favoriscono un naturale stato di frustrazione che spesso sfocia in attacchi rabbiosi che possono essere imparati a gestire attraverso l’utilizzo di semplici strumenti.
L’idea alla base del semaforo della rabbia è quella di associare i colori del semaforo alle emozioni percepite dall’alunno al fine di favorire una autoregolazione emotiva.
Vengono il seguito riportati i tre principali colori presenti nel semaforo della rabbia:

  • Rosso: Elevato stato di rabbia, non è possibile controllare l’emozione pertanto è necessario un intervento del docente al fine di tranquillizzare il ragazzo.
  • Giallo: Situazione di rabbia controllata. Lo studente è ancora in grado di gestire le proprie emozioni. Questa situazione è altamente formativa al fine di favorire il controllo delle proprie emozioni.
  • Verde: Situazione di assoluta tranquillità.

Esempio di Semaforo della Rabbia

L’idea alla base del semaforo è quella di costruire un percorso inclusivo in cui gli alunni della classe costruiscono uno strumento di fondamentale importanza per un loro compagno. Lo scopo di tale attività è duplice: innanzitutto si dota il ragazzo in difficoltà di uno strumento utile alla gestione delle proprie emozioni, inoltre il percorso svolto permetterà di favorire lo sviluppo dell’empatia negli alunni della classe al fine di comprendere le problematiche di un loro coetaneo.

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 3 Pulsanti
  • 3 Resistenze (1kOhm)
  • 3 Led (Rosso, Giallo, Verde)
  • 3 Resistenze (220Ohm)

Prerequisiti


LED e Pulsante


Teoria
Attraverso l’impiego di tre pulsanti è possibile comandare tre differenti led.
Premendo il primo pulsante si accenderà il led verde, premendo il secondo il led giallo e premendo il terzo pulsante si accenderà il led rosso.

Collegamento Circuitale:

Collegamento Circuitale

Codice:
A seguire viene riportato il codice utilizzato per accendere uno dei tre led (verde, giallo, rosso) in funzione del proprio stato emotivo (pulsante premuto).



Tinkercad



Sviluppi Futuri:
Il codice permette di mantenere acceso il led solamente se il pulsante viene mantenuto premuto. Volendo, è possibile modificare il codice utilizzando un pulsante come interruttore.
Per ulteriori approfondimenti è possibile fare riferimento alla seguente lezione:


Pulsante come Interruttore





Arduino Last Christmas

Obiettivo: Riprodurre la melodia Last Christmas utilizzando la piattaforma Arduino. Un progetto realizzato dall’alunno della classe 4DSA del Liceo Enrico Medi di Senigallia: Gianmarco D’Emilio

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Buzzer

Pre-requisiti:

TeoriaOgni melodia musicale è composta da note e pause. Se le pause possono essere riprodotte utilizzando la funzione delay() di Arduino (già vista negli esempi precedenti), le singole note possono essere facilmente generate grazie all’utilizzo di un buzzer passivo e della funzione tone(). Nel dettaglio, l’impiego della funzione tone permette di selezionare la frequenza riprodotta dal buzzer e la relativa durata della nota.
Nel caso in questione, l’intera melodia (comprensiva di note, durata delle note e pause, viene salvata in due differenti array (vettori) e riprodotta sequenzialmente come un vero spartito musicale.

Collegamento Circuitale:

Collegamento Circuitale

Codice:






ARDWARE #15 Sintesi di Circuiti Logici – Prodotto di Somme

Obiettivo: Imparare a sintetizzare il comportamento di un circuito combinatorio partendo da una specifica tabella di verità mediante il prodotto di somme.

Componenti elettronici:

  • Porte Logiche (i.e., AND, OR, e NOT)

TeoriaUn circuito combinatorio è costituito da una serie di porte logiche opportunamente collegate tra loro con l’obiettivo di implementare una specifica funzione logica. Alcune delle porte logiche più utilizzate nell’ingegneria dell’informazione sono le porte: AND OR e NOT.

Le principali operazioni associate ad una rete logica sono due:

  • Analisi di una rete logica: dato un circuito combinatorio vengono determinate la funzione logica e la tabella di verità.
  • Sintesi di una rete logica: data la tabella di verità viene determinato il circuito combinatorio che implementa la rete.

Nel corso di questa lezione l’attenzione sarà focalizzata sulla sintesi di una rete logica. Nello specifico, la tecnica presentata per effettuare la sintesi di una rete logica viene denominata Prodotto di Somme e consiste in una procedura algoritmica che può essere facilmente applicata a tutte le differenti tabelle di verità.

Un’altra tecnica utilizzata per la sintesi di una rete logica è la somma di prodotti. Maggiori dettagli sono forniti al seguente link:


ARDWARE #14 Sintesi di Circuiti Logici – Somma di Prodotti


Il PRODOTTO DI SOMME (PoS – Product of Sum) è costituito dal prodotto logico dei maxtermini associati alle righe della tabella nella quale l’uscita assume valore 0.
Nel dettaglio un maxtermine è definito come la somma logica delle variabili booleane prese in forma diretta o negata a seconda se assumono valore 0 o 1.
A seguire, viene riportata la tabella dei maxtermini.

A B C Maxtermine
0 0 0 A+B+C
0 0 1 A+B+C
0 1 0 A+B+C
0 1 1 A+B+C
1 0 0 A+B+C
1 0 1 A+B+C
1 1 0 A+B+C
1 1 1 A+B+C

In analogia alla tabella di verità, è importante considerare che date n variabili di input il numeri di maxtermini è pari a 2n.

Esempio:
Al fine di illustrare in dettaglio il processo di prodotto di somme viene riportato un esempio specifico partendo dalla seguente tabella di verità:

A B C Y
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 0

1) Si prendono in considerazione solamente le uscite pari a 0 della tabella di verità, per ogni uscita si prendono i maxtermini di riferimento.

Input: 1 0 0 -> Maxtermine: A+B+C

Input: 1 1 1 -> Maxtermine: A+B+C

2) Si moltiplicano le somme precedentemente determinate per ottenere la funzione logica che implementa la tabella di verità di partenza.

Y= (A+B+C)*(A+B+C)

3) Si rappresenta la rete logica che implementa la funzione logica precedentemente determinata.

Circuito combinatorio di sintesi mediante prodotto di somme

Esercizi di Approfondimento:

Vengono in seguito riportati alcuni esercizi che possono essere facilmente eseguiti al fine di comprendere se i concetti presentati sono stati opportunamente acquisiti. Pertanto si chiede di determinare la rete combinatoria legata alle seguenti tabelle di verità:

  • Esercizio 1

A B C Y
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 1

  • Esercizio 2

A B C Y
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 0

Considerazioni:

Le principali tecniche utilizzate per la sintesi di una rete logica, sono la somma di prodotti (SoP) ed il prodotto di somme (PoS). Sebbene il procedimento applicato possa sembrare analogo e pertanto la scelta del metodo di sintesi possa risultare ad appannaggio del progettista, in realtà i due metodi presentano differenti vantaggi computazionali in base alla tabella di verità da sintetizzare.
Nello specifico per tabelle di verità la cui uscita assume più facilmente un valore pari ad 1 è opportuno utilizzare la somma di prodotti.
Differentemente per tabelle di verità la cui uscita assume più facilmente un valore pari ad 0 è opportuno utilizzare il prodotto di somme.




ARDWARE #14 Sintesi di Circuiti Logici – Somma di Prodotti

Obiettivo: Imparare a sintetizzare il comportamento di un circuito combinatorio partendo da una specifica tabella di verità mediante la somma di prodotti.

Componenti elettronici:

  • Porte Logiche (i.e., AND, OR, e NOT)

TeoriaUn circuito combinatorio è costituito da una serie di porte logiche opportunamente collegate tra loro con l’obiettivo di implementare una specifica funzione logica. Alcune delle porte logiche più utilizzate nell’ingegneria dell’informazione sono le porte: AND OR e NOT.

Maggiori informazioni in merito a queste porte logiche possono essere reperite nei seguenti link.


ARDWARE #3 Porta Logica NOT 74HC04



ARDWARE #5 Porta Logica OR 74HC32



ARDWARE #4 Porta Logica AND 74HC08


Le principali operazioni associate ad una rete logica sono due:

  • Analisi di una rete logica: dato un circuito combinatorio vengono determinate la funzione logica e la tabella di verità.
  • Sintesi di una rete logica: data la tabella di verità viene determinato il circuito combinatorio che implementa la rete.

La tecnica illustrata nel corso di questa lezione per effettuare la sintesi di una rete logica viene denominata Somma di Prodotti e consiste in una procedura algoritmica che può essere facilmente applicata a tutte le differenti tabelle di verità.
Nello specifico, la SOMMA DI PRODOTTI (SoP – Sum of Product) è costituita dalla somma logica dei mintermini associati alle righe della tabella nella quale l’uscita assume valore 1.
Nel dettaglio un mintermine è definito come il prodotto logico delle variabili booleane prese in forma diretta o negata a seconda se assumono valore 1 o 0.
A seguire la tabella dei mintermini.

A B C Mintermine
0 0 0 A B C
0 0 1 A B C
0 1 0 A B C
0 1 1 A B C
1 0 0 A B C
1 0 1 A B C
1 1 0 A B C
1 1 1 A B C

In analogia alla tabella di verità, è importante considerare che date n variabili di input il numeri di mintermini è pari a 2n.

Esempio:
Al fine di illustrare in dettaglio il processo di somma di prodotti viene riportato un esempio specifico partendo dalla seguente tabella di verità:

A B C Y
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 0

1) Si prendono in considerazione solamente le uscite pari ad 1 della tabella di verità, per ogni uscita si prendono i mintermini di riferimento.

Input: 0 1 1 -> Mintermine: A B C

Input: 1 0 0 -> Mintermine: A B C

2) Si sommano i mintermini precedentemente determinati per determinare la funzione logica che implementa la tabella di verità di partenza.

Y: A B C + A B C

3) Si rappresenta la rete logica che implementa la funzione logica precedentemente determinata.

Circuito combinatorio di sintesi

Esercizi di Approfondimento:

Vengono in seguito riportati alcuni esercizi che possono essere facilmente eseguiti al fine di comprendere se i concetti presentati sono stati opportunamente acquisiti. Pertanto si chiede di determinare la rete combinatoria legata alle seguenti tabelle di verità:

  • Esercizio 1

A B C Y
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 0

  • Esercizio 2

A B C Y
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 0