Oggi vedremo come si possono simulare le porte logiche attraverso il codice sorgente realizzato in C++. Utilizzeremo vari metodi per raggiungere l'obiettivo e far sì di poter tradurre nel nostro nuovo pseudolinguaggio ogni circuito grafico realizzato con le porte logiche.
#include <iostream>
using namespace std;
typedef unsigned short int Positivo;
typedef bool logico;
const Positivo VERO=1;
const Positivo FALSO=0;
Ora dichiariamo le funzioni ed i metodi richiamati nel main.
Positivo NOT(Positivo A);
logico eUguale(Positivo A,Positivo B);
Positivo OR(Positivo A,Positivo B);
Positivo AND(Positivo A,Positivo B);
Positivo XOR(Positivo A,Positivo B);
Positivo NAND(Positivo A,Positivo B);
Positivo NOR(Positivo A,Positivo B);
Positivo XNOR(Positivo A,Positivo B);
// OR ed AND a TRE ingressi
Positivo OR(Positivo A,Positivo B,Positivo C);
Positivo AND(Positivo A,Positivo B,Positivo C);
// leggiamo gli interessi in modo corretto
Positivo Corretto_INS(Positivo dato)
{
if(!(dato ==0)) return VERO; // se < DI 0 o > di 0 restituiamo il valore 1 --> VERO
else return FALSO; // diversamente restituiamo FALSO -->
};
Non ci resta altro che realizzare il nostro main per eseguire il nostro programma.
int main()
{
Positivo A,B,C;
cout<<"Inseriamo i valori degli ingressi A B e C che possono assumere 0 o 1"<< endl;
cout <<"________________________________________________________________________________________";
cout<<"I dati correnti sono i seguenti......."<< endl;
cout <<"________________________________________________________________________________________";
cout<<"Inserisci il valore dell'ingresso A: "; cin>>A; A=Corretto_INS(A);
cout<<"Inserisci il valore dell'ingresso B: "; cin>>B; B=Corretto_INS(B);
cout<<"Inserisci il valore dell'ingresso C: "; cin>>C; C=Corretto_INS(C);
cout<<"I dati correnti sono i seguenti......."<< endl;
cout <<"________________________________________________________________________________________";
/* verifichiamo la corretta dinamica della funzione eUguale tra l'ingresso A e B
in modo da esaminare se le dichiarazioni delle variabili sono corrette */
cout<<"Il valore dell'ingresso A: "; cout<<A; cout<<" ...... "<< endl;
cout<<"Il valore dell'ingresso B: "; cout<<B; cout<<" ...... "<< endl;
cout<<"Il valore dell'ingresso C: "; cout<<C; cout<<" ...... "<< endl;
cout <<"_______________________________________________________________________________________________";
if (eUguale(A,B)) cout<<A << "A è uguale a B" <<endl;
cout <<"______________________________________________________________________________________________________";
// eseguiamo operazioni ed un ingresso porta NOT
cout << NOT(A) <<" il risultato di NOT(A) " <<endl;
cout << "________________________________________________________________________________________________________________________________________________";
// eseguiamo a OR B e lo mandiamo in stampa video e così via a 2 ingressi
cout << OR (A,B) <<"il risultato di A OR B " << endl;
cout << AND (A,B) <<"il risultato di A AND B " <<endl;
cout << NAND (A,B) <<"il risultato di A NAND B " <<endl;
cout << XOR(A,B) <<"il risultato di A XOR B " <<endl;
cout << XNOR(A,B) <<"il risultato di A XNOR B " <<endl;
cout << "_____________________________________________";
// eseguiamo OR e AND a tre ingressi e lo mandiamo in stampa video
cout << OR (A,B,C) <<"il risultato di A OR B OR C" <<endl;
cout << AND (A,B,C) <<" il risultato di A AND B AND C" <<endl;
cout << "_________________________________________________";
Positivo Y=NOT(OR(A,B));
cout << " il riultato totale della funzione A OR B tutto negato è: " << Y;
system ("pause");
return 0;
}
Ora espletiamo in modo completo le funzioni ed i metodi sopra citati nel codice del main.
Positivo NOT (Positivo A)
{
if(A==0) return VERO;
else return FALSO;
};
logico eUguale(Positivo A,Positivo B)
{
return (A==B);
};
Positivo OR(Positivo A,Positivo B)
{
return (A==1) || (B==1);
};
Positivo AND (Positivo A,Positivo B)
{
return (A==1) && (B==1);
};
Positivo XOR(Positivo A,Positivo B)
{
return !(A==B);
};
Positivo NAND(Positivo A,Positivo B)
{
return !((A==1) && (B==1));
};
Positivo NOR(Positivo A,Positivo B)
{
return ! ((A==1) || (B==1));
};
Positivo XNOR(Positivo A,Positivo B)
{
return (A==B);
};
// OR ed AND a TRE ingressi
Positivo OR(Positivo A,Positivo B,Positivo C){
return (A==1) && (B==1) && (C==1);
}
Positivo AND(Positivo A,Positivo B,Positivo C){
return (A==1) && (B==1) && (C==1);
}