/* Sample use: echo 3 1 4 1 5 | graph1 | xp & d is a partially filled array. dlen[0] is the number of elements used in d. Notice that the changes to dlen[0] inside doubles_read() are seen in main(). */ #include void doubles_read(double d[10000],int dlen[1]) { double f; dlen[0] = 0; while (dlen[0] < 10000) { if (scanf("%lf",&f) < 1) return; d[dlen[0]++] = f; } } double doubles_min(double d[],int dlen[1]) { int i; double result; if (dlen[0] < 1) return 0; result = d[0]; for (i = 1;i < dlen[0];++i) if (d[i] < result) result = d[i]; return result; } double doubles_max(double d[],int dlen[1]) { int i; double result; if (dlen[0] < 1) return 0; result = d[0]; for (i = 1;i < dlen[0];++i) if (d[i] > result) result = d[i]; return result; } int main(void) { double d[10000]; int dlen[1]; double xmin; double xmax; double ymin; double ymax; int i; int x; int y; doubles_read(d,dlen); if (dlen[0] < 1) return 0; /* no numbers to graph */ xmin = 0; xmax = dlen[0] - 1; if (xmin == xmax) { xmin -= 1; xmax += 1; } ymin = doubles_min(d,dlen); ymax = doubles_max(d,dlen); if (ymin == ymax) { ymin -= 1; ymax += 1; } for (i = 0;i < dlen[0];++i) { x = 10 + 300 * (i - xmin) / (xmax - xmin); y = 220 - 200 * (d[i] - ymin) / (ymax - ymin); printf("1 %d %d\n",x,y); } fflush(stdout); sleep(10); return 0; }