Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  crp1.c   Sprache: C

 
#include "defs.h"

extern char  mult, inf0[], inf1[], inf2[], outf[], outft[], inf3[];
extern short csp[], *cpsp[], **cdpsp[], ***coeff[];
extern int   space, cspace;
extern short sp[], **mat[], *psp[], **imcos[], **cpco[], lorb[], wdl, ptrsp,
    cdptrsp, mb;
short *cst, **cpst, ***cdpst, **svptr, *cp, *rel;
short *spst, **pspst, **pptr, **cpptr, npt, nb, nph, nph2, npg, npg2, rno,
    orno, coh_index, *invg;

void seeknln(FILE * ip)
{
  while (getc(ip) != '\n')
    ;
}

/* This program differs from most other permutation programs in that perms are
   all stored in the single array sp. Schreier vectors are stored in the short
   array csp. This assumes that there are at most 127 perms, which will
   probably always be the case. The first half of the program (crprog1)
   involves relatively little short space, so it is assumed that there is
   enough In the first half, coefficients as words in H generated by the
   relators of G are computed using the output of conrun.
*/

int crprog1(void)
{
  short *pc, *qc, ex, neg;
  int    x;
  FILE * ip, *op;
  short  i, j, k, l, m, n, cl, rl, *p, ocl, im, pt, pt1, pn, ipt;
  if ((ip = fopen(inf2, "r")) == 0) {
    fprintf(stderr, "Cannot open %s.\n", inf2);
    return (-1);
  }
  fscanf(ip, "%hd%hd%hd%hd", &npt, &nph, &nb, &k);
  if (nb >= mb) {
    fprintf(stderr, "nb too big. Increase MB.\n");
    return (-1);
  }
  if (k <= 2) {
    fprintf(stderr, "inf2 has illegal format.\n");
    return (-1);
  }
  seeknln(ip);
  seeknln(ip);
  for (i = 1; i <= nb; i++)
    fscanf(ip, "%hd", lorb + i);
  pptr = psp - 1;
  pspst = psp + nph;
  svptr = cpsp - 1;
  cpst = cpsp + nb;
  invg = sp;
  nph2 = 2 * nph;
  spst = sp + nph2;
  for (i = 1; i <= nph; i++) {
    pptr[i] = spst + (i - 1) * npt - 1;
    p = pptr[i];
    for (j = 1; j <= npt; j++) {
      fscanf(ip, "%hd", &k);
      p[k] = j;
    }
    invg[2 * i - 2] = 2 * i - 1;
    invg[2 * i - 1] = 2 * i - 2;
    seeknln(ip);
  }
  spst += (npt * nph);
  for (i = 1; i <= nb; i++) {
    svptr[i] = csp + (i - 1) * npt - 1;
    pc = svptr[i];
    for (j = 1; j <= npt; j++) {
      fscanf(ip, "%hd", &k);
      pc[j] = k > 0 ? (k + 1) / 2 : k;
    }
  }
  cp = csp + nb * npt;
  rel = cp + wdl;
  fclose(ip);
  /* It is assumed that there is enough space so far. */

  strcpy(inf1, inf0);
  strcat(inf1, ".cp");
  if ((ip = fopen(inf1, "r")) == 0) {
    fprintf(stderr, "Cannot open %s.\n", inf1);
    return (-1);
  }
  fscanf(ip, "%hd%hd", &coh_index, &npg);
  npg2 = 2 * npg - 1;
  x = (nb + 2) * npg * coh_index;
  if (spst + x - sp > space) {
    fprintf(stderr, "Not enough space. Increase SPACE.\n");
    return (-1);
  }
  if (pspst + (nb + 2) * npg - psp > ptrsp) {
    fprintf(stderr, "Not enough ptrsp. Increase PTRSP.\n");
    return (-1);
  }
  cpptr = pspst;
  pspst += 2 * npg;
  for (i = 0; i <= npg2; i++) {
    cpptr[i] = spst - 1;
    spst += coh_index;
  }
  for (i = 1; i <= nb; i++) {
    cpco[i] = pspst - 1;
    pspst += npg;
    for (j = 1; j <= npg; j++) {
      cpco[i][j] = spst - 1;
      spst += coh_index;
    }
  }
  for (i = 1; i <= npg; i++) {
    j = 2 * i - 2;
    k = j + 1;
    for (l = 1; l <= coh_index; l++) {
      for (m = 1; m <= nb; m++)
        fscanf(ip, "%hd", cpco[m][i] + l);
      fscanf(ip, "%hd", &m);
      cpptr[j][l] = m;
      cpptr[k][m] = l;
    }
  }
  fclose(ip);

  strcpy(inf1, inf0);
  strcat(inf1, ".rel");
  if ((ip = fopen(inf1, "r")) == 0) {
    fprintf(stderr, "Cannot open %s.\n", inf1);
    return (-1);
  }
  fscanf(ip, "%hd%hd", &k, &rno);
  seeknln(ip);
  op = fopen(outft, "w");
  /* Now we have read everything in, and the computation can start */
  orno = 0;
  for (i = 1; i <= rno; i++) {
    fscanf(ip, "%hd", &rl);
    printf("Scanning rel no %d.\n", i);
    for (j = 1; j <= rl; j++) {
      fscanf(ip, "%hd", &k);
      rel[j] = k;
    }
    for (j = 1; j <= coh_index; j++) {
      pt = j;
      cl = 0;
      for (k = rl; k >= 1; k--) {
        l = rel[k];
        im = cpptr[l][pt];
        if (l % 2 == 1) {
          neg = 1;
          pt1 = im;
          m = (l + 1) / 2;
        }
        else {
          neg = 0;
          pt1 = pt;
          m = (l + 2) / 2;
        }
        ocl = cl;
        for (n = 1; n <= nb; n++) {
          ipt = cpco[n][m][pt1];
          pn = svptr[n][ipt];
          while (pn != -1) {
            cl++;
            cp[cl] = 2 * (pn - 1);
            ipt = pptr[pn][ipt];
            pn = svptr[n][ipt];
          }
        }
        if (neg) {
          pc = cp + ocl + 1;
          qc = cp + cl;
          while (pc <= qc) {
            if (pc == qc)
              (*pc)++;
            else {
              ex = *pc;
              *pc = *qc + 1;
              *qc = ex + 1;
            }
            pc++;
            qc--;
          }
        }
        pt = im;
      }
      if (pt != j) {
        fprintf(stderr,
                "Relation number %d is not satisfied by the permutations.\n",
                i);
        return (-1);
      }
      fprintf(op, "%4d", cl);
      for (k = cl; k >= 1; k--)
        fprintf(op, " %2d", cp[k]);
      fprintf(op, "\n");
    } /* j loop */
    if (i == rno && orno == 0) {
      orno = rno;
      if (fscanf(ip, "%hd", &j) > 0)
        rno += j;
    }

  } /* i loop */
  printf("All relations scanned.\n");
  fclose(op);
  fclose(ip);
  return (0);
}

Messung V0.5
C=90 H=94 G=91

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge