G29 Answer


#include <stdio.h>

typedef struct
{
  int x, y;
} Point;

void printPoint( Point *p )
{
  printf("(%d, %d) ", p->x, p->y );
}

Point *newPoint()
{
  Point *p = (Point *)malloc( sizeof( Point ) );
  p->x=0;
  p->y=0;
  return p;
}

void setPoint( Point *p, int x, int y )
{
  p->x = x; p->y = y;
}

typedef struct
{
  int red, green, blue;
} Color;

Color *newColor()
{
  Color *c = (Color *)malloc( sizeof( Color ) );
  c->red=0;
  c->green=0;
  c->blue=0;
  return c;
}

/* function to set a Color */
void setColor( Color *c, int r, int g, int b )
{
  if ( r<0 || r>255 ) r = 0;
  if ( g<0 || g>255 ) g = 0;
  if ( b<0 || b>255 ) b = 0;

  c->red   = r;
  c->green = g;
  c->blue  = b;
}

void printColor( Color *c )
{
  printf("%3d red, %3d grn, %3d blu", c->red, c->green, c->blue );
}

typedef struct
{
  Point *p0, *p1, *p2;
  Color *color;
} TriangleMod;

void printTriangleMod( TriangleMod *t )
{
  printf("Points: ");
  printPoint( t->p0 ); printPoint( t->p1 ); printPoint( t->p2 );
  printf("  Color: ");
  printColor( t->color );
  printf("\n");
}

TriangleMod *newTriangleMod()
{
  TriangleMod *tm;
  tm = (TriangleMod *)malloc( sizeof( TriangleMod ) );
  tm->p0 = newPoint();
  tm->p1 = newPoint();
  tm->p2 = newPoint();
  tm->color = newColor();

  return tm;
}

void freeTriangleMod( TriangleMod *t )
{
  free( t->color);
  free( t->p0);
  free( t->p1);
  free( t->p2);
  free( t );
}

void setTriangleModPoint( TriangleMod *tri, int num, int x, int y)
{
  if ( num==0 ) setPoint( tri->p0, x, y );
  if ( num==1 ) setPoint( tri->p1, x, y );
  if ( num==2 ) setPoint( tri->p2, x, y );
}

void setTriangleModColor( TriangleMod *tri, int r, int g, int b)
{
  setColor( tri->color, r, g, b );
}

int main()
{
  const int length = 8;
  int j;

  TriangleMod *triarray[length];

  /* Initialize the array */
  for ( j=0; j<length; j++ )
    triarray[j] = NULL;

  /* Create several array elements here */
  triarray[0] = newTriangleMod();
  setTriangleModPoint( triarray[0], 0, 245, 148 );
  setTriangleModPoint( triarray[0], 1, -97,  32 );
  setTriangleModPoint( triarray[0], 2, 12, -34 );
  setTriangleModColor( triarray[0], 200, 160, 100);

  triarray[3] = newTriangleMod();
  setTriangleModPoint( triarray[3], 0, 0, 0 );
  setTriangleModPoint( triarray[3], 1, 100, 0 );
  setTriangleModPoint( triarray[3], 2, 100, 100 );
  setTriangleModColor( triarray[3], 0, 150, 150);

  triarray[5] = newTriangleMod();
  setTriangleModPoint( triarray[5], 0, 99, 65 );
  setTriangleModPoint( triarray[5], 1, 123, 300 );
  setTriangleModPoint( triarray[5], 2, 134, -12 );
  setTriangleModColor( triarray[5], 100, 250, 200 );

  /* Print out the array here. Print "null" for empty cells. */
  for ( j=0; j<length; j++ )
  {
    printf("%d: ", j );
    if ( !triarray[j] )
      printf("null\n");
    else
      printTriangleMod( triarray[j] );
  }
 
  /* Free memory */
  for ( j=0; j<length; j++ )
    if ( triarray[j] )
      freeTriangleMod( triarray[j] );

  system( "pause" );
}

Comments: