9
votes

Générer des tables de vérité en Java

J'essaie d'imprimer des tables de vérité dans le cadre d'une affectation scolaire. Comment puis-je générer une table de vérité de taille dynamique en Java?

de sorte que printtruthable (1) imprime: xxx

printtruthable ( 3) impression: xxx

et ainsi de suite. J'ai essayé de la mettre en œuvre à l'aide de la récursion, mais je ne peux tout simplement pas le faire correctement.


0 commentaires

8 Réponses :


1
votes

Si vous regardez ce que vous générez, il semble compter en binaire. Vous allez compter jusqu'à 2 ^ (n) - 1 en binaire et cracher les bits.


0 commentaires

12
votes

Ce n'est pas un Table de vérité em> - plutôt, c'est une table de chiffres binaires. Vous pouvez utiliser la méthode INTEGER.TOBARYSTRAING JAVA'S CODE> pour générer les zéros et ceux dont vous avez besoin; L'insertion d'espaces doit être triviale.

int n = 3;
for (int i = 0 ; i != (1<<n) ; i++) {
    String s = Integer.toBinaryString(i);
    while (s.length() != 3) {
        s = '0'+s;
    }
    System.out.println(s);
}


1 commentaires

Pour le rendre dynamique, vous devez remplacer s.length ()! = 3 avec S.Length ()! = N



2
votes

La magie de la récursion: xxx


0 commentaires

16
votes

Voici mon problème sur votre problème, tous écrits bien et serré dans une petite classe, il suffit de copier / coller

remarquer comment j'ai utilisé MODULO2 (% signe) pour obtenir 0 et 1 des indices de boucle xxx


0 commentaires

0
votes

La table de vérité est la base de la représentation binaire du nombre mais sans éliminer les avantages de zéro alors ce que vous feriez est de boucler de 0 à (1 XXX PRE>

Vous pouvez également utiliser la récursion également: P>

public void generateRecursively(int i , int n){
    if(i==(1<<n))
        return;
    else{
        String temp = Integer.toBinaryString(i);
        while(temp.length()<n){
            temp = '0'+temp;
        }
        System.out.println(temp);
        generateRecursively(i+1,n);
    }
}


1 commentaires

Dans la fonction non récursive, il devrait être 'alors que (BinaryRep.Length () ...', ainsi que 'System.Out.println (Binaryrep);' (Binaryrep au lieu de S).



0
votes

une prise plus longue à votre problème xxx


0 commentaires

0
votes

Je devais faire quelque chose de similaire récemment, sauf que le projet était de générer une table de vérité pour une expression logique donnée. C'est ce que j'ai créé pour avoir attribué des variables indépendantes leurs valeurs de vérité.

    column = 0;

    while (column < numVariables)
    {
        state = false;
        toggle = (short) Math.pow(2, numVariables - column - 1);

        row = 1;
        while (row < rows)
        {
            if ((row -1)%toggle == 0)
                state = !state;

            if (state)
                truthTable[row][column] = 'T';
            else
                truthTable[row][column] = 'F';

            row++;
        }

        column++;
    }


0 commentaires

0
votes

Ce programme simple stocke votre table de vérité de tout nombre donné d'entrées dans un tableau INT et l'imprime.

import java.util.Scanner;

public class Main{

public static class TruthTable {
    public static int rows;
    public static int nodes;
    public static int[][] tt = new int[0][0];


    TruthTable(int n) {
        this.nodes = n;
        this.rows = (int) Math.pow(2,n);
        tt = new int[rows][nodes];

        for (int i=0; i<rows; i++) {
            for (int j=n-1; j>=0; j--) {
                tt[i][j] = (i/(int) Math.pow(2, j))%2;
            }  
        }
    }   

    void printTable(){
        for (int i=0; i<rows; i++) {
            for (int j=nodes-1; j>=0; j--) {
                System.out.printf("%d ", tt[i][j]);
            }
            System.out.println();

        }

    }
}
public static void main(String[] args) {
    Scanner myObj = new Scanner(System.in);
    System.out.println("Enter Size of Population: ");
    int numberOfNodes = myObj.nextInt();
    TruthTable myTable = new TruthTable(numberOfNodes);
    //TruthTable.printTruthTable(3);
    System.out.println();

    myTable.printTable();

}


0 commentaires