#include <iostream>
using namespace std;

int ANDLogico(int a, int b); // PROTOTIPO DELLA FUNZIONE DELL'AND LOGICO
void stampaTabellaANDLogico(int (*f)(int, int)); // PROTOTIPO DELLA FUNZIONE PER STAMPARE LA TABELLA DELL'AND LOGICO

int ORLogico(int a, int b); // PROTOTIPO DELLA FUNZIONE DELL'OR LOGICO
void stampaTabellaORLogico(int (*f)(int, int)); // PROTOTIPO DELLA FUNZIONE PER STAMPARE LA TABELLA DELL'OR LOGICO

int main() {
    stampaTabellaANDLogico(ANDLogico); // STAMPA DELLA TABELLA DELL'AND LOGICO
    
	stampaTabellaORLogico(ORLogico); // STAMPA DELLA TABELLA DELL'OR LOGICO
	
    return 0;
}




int ANDLogico(int a, int b) {
    return a && b; //
}

// FUNZIONE PER STAMPARE LA TABELLA DELL'AND LOGICO
void stampaTabellaANDLogico(int (*f)(int, int)) {
    cout << "A\tB\tRisultato" << endl;
    cout << "-------------------" << endl;

    for (int a = 0; a <= 1; ++a) {
        for (int b = 0; b <= 1; ++b) {
            int risultato = f(a, b); // Calcola il risultato della funzione logica
            cout << a << "\t" << b << "\t" << risultato << endl;
        }
    }
    
    cout << endl << endl;
}

int ORLogico(int a, int b) {
	return a || b; //
}

// FUNZIONE PER STAMPARE LA TABELLA DELLA VERITA DELL'OR LOGICO
void stampaTabellaORLogico(int (*f)(int, int)) {
	cout << "A\tB\tRisultato" << endl;
    cout << "-------------------" << endl;

    for (int a = 0; a <= 1; ++a) {
        for (int b = 0; b <= 1; ++b) {
            int risultato = f(a, b); // Calcola il risultato della funzione logica
            cout << a << "\t" << b << "\t" << risultato << endl;
        }
    }
}