#include #define MAXN 100 #define SRANDOM srand(seed) #define RandMax 2147483647 #define RANDOM(n) (rand()/(RandMax/(n)+1)) int fnmax=10, n=100, seed=40; newmat(int mat[MAXN][MAXN], int n) { int i = n, j; while(i--) { j = n; while(j--) mat[i][j] = j; j = n; while(--j) { int k = RANDOM(j+1), v = mat[i][j]; mat[i][j] = mat[i][k]; mat[i][k] = v; } } } invmat(int mat[MAXN][MAXN], int n) { int i = n, j; while(i--) { int row[MAXN]; j = n; while(j--) row[mat[i][j]] = j; j = n; while(j--) mat[i][j] = row[j]; } } wrmat(int mat[MAXN][MAXN], int n, FILE *f) { int i, j; fprintf(f, "[\n"); for(i = 0 ; i < n ; i++) { fprintf(f, "[\n"); for(j = 0 ; j < n ; j++) fprintf(f, "%d\n", mat[i][j]); fprintf(f, "]\n"); } fprintf(f, "]\n"); } fnnew(char *fn) { int mat[MAXN][MAXN]; FILE *f; if ((f = fopen(fn, "w")) == NULL) { fprintf(stderr, "Cannot write file %s\n", fn); exit(1); } fprintf(f, "%d\n", n); newmat(mat, n); wrmat(mat, n, f); newmat(mat, n); wrmat(mat, n, f); invmat(mat, n); wrmat(mat, n, f); (void) fclose(f); } char * fnname(int i) { static char buf[1024]; (void) sprintf(buf, "data%d.ps", i); return(buf); } main(int argc, char **argv) { int fnno; if (argc > 1) fnmax = atoi(argv[1]); if (argc > 2) n = atoi(argv[2]); if (argc > 3) seed = atoi(argv[3]); SRANDOM; for(fnno = 0; fnno < fnmax ; fnno++) fnnew(fnname(fnno)); }