Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/guava/src/leon/src/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 1.1.2025 mit Größe 26 kB image not shown  

Quelle  cjrndper.c   Sprache: C

 
/* File cjrndper.c.  Main program for cjrndper command, which may be used
   to conjugate a given point set, permutation, permutation group, partition,
   design, or code by one of the following: (1) a random permutation from the
   symmetric group, (2) a random permutation from a specified permutation group,
   or (3) a specified permutation.  The syntax of the command is:

      cjrndper <options> <objectType> <ObjectName> <conjObjectName> <permName>

   where the meaning of the parameters is as follows:

      <objectType>:     "group", "perm", "set", "partition", "design",
                         "matrix", or "code"
      <objectName>:     The point set or permutation to be conjugated.  The name
                        must include the suffix.
      <conjObjectName>: The name (excluding suffix) of the new object created by
                        conjugating <fullObjectName> by a random element of
                        <groupName>.  May be the same of <fullObjectName>.
      <permName>:       (optional) Set to the conjugating permutation chosen at
                         random from group <groupName>.  If omitted, the
                         conjugating permutation is not saved.

   The valid options are follows:
      -g:<groupName>  The name of the permutation group from which the
                      conjugating element is to be chosen.  If omitted, the
                      symmetric group is used.  In case of input from a Cayley
                      library, <groupName> is the name of the library block.
      -i              Write permutations in image format.
      -p:<permName>   The specific permutation to be used as the conjugating
                      element.
      -s:<integer>    Sets seed for random number generator to <integer>,
      -d:<integer>    Degree for point sets, permutations, or partitions.
      -b              Construct base and sgs for conjugated group. */



#include <stddef.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define MAIN

#include "group.h"
#include "groupio.h"

#include "code.h"
#include "copy.h"
#include "errmesg.h"
#include "field.h"
#include "matrix.h"
#include "new.h"
#include "permut.h"
#include "readdes.h"
#include "randgrp.h"
#include "readgrp.h"
#include "readpar.h"
#include "readper.h"
#include "readpts.h"
#include "storage.h"
#include "token.h"
#include "util.h"

GroupOptions options;

static void nameGenerators(
   PermGroup *const H,
   char genNamePrefix[]);

static void verifyOptions(void);
static void setToRandomMonomialPerm(
   Permutation *const perm,
   const Unsigned subDegree,
   const Field *const field);


int main(
   int argc,
   char *argv[])
{
   ObjectType objectType;
   char inputFileName[60] = "",
        inputLibraryName[MAX_NAME_LENGTH+1] = "",
        outputFileName[60] = "",
        outputLibraryName[MAX_NAME_LENGTH+1] = "",
        outputObjectName[MAX_NAME_LENGTH+1] = "",
        permGroupSpecifier[60] = "",
        permGroupFileName[60] = "",
        permGroupLibraryName[MAX_NAME_LENGTH+1] = "",
        permFileName[60] = "",
        permLibraryName[MAX_NAME_LENGTH+1] = "",
        originalInputName[MAX_NAME_LENGTH+1],
        prefix[60] = "",
        suffix[MAX_NAME_LENGTH] = "";
   Unsigned i, j, k, degree, temp, optionCountPlus1, nRows, nCols, m, lambda, 
            mu, tau, fSize;
   unsigned long seed;
   PermGroup *G, *H, *HConjugated;
   PointSet *Lambda;
   Permutation *s, *t, *conjugatingPerm, *gen, *genConj;
   Partition *partn;
   Matrix_01 *matrix, *matrixConjugated;
   Code *C, *CConjugated;
   char comment[1024];
   BOOLEAN baseSgsFlag = FALSE, imageFormatFlag = FALSE, cjperFlag = FALSE,
           monomialFlag = FALSE;
   UnsignedS *newCellNumber;

   /* If there are no options (except possibly -perm), provide usage
      information and exit. */

   if ( argc == 1 ) {
      printf( "\nUsage: cjrndper [options] type object conjugateObject [conjugatingPerm]");
      printf( "\n (type = group, perm, set, partition, design, matrix, or code)\n");
      return 0;
   }
   else if ( argc == 2 && strcmp(argv[1],"-perm") == 0 ) {
      printf( "\nUsage: cjrndper [options] type object conjugateObject conjugatingPerm");
      printf( "\n (type = group, perm, set, partition, design, matrix, or code)\n");
      return 0;
   }

   /* Count the number of options. */
   for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 &&
              argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
      ;

   /* Translate options to lower case. */
   for ( i = 1 ; i < optionCountPlus1 ; ++i ) {
      for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
#ifdef EBCDIC
         argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
                        argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
                        argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
                        (argv[i][j] + 'a' - 'A') : argv[i][j];
#else
         argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z') ?
                      (argv[i][j] + 'a' - 'A') : argv[i][j];
#endif
   }

   if ( strcmp(argv[1],"-perm") ==  0 )
      i = 2;
   else
      i = 1;

   /* Check for limits option.  If present in position i (i as above) give
      limits and return. */

   if ( strcmp(argv[i], "-l") == 0 || strcmp(argv[i], "-L") == 0 ) {
      showLimits();
      return 0;
   }

   /* Check for verify option.  If present in position i (i as above) perform
      verify (Note verifyOptions terminates program). */

   if ( strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "-V") == 0 ) 
      verifyOptions();

   /* Check for exactly 3 or 4 parameters following options. */
      if ( argc - optionCountPlus1 != 3 && argc - optionCountPlus1 != 4 ) {
         printf( "\n\nError: Exactly 3 or 4 non-option parameters are "
                 "required.\n");
         exit(ERROR_RETURN_CODE);
      }

   /* Process options. */
   options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
   strcpy( options.outputFileMode, "w");
   seed = 47;
   degree = 0;
   options.genNamePrefix[0] = '\0';
   for ( i = 1 ; i < optionCountPlus1 ; ++i )
      if ( strcmp(argv[i],"-a") == 0 )
         strcpy( options.outputFileMode, "a");
      else if ( strncmp(argv[i],"-d:",3) == 0 ) {
         degree = strtol( argv[i]+3, NULL, 0);
      }
      else if ( strncmp(argv[i],"-s:",3) == 0 ) {
         errno = 0;
         seed = strtol( argv[i]+3, NULL, 0);
         if ( errno )
            ERROR1s( "main (cjrndper command)""Invalid option ", argv[i], ".")
      }
      else if ( strncmp(argv[i],"-g:",3) == 0 )
         strcpy( permGroupSpecifier, argv[i]+3);
      else if ( strcmp(argv[i],"-i") == 0 )
         imageFormatFlag = TRUE;
      else if ( strcmp(argv[i],"-mm") == 0 )
         monomialFlag = TRUE;
      else if ( strncmp( argv[i], "-mb:", 4) == 0 ) {
         errno = 0;
         options.maxBaseSize = (Unsigned) strtol(argv[i]+4,NULL,0);
         if ( errno )
            ERROR( "main (cent)""Invalid syntax for -mb option")
      }
      else if ( strncmp( argv[i], "-mw:", 4) == 0 ) {
         errno = 0;
         options.maxWordLength = (Unsigned) strtol(argv[i]+4,NULL,0);
         if ( errno )
            ERROR( "main (cent)""Invalid syntax for -mw option")
      }
      else if ( strncmp(argv[i],"-n:",3) == 0 )
         strcpy( outputObjectName, argv[i]+3);
      else if ( strcmp(argv[i],"-perm") == 0 )
         cjperFlag = TRUE;
      else if ( strncmp( argv[i], "-gn:", 4) == 0 )
         if ( strlen( argv[i]+4) <= 8 )
            strcpy( options.genNamePrefix, argv[i]+4);
         else
            ERROR( "main (orblist)""Invalid value for -gn option")
      else if ( strncmp( argv[i], "-p:", 3) == 0 ) {
         strcpy( prefix, argv[i]+3);
      }
      else if ( strncmp( argv[i], "-t:", 3) == 0 ) {
         strcpy( suffix, argv[i]+3);
      }
      else if ( strcmp( argv[i], "-b" ) == 0 )
         baseSgsFlag = TRUE;
      else if ( strcmp( argv[i], "-overwrite") == 0 )
         strcpy( options.outputFileMode, "w");
      else
         ERROR1s( "main (cjrndper command)""Invalid option ", argv[i], ".")
   if ( cjperFlag && permGroupSpecifier[0] )
         ERROR( "main (cjrndper command)",
                 "-g and -p are conflicting options.")

   /* Compute maximum degree and word length. */
   options.maxWordLength = 200 + 5 * options.maxBaseSize;
   options.maxDegree = MAX_INT - 2 - options.maxBaseSize;

   objectType =
      strcmp( lowerCase(argv[optionCountPlus1]), "group") == 0 ? PERM_GROUP :
      strcmp( lowerCase(argv[optionCountPlus1]), "perm") == 0 ? PERMUTATION :
      strcmp( lowerCase(argv[optionCountPlus1]), "set") == 0 ? POINT_SET :
      strcmp( lowerCase(argv[optionCountPlus1]), "partition") == 0 ? PARTITION :
      strcmp( lowerCase(argv[optionCountPlus1]), "design") == 0 ? DESIGN :
      strcmp( lowerCase(argv[optionCountPlus1]), "matrix") == 0 ? MATRIX_01 :
      strcmp( lowerCase(argv[optionCountPlus1]), "code") == 0 ? BINARY_CODE :
                                                    INVALID_OBJECT;
   if ( objectType == INVALID_OBJECT )
      ERROR( "main (chrndper command)",
             "File type for object to be conjugated is invalid.")
   if ( degree == 0 && (objectType == PERMUTATION || objectType == POINT_SET ||
                        objectType == PARTITION)  )
      ERROR( "main (cjrndper command)""Degree must be specified.")

   /* Compute file names. */
   parseLibraryName( argv[optionCountPlus1+1], prefix, suffix, inputFileName,
                     inputLibraryName);
   parseLibraryName( argv[optionCountPlus1+2], """", outputFileName,
                     outputLibraryName);
   if ( optionCountPlus1+3 < argc )
      parseLibraryName( argv[optionCountPlus1+3], """", permFileName,
                        permLibraryName);
   else if ( cjperFlag )
      ERROR( "main (cjrndper command)""Conjugating permutation not specified.")
   if ( permGroupSpecifier[0] )
      parseLibraryName( permGroupSpecifier, prefix, suffix, permGroupFileName,
                        permGroupLibraryName);

   /* Set output object name, if not specified by -n option. */
   if ( !outputObjectName[0] )
      strcpy( outputObjectName, outputLibraryName);

   /* Read in the object to be conjugated. */
   switch( objectType ) {
      case PERM_GROUP:
         if ( baseSgsFlag ) {
            H = readPermGroup( inputFileName, inputLibraryName, 0, "Generate");
           initializeSeed( seed);
         }
         else
            H = readPermGroup( inputFileName, inputLibraryName, 0, "");
         degree = H->degree;
         break;
      case POINT_SET:
         Lambda = readPointSet( inputFileName, inputLibraryName, degree);
         break;
      case PERMUTATION:
         s = readPermutation( inputFileName, inputLibraryName, degree, TRUE);
         degree = s->degree;
         break;
      case PARTITION:
         partn = readPartition( inputFileName, inputLibraryName, degree);
         degree = partn->degree;
         break;
      case DESIGN:
      case MATRIX_01:
         if ( objectType == DESIGN )
            matrix = readDesign( inputFileName, inputLibraryName, 0, 0);
         else
            matrix = read01Matrix( inputFileName, inputLibraryName, FALSE,
                                   FALSE, 0, 0, 0);
         nRows = matrix->numberOfRows;
         nCols = matrix->numberOfCols;
         if ( monomialFlag ) {
            matrix->field = buildField( matrix->setSize);
            degree = (matrix->setSize - 1) * (nRows + nCols);
         }
         else
            degree = nRows + nCols;
         initializeStorageManager( degree);
         break;
      case BINARY_CODE:
         C = readCode( inputFileName, inputLibraryName, FALSE, 0, 0, 0);
         if ( C->fieldSize > 2 ) {
            C->field = buildField( C->fieldSize);
            degree = (C->fieldSize - 1) * C->length;
         }
         else
            degree = C->length;
         initializeStorageManager( degree);
         break;
      case INVALID_OBJECT:
         ERROR("main (cjrndper command)""invalid object")
         break;
   }

   /* Initialize random number generator. */
   initializeSeed( seed);

   /* Read in the group, if provided and check its degree.  Then generate
      either a random permutation in the group, or a random permutation from
      the symmetric group. */

   if ( cjperFlag )
      conjugatingPerm = readPermutation( permFileName,
                              permLibraryName, degree, TRUE);
   else if ( permGroupFileName[0] ) {
      G = readPermGroup( permGroupFileName, permGroupLibraryName, degree,
                         "Generate");
      initializeSeed( seed);
      conjugatingPerm = randGroupPerm( G, 1);
   }
   else {
      conjugatingPerm = newIdentityPerm( degree);
      if ( objectType != DESIGN && objectType != MATRIX_01 ) 
         if ( objectType != BINARY_CODE || C->fieldSize == 2 )
            for ( i = 1 ; i < degree ; ++i ) {
               j = randInteger( i, degree);
               EXCHANGE( conjugatingPerm->image[i], conjugatingPerm->image[j], temp);
            }
         else
            setToRandomMonomialPerm( conjugatingPerm, degree, C->field);
      else 
         if ( !monomialFlag ) {
            for ( i = 1 ; i < nRows ; ++i ) {
               j = randInteger( i, nRows);
               EXCHANGE( conjugatingPerm->image[i], conjugatingPerm->image[j], temp);
            }
            for ( i = nRows+1 ; i < degree ; ++i ) {
               j = randInteger( i, degree);
               EXCHANGE( conjugatingPerm->image[i], conjugatingPerm->image[j], temp);
            }
         }
         else
            setToRandomMonomialPerm( conjugatingPerm, nRows*(matrix->setSize-1), 
                                     matrix->field);
      conjugatingPerm->invImage = NULL;
      adjoinInvImage( conjugatingPerm);
   }

   /* Conjugate the object, write out conjugated object, and close its file. */
   switch ( objectType ) {
      case POINT_SET:
         strcpy( originalInputName, Lambda->name);
         for ( i = 1 ; i <= Lambda->size ; ++i )
            Lambda->pointList[i] =
                  conjugatingPerm->image[Lambda->pointList[i]];
         if ( cjperFlag )
            sprintf( comment, "%s conjugated by %s.", Lambda->name,
                                                      conjugatingPerm->name);
         else if ( permGroupFileName[0] )
            sprintf( comment, "%s conjugated by a random permutation "
                              "from group %s.", Lambda->name, G->name);
         else
            sprintf( comment, "%s conjugated by a random permutation.",
                              Lambda->name);
         strcpy( Lambda->name, outputObjectName);
         writePointSet( outputFileName, outputLibraryName, comment, Lambda);
         break;
      case PARTITION:
         /* Temporarily we use the invPointList field for another purpose.
            It will be restored below. */

         strcpy( originalInputName, partn->name);
         newCellNumber = partn->invPointList;
         for ( i = 1 ; i <= degree ; ++i )
            newCellNumber[conjugatingPerm->image[partn->pointList[i]]] =
               partn->cellNumber[partn->pointList[i]];
         for ( i = 1 ; i <= degree ; ++i )
            partn->cellNumber[i] = newCellNumber[i];
         for ( i = 1 ; i <= degree ; ++i )
            partn->pointList[i] = conjugatingPerm->image[partn->pointList[i]];
         for ( i = 1 ; i <= degree ; ++i )
            partn->invPointList[partn->pointList[i]] = i;
         if ( cjperFlag )
            sprintf( comment, "%s conjugated by %s.", partn->name,
                                                      conjugatingPerm->name);
         else if ( permGroupFileName[0] )
            sprintf( comment, "%s conjugated by a random permutation "
                              "from group %s.", partn->name, G->name);
         else
            sprintf( comment, "%s conjugated by a random permutation.",
                              partn->name);
         strcpy( partn->name, outputObjectName);
         writePartition( outputFileName, outputLibraryName, comment, partn);
         break;
      case PERMUTATION:
         strcpy( originalInputName, s->name);
         t = newUndefinedPerm( degree);
         t->degree = degree;
         for ( i = 1 ; i <= degree ; ++i )
            t->image[conjugatingPerm->image[i]] =
                 conjugatingPerm->image[s->image[i]];
         if ( cjperFlag )
            sprintf( comment, "%s conjugated by %s.", s->name,
                                                      conjugatingPerm->name);
         else if ( permGroupFileName[0] )
            sprintf( comment, "%s conjugated by a random permutation "
                              "from group %s.", s->name, G->name);
         else
            sprintf( comment, "%s conjugated by a random permutation.",
                              s->name);
         strcpy( t->name, outputObjectName);
         if ( imageFormatFlag )
            writePermutation( outputFileName, outputLibraryName, t, "image",
                              comment);
         else
            writePermutation( outputFileName, outputLibraryName, t, "",
                              comment);
         break;
      case PERM_GROUP:
         strcpy( originalInputName, H->name);
         HConjugated = copyOfPermGroup( H);
         for ( gen = H->generator , genConj = HConjugated->generator ;
               gen ; gen = gen->next , genConj = genConj->next )
            for ( i = 1 ; i <= degree ; ++i )
               genConj->image[conjugatingPerm->image[i]] =
                    conjugatingPerm->image[gen->image[i]];
         if ( H->base )
            for ( i = 1 ; i <= H->baseSize ; ++i )
               HConjugated->base[i] = conjugatingPerm->image[H->base[i]];
         if ( cjperFlag )
            sprintf( comment, "%s conjugated by %s.", H->name,
                                                      conjugatingPerm->name);
         else if ( permGroupFileName[0] )
            sprintf( comment, "%s conjugated by a random permutation "
                              "from group %s.", H->name, G->name);
         else
            sprintf( comment, "%s conjugated by a random permutation.",
                              H->name);
         strcpy( HConjugated->name, outputObjectName);
         HConjugated->printFormat = imageFormatFlag ? imageFormat : cycleFormat;
         nameGenerators( HConjugated, options.genNamePrefix);
         writePermGroup( outputFileName, outputLibraryName, HConjugated, comment);
         break;
      case DESIGN:
      case MATRIX_01:
         strcpy( originalInputName, matrix->name);
         matrixConjugated = newZeroMatrix( matrix->setSize, nRows, nCols);
         if ( !monomialFlag )
            for ( i = 1 ; i <= nRows ; ++i )
               for ( j = 1 ; j <= nCols ; ++j )
                  matrixConjugated->entry[conjugatingPerm->image[i]]
                                      [conjugatingPerm->image[j+nRows]-nRows] =
                                                         matrix->entry[i][j];
         else {
            fSize = matrix->setSize - 1;
            for ( i = 1 ; i <= nRows ; ++i ) {
               /* Find k, lambda such that 1*i is mapped to lambda*k. */
               k = (conjugatingPerm->image[fSize*(i-1)+1]-1) / fSize + 1;
               lambda = (conjugatingPerm->image[fSize*(i-1)+1]-1) % fSize + 1;
               for ( j = 1 ; j <= nCols ; ++j ) {
                  /* Find m, mu such that 1*j is mapped to mu*m. */
                  m = (conjugatingPerm->image[fSize*(nRows+j-1)+1]-1) / fSize + 1 - 
                                                            nRows;
                  mu = (conjugatingPerm->image[fSize*(nRows+j-1)+1]-1) % fSize + 1;
                  tau = matrix->field->prod[lambda][mu];
                  matrixConjugated->entry[k][m] =
                         matrix->field->prod[tau][matrix->entry[i][j]];
               }
            }
         }
         if ( cjperFlag )
            sprintf( comment, "%s conjugated by %s.", matrix->name,
                                                      conjugatingPerm->name);
         else if ( permGroupFileName[0] )
            sprintf( comment, "%s conjugated by a random permutation "
                              "from group %s.", matrix->name, G->name);
         else if ( (objectType == MATRIX_01 && monomialFlag) )
            sprintf( comment, "%s conjugated by a random monomial permutation.",
                              matrix->name);
         else
            sprintf( comment, "%s conjugated by a random permutation.",
                              matrix->name);
         strcpy( matrixConjugated->name, outputObjectName);
         if ( objectType == DESIGN )
            writeDesign( outputFileName, outputLibraryName, matrixConjugated,
                         comment);
         else
            write01Matrix( outputFileName, outputLibraryName, matrixConjugated,
                         FALSE, comment);
         break;
      case BINARY_CODE:
         strcpy( originalInputName, C->name);
         CConjugated = (Code *) newZeroMatrix( C->fieldSize, C->dimension, C->length);
         if ( C->fieldSize == 2 )
            for ( j = 1 ; j <= C->length ; ++j )
               for ( i = 1 ; i <= C->dimension ; ++i )
                  CConjugated->basis[i][conjugatingPerm->image[j]] =
                                                          C->basis[i][j];
         else {
            fSize = C->fieldSize - 1;
            for ( j = 1 ; j <= C->length ; ++j ) {
               /* Find m, mu such that 1*j is mapped to mu*m. */
               m = (conjugatingPerm->image[fSize*(j-1)+1]-1) / fSize + 1;
               mu = (conjugatingPerm->image[fSize*(j-1)+1]-1) % fSize + 1;
               for ( i = 1 ; i <= C->dimension ; ++i )
                  CConjugated->basis[i][m] =
                                     C->field->prod[mu][C->basis[i][j]];
            }
         }
         if ( cjperFlag )
            sprintf( comment, "%s conjugated by %s.", C->name,
                                                      conjugatingPerm->name);
         else if ( permGroupFileName[0] )
            sprintf( comment, "%s conjugated by a random permutation "
                              "from group %s.", C->name, G->name);
         else if ( C->fieldSize > 2 )
            sprintf( comment, "%s conjugated by a random monomial permutation.",
                              C->name);
         else
            sprintf( comment, "%s conjugated by a random permutation.",
                              C->name);
         strcpy( CConjugated->name, outputObjectName);
         writeCode( outputFileName, outputLibraryName, CConjugated, comment);
         break;
      case INVALID_OBJECT:
         ERROR("main (cjrndper command)""invalid object")
         break;
   }

   /* Write out the conjugating permutation, if requested, and close its file. */
   if ( !cjperFlag && permFileName[0] ) {
      if ( (objectType == MATRIX_01 && monomialFlag) ||
           (objectType == BINARY_CODE && C->fieldSize > 2) )
         sprintf( comment, "A monomial permutation mapping %s to %s."
                  originalInputName, outputObjectName);
      else if ( objectType != PERM_GROUP && 
                objectType != PERMUTATION )
         sprintf( comment, "A permutation mapping %s to %s."
                  originalInputName, outputObjectName);
      else
         sprintf( comment, "A permutation conjugating %s to %s."
                  originalInputName, outputObjectName);
      if ( imageFormatFlag )
         writePermutation( permFileName, permLibraryName, conjugatingPerm,
                           "image", comment);
      else
         writePermutation( permFileName, permLibraryName, conjugatingPerm,
                           "", comment);
   }

   /* Terminate. */
   return 0;
}


/*--------------------------- setToRandomMonomialPerm ---------------------*/

static void setToRandomMonomialPerm(
   Permutation *const perm,               /* Must start as identity. */
   const Unsigned subDegree,
   const Field *const field)
{
   Unsigned i, j, k, delta, lambda, temp, m, mu;
   const Unsigned fSize = field->size - 1;
   const Unsigned degree = perm->degree;

   for ( i = 1 ; i <= degree ; i += fSize ) {
      j = randInteger( i, (i <= subDegree) ? subDegree : degree);
      delta = 0;
      for ( k = 0 ; k < fSize ; ++k ) {
         EXCHANGE( perm->image[i+k], 
                   perm->image[j+k-delta], temp);
         if ( (j+k) % fSize == 0 )
            delta = fSize;
      }
      /* Find mu, m such that perm->image[i] = mu*m. 
         Then perm->image[lambda*i] = (lambda*mu)*m. */

      m = (perm->image[i] - 1 ) / fSize + 1;
      mu = (perm->image[i] - 1 ) % fSize + 1;
      for ( lambda = 2 ; lambda < field->size ; ++lambda )
         perm->image[i+lambda-1] = 
                           fSize*(m-1) + field->prod[lambda][mu];
   }
}


/*-------------------------- nameGenerators ------------------------------*/

static void nameGenerators(
   PermGroup *const H,
   char genNamePrefix[])
{
   Unsigned i;
   Permutation *gen;

   if ( genNamePrefix[0] == '\0' ) {
      strncpy( genNamePrefix, H->name, 4);
      genNamePrefix[4] = '\0';
   }
   for ( gen = H->generator , i = 1 ; gen ; gen = gen->next , ++i ) {
      strcpy( gen->name, genNamePrefix);
      sprintf( gen->name + strlen(gen->name), "%02d", i);
   }
}


/*-------------------------- verifyOptions -------------------------------*/

static void verifyOptions(void)
{
   CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
                               MAX_PRIME_FACTORS,
                               MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
                               MAX_EXTRA,  XLARGE, SGND, NFLT};
   extern void xaddsge( CompileOptions *cOpts);
   extern void xbitman( CompileOptions *cOpts);
   extern void xcopy  ( CompileOptions *cOpts);
   extern void xcstbor( CompileOptions *cOpts);
   extern void xerrmes( CompileOptions *cOpts);
   extern void xessent( CompileOptions *cOpts);
   extern void xfactor( CompileOptions *cOpts);
   extern void xfield ( CompileOptions *cOpts);
   extern void xnew   ( CompileOptions *cOpts);
   extern void xoldcop( CompileOptions *cOpts);
   extern void xpermgr( CompileOptions *cOpts);
   extern void xpermut( CompileOptions *cOpts);
   extern void xprimes( CompileOptions *cOpts);
   extern void xrandgr( CompileOptions *cOpts);
   extern void xrandsc( CompileOptions *cOpts);
   extern void xreadde( CompileOptions *cOpts);
   extern void xreadgr( CompileOptions *cOpts);
   extern void xreadpa( CompileOptions *cOpts);
   extern void xreadpe( CompileOptions *cOpts);
   extern void xreadpt( CompileOptions *cOpts);
   extern void xstorag( CompileOptions *cOpts);
   extern void xtoken ( CompileOptions *cOpts);
   extern void xutil  ( CompileOptions *cOpts);

   xaddsge( &mainOpts);
   xbitman( &mainOpts);
   xcopy  ( &mainOpts);
   xcstbor( &mainOpts);
   xerrmes( &mainOpts);
   xessent( &mainOpts);
   xfactor( &mainOpts);
   xfield ( &mainOpts);
   xnew   ( &mainOpts);
   xoldcop( &mainOpts);
   xpermgr( &mainOpts);
   xpermut( &mainOpts);
   xprimes( &mainOpts);
   xrandgr( &mainOpts);
   xrandsc( &mainOpts);
   xreadde( &mainOpts);
   xreadgr( &mainOpts);
   xreadpa( &mainOpts);
   xreadpe( &mainOpts);
   xreadpt( &mainOpts);
   xstorag( &mainOpts);
   xtoken ( &mainOpts);
   xutil  ( &mainOpts);
}

Messung V0.5
C=96 H=99 G=97

¤ Dauer der Verarbeitung: 0.13 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.