j'ai un struct lié à résoudre le problème des portes logiques ... mais je doute sur le fonctionnement du struct lié, et comment puis-je utiliser leurs valeursstruct Linked in C
Donc, ce qui est mon code :
typedef enum { NEG, AND, OR, NAND, NOR, XOR, XNOR }Gates;
struct AstLogic
{
bool input1;
bool input2;
bool result;
Gates gate;
struct AstLogic *nextGate;
};
et les fonctions de test est la suivante:
struct AstLogic ast1, ast2, ast3;
//
// 1-|ast1|
// 1-|____|+-------+
// |
// +|ast3|
// +|____|+----+ OUTPUT
// |
// 1-|ast2|+-------+
// 0-|____|
//
void createInputsTest()
{
ast1.gate = NOR;
ast1.input1 = true;
ast1.input2 = true;
ast3.result = ~(ast1.input1|ast1.input2);
ast2.gate = NOR;
ast2.input1 = true;
ast2.input2 = false;
ast2.result = ~(ast2.input1|ast2.input2);
ast1.nextGate = &ast2; // make the link
ast3.gate = NOR;
ast3.input1 = ast1.result;
ast3.input2 = ast2.result;
ast3.result = ~(ast3.input1|ast3.input2);
if(ast3.result == true)
printf("true");
else
printf("false");
}
Je viens whant de savoir, si un bon whay à auto-obtenir le résultat "de sortie", en utilisant cette logique AST ... Par exemple e, j'entre avec un fichier avec la logique, et mon programme fait l'analyse dans ce fichier et génère cet ast, comment est le meilleur whay pour générer ce ast?
questions sont bêtes, mais ne savent pas comment résoudre, alors je suis venu ici à Stackoverflow de prendre mes doutes, parce que je ne sais pas comment résoudre ces doutes ...
Vous avez "NON" comme une fonction qui brise le motif. Mais, en ignorant cela, je suggère d'utiliser des pointeurs de fonction au lieu d'exécuter l'opération logique dans votre code de test. Ensuite, vous devez trouver tous les nœuds sans parent et travailler votre chemin jusqu'à la fin. – HonkyTonk
Ceci est un exemple classique d'où la conception orientée objet pourrait être utile, avec une classe pour "Gate" et des sous-classes pour chaque type. Si vous ne pouvez pas ou ne voulez vraiment pas utiliser C++, vous pouvez l'émuler en utilisant des pointeurs de fonction comme le suggère @HonkyTonk, mais c'est essentiellement comme cela que C++ le fait sous le capot. – chrylis
Vous pouvez faire vos pointeurs d'entrée aux objets AstLogic - alors, pour obtenir la valeur booléenne d'entrée, ce serait par ex. 'ast2.input1-> résultat'. – sje397