#include <stdio.h>

typedef struct 
  {
  signed long x0;  signed long y0;  signed long z0;
  signed long x1;  signed long y1;  signed long z1;
  signed long x2;  signed long y2;  signed long z2;
  signed long x3;  signed long y3;  signed long z3;
  } Treug_t;

//решение уравнения плоскости
signed long ReshUrPlsk(Treug_t* s)
  {
  return (signed long)((
          ((float)((s->x0)-(s->x1)))
          *
          (((s->y1)-(s->y2))
          *
          ((s->z3)-(s->z1))
        +
          ((float)((s->z2)-(s->z1)))
          *
          ((s->y3)-(s->y1)))
        +
          ((float)((s->y0)-(s->y1)))
          *
          ((s->x2)-(s->x1))
          *
          ((s->z3)-(s->z1))
        - 
          ((float)((s->x3)-(s->x1)))
          *
          ((float)((s->z2)-(s->z1)))  
        )
        /
        (
          ((float)((s->x2)-(s->x1)))
          *
          ((s->y3)-(s->y1))
        -
          ((float)((s->x3)-(s->x1)))
          *
          ((s->y2)-(s->y1))
        ))
        +
        (s->z1)
        ;
  //return (s->z0);
  
  }

int main(void) {
	// your code goes here
	
Treug_t asdf;
  
  asdf.x1=1000;
  asdf.y1=4000;
  asdf.z1=0;
  
  asdf.x2=4000;
  asdf.y2=1000;
  asdf.z2=1000;
  
  asdf.x3=4000;
  asdf.y3=4000;
  asdf.z3=0;
  
  for(int y=0;y<5000;y=y+250)
    {
    for(int x=0;x<5000;x=x+250)
      {
      asdf.x0=x;
      asdf.y0=y;
      
      printf(" %04d", ReshUrPlsk(&asdf));
      
      }
    printf("\n\r"); 
    }	
	
	
	
	return 0;
}

