Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include <ctype.h>
- #define AND 0
- #define OR 1
- #define XOR 2
- #define NOT 3
- struct Logic_Element {
- int ID;
- int *input_ids;
- int *input_types;
- int kind;
- int nr_inputs;
- bool output;
- };
- struct Sub_System {
- int nr_elements;
- int nr_inputs;
- struct Logic_Element *elements_pointer;
- };
- typedef struct Logic_Element Logic_Element;
- typedef struct Sub_System Sub_System;
- bool test(int nr_inputs,int kind)
- {
- bool return_value;
- switch(kind)
- {
- case 0:
- {
- return_value = true;
- break;
- }
- }
- return return_value;
- }
- void show_help(int code)
- {
- switch (code)
- {
- case 0:
- {
- printf("supported gate types:\n"
- "AND (return True only if all inputs are True)\n"
- "OR (returns False only if all inputs are False)\n"
- "NOT(returns True if input is False, "
- "and returns False if input is True)\n"
- "XOR (returns True only is exactly 1 input is True)\n");
- break;
- }
- }
- }
- bool check_element_type_input(char* str, Logic_Element * element_pointer)
- {
- if(!strcmp(str,"help"))
- {
- show_help(0);
- return false;
- }
- else if(!strcmp(str,"AND"))
- {
- element_pointer->kind = AND;
- return true;
- }
- else if(!strcmp(str,"OR"))
- {
- element_pointer->kind = OR;
- return true;
- }
- else if(!strcmp(str,"NOT"))
- {
- element_pointer->kind = NOT;
- return true;
- }
- else if(!strcmp(str,"XOR"))
- {
- element_pointer->kind = XOR;
- return true;
- }
- else {
- printf("Invalid input");
- return false;
- }
- }
- Sub_System* build_ssystem()
- {
- unsigned int nr;
- Sub_System *ssystem = (Sub_System*)malloc( sizeof(Sub_System) );
- char str[10];
- printf("enter number of inputs needed for sub system: ");
- fgets(str, sizeof(str), stdin);
- scanf("%d",&(*ssystem).nr_inputs);
- printf("enter number of elements needed for sub system: ");
- scanf("%d",&(*ssystem).nr_elements);
- nr = ssystem->nr_elements;
- ssystem->elements_pointer = (Logic_Element*)malloc(sizeof(Logic_Element)*nr);
- for(unsigned int i = 0; i < ssystem->nr_elements; i++)
- {
- bool done = false;
- while(!done) {
- printf("enter kind of element, type 'help' for info\n");
- fgets(str, sizeof(str), stdin);
- done = check_element_type_input(str, &(ssystem->elements_pointer[i]) );
- }
- if(ssystem->elements_pointer[i].kind != NOT)
- {
- printf("enter number of inputs this element has\n");
- scanf("%d", &(ssystem->elements_pointer[i].nr_inputs));
- int num_inputs = ssystem->elements_pointer[i].nr_inputs;
- int* ids = (int*)malloc( sizeof(int)*num_inputs );
- int* types = (int*)malloc( sizeof(int)*num_inputs );
- ssystem->elements_pointer[i].input_ids = ids;
- ssystem->elements_pointer[i].input_types = types;
- printf("For each of the inputs, enter the ID of the element it is"
- "connected to. The ID equal the order in which the elements "
- "are added.\n to connect the gate input to a sub system "
- "input, type 'o' followed by the nr of the input.\n for "
- " example o1 would connect the gate input to sub system "
- " input 1.\n");
- for(int j = 0; j < num_inputs; j++)
- {
- printf("input %d: ",j);
- fgets(str, sizeof(str), stdin);
- ssystem->elements_pointer[i].input_ids[0] = 1;
- ssystem->elements_pointer[i].input_types[0] = str[0];
- }
- }
- }
- for(int i = 0; i < ssystem->nr_elements; i++)
- {
- Logic_Element element = ssystem->elements_pointer[i];
- printf("element %d:\t kind: %d \t nr inputs: %d\n",
- i, element.kind, element.nr_inputs);
- for(int j = 0; j < element.nr_inputs; j++)
- {
- printf("%d\t%d\t",
- ssystem->elements_pointer[j].input_types[j],
- ssystem->elements_pointer[j].input_types[j]);
- }
- printf("\n");
- }
- return ssystem;
- }
- int main()
- {
- printf("Welkom \n");
- Sub_System *testt=build_ssystem();
- printf("%d",test(0,0));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement