This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Dec 5th, 2012  |  syntax: C  |  size: 3.94 KB  |  views: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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. }
clone this paste RAW Paste Data