locked
Convert C to C# RRS feed

  • Question

  • hi ,, i need to convert this C code to C# code really really fast .

    can anyone help ??!

    here is the code >>
    "
    #include &ltstdio.h>


    #define FALSE 0
    #define TRUE 1
    #define N_POSITIONS 9
    #define MAX_N_MOVES 4
    #define NO_FLAGS 0
    #define ON_SOLUTION_PATH 1
    #define NO_SOLUTION 0
    #define FOUND_SOLUTION 1
    #define HOLE 0
    #define NO_PIECE 255



    typedef unsigned char STATE[ N_POSITIONS ];


    typedef struct node
    {
      STATE state;
      unsigned char piece_moved;
      struct node *sibling;
      struct node *first_child;
      struct node *parent;
      int flags;
    }
    NODE;


    int moves[ N_POSITIONS ][ MAX_N_MOVES ] =
    {
      { 1, 3, -1, -1 },
      { 0, 2, 4, -1 },
      { 1, 5, -1, -1 },
      { 0, 4, 6, -1},
      { 1, 3, 5, 7},
      { 2, 4, 8, -1},
      { 3, 7, -1, -1},
      { 4, 6, 8, -1},
      { 5, 7, -1, -1}
    };

    int solution[ N_POSITIONS ] = { 1, 2, 3, 4, 5, 6, 7, 8, 0 };

    int n_nodes = 0; 



    main()
    {
      NODE *search_tree, *solution;
      NODE *malloc_node();
      int depth;



      search_tree = malloc_node();

      read_initial_state( search_tree->state );
      for( depth = 1; depth state[i] = i;
      node->piece_moved = NO_PIECE;
      node->sibling = NULL;
      node->first_child = NULL;
      node->parent = NULL;
      node->flags = NO_FLAGS;

      n_nodes++;
      return node;
    }


    read_initial_state( state )
         STATE state;
    {
      int i;
      int value;
      int repeats[N_POSITIONS];

      printf( "Please type in the initial position of the squares\n" );
      printf( "Give each row from top to bottom in left to right order\n" );
      for( i = 0; i  8 )
        {
          fprintf( stderr,
          "Illegal value %d in position %d, values must between 0 and 8.\n",
              value, i );
          exit( -1 );
        }
          if ( repeats[value] > 0 )
        {
          fprintf( stderr, "Duplicate value %d in position %d.\n", value, i );
          exit( -1 );
        }
          repeats[value] = 1;
          state[i] = (unsigned char) value; 
        }
      printf( "Input read:\n" );
      print_board( state );
    }


    print_board( state )
         STATE state;
    {
      printf( "%d %d %d\n", state[0], state[1], state[2] );
      printf( "%d %d %d\n", state[3], state[4], state[5] );
      printf( "%d %d %d\n", state[6], state[7], state[8] );
    }


    expand_search_tree_by_one( node )
         NODE *node;
    {

      if ( node == NULL )
        {
          fprintf( stderr, "Consistency check 1 failed\n" );
          exit( -1 );
        }
      if ( node->first_child == NULL )
        generate_moves( node );
      else
        expand_search_tree_by_one( node->first_child );

      if ( on_solution_path( node ) && node->parent != NULL )
        {
          node->parent->flags |= ON_SOLUTION_PATH;
          return;
        }

      if ( node->sibling != NULL )
        expand_search_tree_by_one( node->sibling );
    }


    generate_moves( node )
         NODE *node;
    {
      NODE *make_move();
      NODE *child;
      int i;

      child = make_move( node, 0 );
      node->first_child = child;
      if ( is_solution( child ) )
        {
          node->flags |= ON_SOLUTION_PATH;
          return FOUND_SOLUTION;
        }
      for( i = 1; i sibling = make_move( node, i );
          if ( child->sibling == NULL )
        return NO_SOLUTION;
          if ( is_solution( child->sibling ) )
        {
          node->flags |= ON_SOLUTION_PATH;
          return FOUND_SOLUTION;
        }
          child = child->sibling;
        }
      return NO_SOLUTION;
    }


    NODE *make_move( node, index )
         NODE *node;
         int index;
    {
      int i, hole_position, piece_position;
      NODE *result;


      for( i = 0; i state[i] == HOLE )
        break;
        }
      hole_position = i;
      piece_position = moves[hole_position][index];
      if ( piece_position parent = node;
      for( i = 0; i state[i] = node->state[i];
        }
      result->state[hole_position] = node->state[piece_position];
      result->state[piece_position] = node->state[hole_position];
      result->piece_moved = node->state[piece_position];


      return result;
    }


    is_solution( node )
         NODE *node;
    {
      int i;

      for( i = 0; i state[i] != solution[i] )
        return FALSE;
        }
      node->flags |= ON_SOLUTION_PATH;
      return TRUE;
    }


    on_solution_path( node )
         NODE *node;
    {
      if ( ( node->flags & ON_SOLUTION_PATH ) == 0 )
        return FALSE;
      else
        return TRUE;
    }


    print_out_solution( node )
         NODE *node;
    {
      if ( node == NULL )
        return;
      if ( on_solution_path( node ) )
        {
          if ( node->piece_moved != NO_PIECE )
        {
          printf( "Piece %d moved.\n", node->piece_moved );
          print_board( node );
        }
          else
        {
          printf( "Starting postion:\n" );
          print_board( node );
        }
          print_out_solution( node->first_child );
        }
      else
        print_out_solution( node->sibling );
    }

    "

                                              
    Friday, March 4, 2016 5:58 PM

Answers

  • clr can't marshal native pointers in structures. You need to copy the data from native memory to the managed heap using the Marshal class. If you use the structure in more than one place, you may want to write a marshaler


    Visual C++ MVP

    • Proposed as answer by Kristin Xie Tuesday, March 15, 2016 1:27 AM
    • Marked as answer by DotNet Wang Wednesday, March 16, 2016 1:01 AM
    Friday, March 4, 2016 6:37 PM
  • Hello,

    pls look, this code still include syntax errors, so from basic isn't really simple to convert it.

    Regards...

    Duris_I

    • Proposed as answer by Kristin Xie Tuesday, March 15, 2016 1:27 AM
    • Marked as answer by DotNet Wang Wednesday, March 16, 2016 1:01 AM
    Sunday, March 6, 2016 1:38 PM

All replies

  • clr can't marshal native pointers in structures. You need to copy the data from native memory to the managed heap using the Marshal class. If you use the structure in more than one place, you may want to write a marshaler


    Visual C++ MVP

    • Proposed as answer by Kristin Xie Tuesday, March 15, 2016 1:27 AM
    • Marked as answer by DotNet Wang Wednesday, March 16, 2016 1:01 AM
    Friday, March 4, 2016 6:37 PM
  • Hello,

    pls look, this code still include syntax errors, so from basic isn't really simple to convert it.

    Regards...

    Duris_I

    • Proposed as answer by Kristin Xie Tuesday, March 15, 2016 1:27 AM
    • Marked as answer by DotNet Wang Wednesday, March 16, 2016 1:01 AM
    Sunday, March 6, 2016 1:38 PM
  • ask whoever wrote this code to give you working code first.


    Visual C++ MVP

    Sunday, March 6, 2016 2:40 PM