Thread: Simpletron problem!

  1. #1
    Registered User
    Join Date
    Nov 2011
    Posts
    27

    Simpletron problem!

    I have made this simpletron code:

    Code:
    #include<stdio.h>
    
    
    /*****************/
    #define SIZE 100
    #define READ 10
    #define WRITE 11
    #define LOAD 20 
    #define STORE 21
    #define ADD 30
    #define HALT 43
    /*****************/
    
    
    void inputArry( int * );
    void code( int *, int *, int *, int *, int *, int * );
    void printArray( int * );
    int valid( int );
    
    
    /*****************/
    int main()
    {
        int memory[ SIZE ] = { 0 };
        int opC = 0, oper = 0;
        int acc = 0, instReg = 0;
        int instC = 0;
        int i;
    
    
        inputArry( memory );
        code( memory, &instReg, &opC, &oper, &acc, &instC );
    
    
        printf( "\n\n" );
    
    
        printArray( memory );
    
    
        printf( "\n\n" );
    
    
        return 0;
    }   /* End Main */
    /*****************/
    
    
    /****************************/
    void inputArry( int *memoryPtr )
    {
        long int inst;
        int i = 0;
    
    
        printf( "00 ? " );
        scanf( "%ld", &inst );
    
    
        while( inst != -99999 )
        {
            if( !valid( inst ) )
            {
                printf( "Invalid number!!\nEnter Again!\n\n" );
            }
            else
            {
                memoryPtr[ i ] = inst;
    
    
                i++;
            }
    
    
            printf( "%02d ? ", i );
            scanf( "%ld", &inst );
        }
    }
    /****************************/
    
    
    void code( int *memoryPtr, int *instRegPtr, int *opCPtr, int *operPtr, int *accPtr, int *instCPtr )
    {
        int a;
    
    
        *instRegPtr = memoryPtr[ *instCPtr ];
    
    
        *opCPtr = *instRegPtr / 100;
        *operPtr = *instRegPtr % 100;
    
    
        while( *opCPtr != HALT )
        {
            switch( *opCPtr )
            {
    
    
            case READ:
                {
                    printf( "Enter Integer: " );
                    scanf( "%d", &a );
    
    
                    memoryPtr[ *operPtr ] = a;
    
    
                    ( *instCPtr )++;
    
    
                    break;
                }
    
    
            case WRITE:
                {
                    printf( "%02d contains = %d\n", *operPtr, memoryPtr[ *operPtr ] );
    
    
                    ( *instCPtr )++;
    
    
                    break;
                }
    
    
            case LOAD:
                {
                    *accPtr = memoryPtr[ *operPtr ];
    
    
                    ( *instCPtr )++;
    
    
                    break;
                }
    
    
            case STORE:
                {
                    memoryPtr[ *operPtr ] = *accPtr;
    
    
                    ( *instCPtr )++;
    
    
                    break;
                }
    
    
            case ADD:
                {
                    *accPtr = a + memoryPtr[ *operPtr ];
    
    
                    ( *instCPtr )++;
    
    
                    break;
                }
            } /* End Switch */
    
    
            *instRegPtr = memoryPtr[ *instCPtr ];
    
    
            *opCPtr = *instRegPtr / 100;
            *operPtr = *instRegPtr % 100;
    
    
        } /* End While */
    } /* End code */
    
    
    void printArray( int *memoryPtr )
    {
        int i;
    
    
        for( i = 0; i <= 9 ; i++ )
        {
            printf( " %5d ", i );
        }
    
    
        for( i = 0; i < SIZE; i++ )
        {
    
    
            if( i % 10 == 0 )
            {
                printf( "\n\n%2d", i );
            }
    
    
            printf( " %+05d ", memoryPtr[ i ] );
        }
    }
    
    
    int valid( int word )
    {
        return word >=-99999 && word <= 99999;
    }
    the problem is that whenever i enter the sentinel "-99999" the program stays idle and doesn't print the array
    it should print the array
    please help!

    i am really sorry for the long code, but please! i need help on this!
    Last edited by ahmedbatty; 11-27-2011 at 04:27 AM.

  2. #2
    Registered User
    Join Date
    Sep 2008
    Posts
    200
    It's hanging in code(). Your while-loop depends on the value of opCPtr, and the only references to it in code() are:

    Code:
        *opCPtr = *instRegPtr / 100;
        while( *opCPtr != HALT )
        {
            switch( *opCPtr )
            {
                /* ... */
            }
            *opCPtr = *instRegPtr / 100;
        }
    So the value of *opCPtr is always *instRegPtr / 100 (which apparently is not HALT) so you've got an infinite loop.
    Last edited by JohnGraham; 11-27-2011 at 04:40 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Replies: 4
    Last Post: 10-16-2008, 07:30 PM
  2. Replies: 27
    Last Post: 10-11-2006, 04:27 AM
  3. Visual Studio Linker problem or my problem?
    By OOPboredom in forum C Programming
    Replies: 2
    Last Post: 04-13-2004, 12:32 AM
  4. Simpletron! Simulator
    By cyberCLoWn in forum Tech Board
    Replies: 0
    Last Post: 02-29-2004, 02:12 PM
  5. syntax linked list problem & struct problem
    By beely in forum C Programming
    Replies: 5
    Last Post: 11-11-2002, 09:14 AM