Advertisement
Guest User

Untitled

a guest
Dec 5th, 2012
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <stdbool.h>
  5. #include <ctype.h>
  6.  
  7. #define AND 0
  8. #define OR 1
  9. #define XOR 2
  10. #define NOT 3
  11.  
  12. struct Logic_Element {
  13.     int ID;
  14.     int *input_ids;
  15.     int *input_types;
  16.     int kind;
  17.     int nr_inputs;
  18.     bool output;   
  19. };
  20.  
  21. struct Sub_System {
  22.     int nr_elements;
  23.     int nr_inputs;
  24.     struct  Logic_Element *elements_pointer;   
  25. };
  26.  
  27. typedef struct Logic_Element Logic_Element;
  28. typedef struct Sub_System Sub_System;
  29.  
  30. bool test(int nr_inputs,int kind)
  31. {
  32.     bool return_value;
  33.     switch(kind)
  34.     {
  35.         case 0:
  36.         {
  37.             return_value = true;
  38.             break;         
  39.         }      
  40.     }
  41.     return return_value;
  42. }
  43.  
  44. void show_help(int code)
  45. {
  46.     switch (code)
  47.     {
  48.         case 0:
  49.         {
  50.             printf("supported gate types:\n"
  51.                    "AND (return True only if all inputs are True)\n"
  52.                    "OR (returns False only if all inputs are False)\n"
  53.                    "NOT(returns True if input is False, "
  54.                    "and returns False if input is True)\n"
  55.                    "XOR (returns True only is exactly 1 input is True)\n");
  56.             break; 
  57.         }  
  58.     }  
  59. }
  60.    
  61. bool check_element_type_input(char* str, Logic_Element * element_pointer)
  62. {
  63.     if(!strcmp(str,"help"))
  64.     {
  65.         show_help(0);
  66.         return false;
  67.     }
  68.     else if(!strcmp(str,"AND"))
  69.     {
  70.         element_pointer->kind = AND;
  71.         return true;
  72.     }
  73.     else if(!strcmp(str,"OR"))
  74.     {
  75.         element_pointer->kind = OR;    
  76.         return true;
  77.     }
  78.     else if(!strcmp(str,"NOT"))
  79.     {
  80.         element_pointer->kind = NOT;       
  81.         return true;
  82.     }
  83.     else if(!strcmp(str,"XOR"))
  84.     {
  85.         element_pointer->kind = XOR;       
  86.         return true;
  87.     }
  88.     else {
  89.         printf("Invalid input");
  90.         return false;
  91.     }
  92. }
  93.    
  94. Sub_System* build_ssystem()
  95. {
  96.     unsigned int nr;
  97.     Sub_System *ssystem = (Sub_System*)malloc( sizeof(Sub_System) );
  98.  
  99.     char str[10];
  100.     printf("enter number of inputs needed for sub system: ");
  101.     fgets(str, sizeof(str), stdin);
  102.     scanf("%d",&(*ssystem).nr_inputs);
  103.     printf("enter number of elements needed for sub system: ");
  104.     scanf("%d",&(*ssystem).nr_elements);
  105.     nr = ssystem->nr_elements;
  106.    
  107.     ssystem->elements_pointer = (Logic_Element*)malloc(sizeof(Logic_Element)*nr);
  108.  
  109.     for(unsigned int i = 0; i < ssystem->nr_elements; i++)
  110.     {
  111.         bool done = false;
  112.         while(!done) {
  113.             printf("enter kind of element, type 'help' for info\n");
  114.             fgets(str, sizeof(str), stdin);
  115.             done = check_element_type_input(str, &(ssystem->elements_pointer[i]) );
  116.         }
  117.        
  118.         if(ssystem->elements_pointer[i].kind != NOT)
  119.         {
  120.             printf("enter number of inputs this element has\n");
  121.             scanf("%d", &(ssystem->elements_pointer[i].nr_inputs));
  122.            
  123.             int num_inputs = ssystem->elements_pointer[i].nr_inputs;
  124.             int* ids   = (int*)malloc( sizeof(int)*num_inputs );
  125.             int* types = (int*)malloc( sizeof(int)*num_inputs );
  126.             ssystem->elements_pointer[i].input_ids = ids;
  127.             ssystem->elements_pointer[i].input_types = types;
  128.  
  129.             printf("For each of the inputs, enter the ID of the element it is"
  130.                    "connected to. The ID equal the order in which the elements "
  131.                    "are added.\n to connect the gate input to a sub system "
  132.                    "input, type 'o' followed by the nr of the input.\n for "
  133.                    " example o1 would connect the gate input to sub system "
  134.                    " input 1.\n");
  135.             for(int j = 0; j < num_inputs; j++)
  136.             {
  137.                     printf("input %d: ",j);
  138.                     fgets(str, sizeof(str), stdin);            
  139.  
  140.                     ssystem->elements_pointer[i].input_ids[0] = 1;
  141.                     ssystem->elements_pointer[i].input_types[0] = str[0];
  142.             }  
  143.         }              
  144.     }      
  145.    
  146.     for(int i = 0; i < ssystem->nr_elements; i++)
  147.     {
  148.         Logic_Element element = ssystem->elements_pointer[i];
  149.         printf("element %d:\t kind: %d \t nr inputs: %d\n",
  150.                i, element.kind, element.nr_inputs);        
  151.         for(int j = 0; j < element.nr_inputs; j++)
  152.         {
  153.             printf("%d\t%d\t",
  154.                 ssystem->elements_pointer[j].input_types[j],
  155.                 ssystem->elements_pointer[j].input_types[j]);              
  156.         }
  157.         printf("\n");
  158.     }
  159.     return ssystem;
  160. }
  161.  
  162. int main()
  163. {
  164.     printf("Welkom \n");
  165.     Sub_System *testt=build_ssystem();
  166.     printf("%d",test(0,0));
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement