ball.c
contents ::
  ball.c
  input

#include <stdio.h>
#include <stdlib.h>

/*      
  this is programming contest practise. 
  to be precise, problem G.
  it reads 5 ints and makes their tracks:
        
*/
        
main(){
  char container[20][20];
  int rows=0,s_row=0,cols=0,s_col=0,dir=0;
  
  /* Read input until 5 0's */
  while(5 == scanf("%d%d%d%d%d", &rows, &cols, &s_row, &s_col, &dir) &&
         rows!=0 && cols!=0 && dir!=0){
    
    /* remember starting position and dir*/
    int s_x = s_row-1;
    int s_y = s_col-1;
    int s_d = dir;
    int x,y;
    int itr = 0;
    

    /* convert from human numbering system to computer one */
    s_row = s_x;
    s_col = s_y;

    /* Set Array */
    for(x=0; x<rows; x++){
      for(y=0; y<cols; y++){
         container[x][y]='-';
      }
    }
    
    
    /* Draw Path */
    while(1){  


      container[s_row][s_col]='#';
           
      /* Change direction */
      switch(dir) {
      case 1:
         if(s_row == 0)
           dir = 5;
         break;
      case 2: 
         if(s_row == 0 && s_col == cols-1)
           dir = 6;
         else if(s_row == 0)
           dir = 4;
         else if(s_col == cols-1)
           dir = 8;
         break;
      case 3: 
         if(s_col == cols-1)
           dir = 7;
         break;
      case 4:
         if(s_row == rows-1 && s_col == cols-1)
           dir = 8;
         else if(s_row == rows-1)
           dir = 2;
         else if(s_col == cols-1)
           dir = 6; 
         break;
      case 5: 
         if(s_row == rows-1)
           dir = 1;
         break;
      case 6:
         if(s_row == rows-1 && s_col == 0)
           dir = 2;
         else if(s_row == rows-1)
           dir = 8;
         else if(s_col == 0)
           dir = 4;
         break;
      case 7:
         if(s_col == 0)
           dir = 3; 
         break;
      case 8:
         if(s_row == 0 && s_col == 0)
           dir = 4;
         else if(s_row == 0)
           dir = 6;
         else if(s_col == 0)
           dir = 2;         
         break;
      default: /* ? */
         printf("help?");
      } /* end of switch */                  
      
      if(itr){
         /* break if conditions are right */
         if(s_row == s_x && s_col == s_y && dir == s_d)
           break;              
      }
      itr++;

      /* make a movement */
      switch(dir) {
      case 1:
         s_row--;
         break;
      case 2: 
         s_row--;
         s_col++;
         break;
      case 3: 
         s_col++;
         break;
      case 4: 
         s_col++;
         s_row++;
         break;
      case 5: 
         s_row++;
         break;
      case 6: 
         s_row++;
         s_col--;
         break;
      case 7: 
         s_col--;
         break;
      case 8: 
         s_col--;
         s_row--;
         break;
      default: /* ? */
         /* printf("help?"); */
      } /* end of switch */

      
    } /* end of while loop that makes the tracks */
    
    /* print the array - please */
    /*{
      int x,y;*/
    for(x=0; x<rows; x++){
      for(y=0; y<cols; y++){
         printf("%c",container[x][y]);
      }
      printf("\n");
    }
    printf("\n");
    
  }
}

James Little