⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utility.c

📁 这是一个遗传算法的c的源代码。在上传的压缩包中
💻 C
字号:
/*----------------------------------------------------------------------------*/
/* utility.c - utility routines, contains copyright,  repchar, skip           */
/*----------------------------------------------------------------------------*/

#include "external.h"

void copyright()
{
    void repchar(), skip();
    int iskip;
    int ll = 59;

    iskip = (LINELENGTH - ll)/2;
    skip(outfp,1);
    repchar(outfp," ",iskip); repchar(outfp,"-",ll); skip(outfp,1); 
    repchar(outfp," ",iskip);  
    fprintf(outfp,"|        SGA-C (v1.1) - A Simple Genetic Algorithm         |\n"); 
    repchar(outfp," ",iskip);  
    fprintf(outfp,"|     (c) David E. Goldberg 1986, All Rights Reserved      |\n"); 
    repchar(outfp," ",iskip);  
    fprintf(outfp,"|        C version by Robert E. Smith, U. of Alabama       |\n"); 
    repchar(outfp," ",iskip);  
    fprintf(outfp,"|    v1.1 modifications by Jeff Earickson, Boeing Company  |\n"); 
    repchar(outfp," ",iskip); repchar(outfp,"-",ll); skip(outfp,2); 
}


void repchar (outfp,ch,repcount)
/* Repeatedly write a character to stdout */
FILE *outfp;
char *ch;
int repcount;
{
    int j;

    for (j = 1; j <= repcount; j++) fprintf(outfp,"%s", ch);
}


void skip(outfp,skipcount)
/* Skip skipcount lines */
FILE *outfp;
int skipcount;
{
    int j;

    for (j = 1; j <= skipcount; j++) fprintf(outfp,"\n");
}


int ithruj2int(i,j,from)
/* interpret bits i thru j of a individual as an integer      */ 
/* j MUST BE greater than or equal to i AND j-i < UINTSIZE-1  */
/* from is a chromosome, represented as an array of unsigneds */
int i,j;
unsigned *from;
{
    unsigned mask, temp;
    int bound_flag;
    int iisin, jisin;
    int i1, j1, out;
  
    if(j < i)
    {
        fprintf(stderr,"Error in ithruj2int: j < i\n");
        exit(-1);
    }
    if(j-i+1 > UINTSIZE)
    {
        fprintf(stderr,"Error in ithruj2int: j-i+1 > UINTSIZE\n");
        exit(-1);
    }
  
    iisin = i/UINTSIZE;
    jisin = j/UINTSIZE;

    i1 = i - (iisin*UINTSIZE);
    j1 = j - (jisin*UINTSIZE);

	if(i1 == 0)
 	{
  		iisin = iisin-1;
  		i1 = i - (iisin*UINTSIZE);
 	};

	if(j1 == 0)
 	{ 
  		jisin = jisin-1;
  		j1 = j - (jisin*UINTSIZE);
 	};

    /* check if bits fall across a word boundary */    
    if(iisin == jisin)
        bound_flag = 0;
    else
        bound_flag = 1;

    if(bound_flag == 0)
    {
        mask = 1;
        mask = (mask<<(j1-i1+1))-1;
        mask = mask<<(i1-1);
        out = (from[iisin]&mask)>>(i1-1);
        return(out);
    }
    else
    {
        mask = 1;
        mask = (mask<<j1)-1;
        temp = from[jisin]&mask;
        mask = 1;
        mask = (mask<<(UINTSIZE-i1+1))-1;
        mask = mask<<(i1-1);
        out = ((from[iisin]&mask)>>(i1-1)) | (temp<<(UINTSIZE-i1+1));
        return(out);
    }
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -