Skinner Reg Data                   ½)i½)i                RegDSknr            h      x     ·     /* This code compares dissymetrized and symmetrized solution. It is
   copyright (c) 1995 Alexander R. Pruss.  All rights reserved. */
#include <stdio.h>

#define MAXN 64
#define MAXT 64

int p[MAXN];
double pvert[MAXT];
int N;
int T;

void setp(int *widths, int nc)
{
  int j,k;
  int pos;
  for(pos=j=0; j<nc; j++)
    {
      p[pos]=1;
      for(k=0; k<widths[j]; k++)
	p[pos+k+1]=0;
      pos+=widths[j]+1;
    }
}

double run(void)
{
  double pr[MAXN];
  double prnext[MAXN];
  double pline[MAXN];
  double s;
  int i;
  int t;
  for(i=0; i<N; i++) pr[i]=1./MAXN;
  for(t=0; t<T; t++)
  {
    for(i=0; i<N; i++)
      if(p[i])
	pline[i]=1-pvert[t];
      else
	pline[i]=1;
    for(i=0; i<N; i++)
    {
      if(i!=0 && i!=N-1)
	prnext[i]=.5*(pline[i-1]*pr[i-1]+pline[i+1]*pr[i+1]);
      else if(i==0)
	prnext[0]=.5*(pline[N-1]*pr[N-1]+pline[1]*pr[1]);
      else if(i==N-1)
	prnext[N-1]=.5*(pline[N-2]*pr[N-2]+pline[0]*pr[0]);
    }
    for(i=0; i<N; i++) pr[i]=prnext[i];
  }
  s=0;
  for(i=0; i<N; i++) s+=pr[i];
  return s;
}


int main(int argc, char **argv)
{
  static int widths[MAXN];
  char word[1024];
  int i;
  int avg_width;
  int n_cols;
  int s;
  FILE *f;
  if(argc!=2)
  {
    fprintf(stderr,"Usage: diss filename\n");
    exit(7);
  }
  f=fopen(argv[1],"r");
  fscanf(f,"%d",&n_cols);
  fscanf(f,"%d",&avg_width);
  N=n_cols*(avg_width+1);
  s=0;
  for(i=0; i<n_cols-1; i++)
  {
    fscanf(f,"%d",widths+i);
    s+=widths[i];
  }
  if(s>n_cols*avg_width)
  {
    fprintf(stderr,"Columns too wide!\n");
    exit(8);
  }
  widths[n_cols-1]=n_cols*avg_width-1;
  T=0;
  while(fscanf(f,"%s",word), *word!='*')
  {
    if(T>MAXT)
    {
      fprintf(stderr,"Too many rows!\n");
      exit(9);
    }
    sscanf(word,"%lg",pvert+T);
    T++;
  }
  fclose(f);
  setp(widths,n_cols);
  printf("Dissymmetrized: %g\n",run());
  for(i=0; i<n_cols; i++) widths[i]=avg_width;
  setp(widths,n_cols);
  printf("Symmetric: %g\n",run());
  return 0;
}
MyyqcnJUhudFZBiCRcmdUhmPyrhJYqOkWLHOVsLLKZjlykMEoeMNQMUPppZKmMOSkinner registration data.  Contains software that is copyright (c) 1995 Alexander R. Pruss.  All rights reserved.
