ナップサック問題の最適解を求めるプログラムについて質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
なる

ナップサック問題の最適解を求めるプログラムについて質問です。

#1

投稿記事 by なる » 13年前

ナップサック問題の係数を乱数を用いて生成し、すべての解を列挙することで最適解を求めるプログラムを求めなさい。という課題です。
あと少しの所まできたのですが、間違っている箇所、抜けている箇所を訂正してください><

◎Enumeration.cppの内容

// VC++Enumeration.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "pseudo03c.h"


/*============ MinMaxArray =========================*/

typedef struct DATA * PtrDATA;

struct DATA{
PtrINT x;
INT N;
INT pMin;
INT pMax;
};

int Enumerate( INT i, PtrDATA D);
void Rand1DArrayInt( Ptr1DINT x, INT n);
void SolveKP( PtrDATA D);
void Output1DArrayInt( Ptr1DINT x, INT n);
//================================================
int main(void)
{
PtrDATA D;
INT N;

New( PtrDATA, D);
InputInt( N); D->N= N;
New1DArrayInt( D->x, N);

SolveKP( D);
//Rand1DArrayInt( D->x, N);
//Output1DArrayInt( D->x, N);

Free1DArray( D->x);
Free( D);
getchar(); getchar();
return 0;
}//================================================
void SolveKP( PtrDATA D)
{
INT n;


Enumerate( 1, D);
}//------------------------------------------------
int Enumerate( INT i, PtrDATA D)
{

IF( i == D->N)
D->x[ i]= 0;
Output1DArrayInt( D->x, i);
D->x[ i]= 1;
Output1DArrayInt( D->x, i);
return -1;
ENDIF

D->x= 0;
Enumerate( i+1, D);
D->x= 1;
Enumerate( i+1, D);
return 0;
}//------------------------------------------------
void Output1DArrayInt( Ptr1DINT x, INT n)
{
long k;

for(k= 1; k<=n; k++){
printf("% d", x[k]);
}
printf("\n");
}//------------------------------------------------
void Rand1DArrayInt( Ptr1DINT x, INT n)
{
INT k;

srand( 1);
for(k= 1; k<= n; k++){
x[k]= rand();
}
}//------------------------------------------------



◎pseudo03c.hの内容

/*==========================================*/
/*== Header file ==*/
/*== for pseudo code like Modula-2 ==*/
/*== Last updated 11/24/1997 ==*/
/*==========================================*/
#if !defined (__pseudo__)
#define __pseudo__
/*-- Ex01 --*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <string.h>
#include <float.h>
#include <limits.h>
#define FUNCTION
#define FUNC
#define Main() int main(void)
#define VARIABLE {
#define VAR {
#define BEGIN
#define ENDFUNCTION }
#define ENDFUNC }
#define END }
#define WriteString(str)\
printf("%s",str)
#define WriteS(str) printf("%s",str)
#define WriteLine(str)\
printf("%s\n",str)
#define WriteLn printf("\n")
/*-- Ex02 --*/
typedef double REAL; /*8 byte real*/
#define Real(eq) (double)(eq)
#define ReadReal(var)\
{ while(scanf("%lf",&(var))<1){\
(void)getchar();\
printf("\nEnter again! ");\
}\
}
#define ReadR(var)\
{ while(scanf("%lf",&(var))<1){\
(void)getchar();\
}\
}

#define ScanReal(var) scanf("%lf",&(var))
#define WriteReal(eq) printf("% g",(double)(eq))
#define WriteR(eq) printf("% g",(double)(eq))
#define DebugReal(eq) printf(#eq"=% g\n",(double)(eq))
#define DebugR(eq) printf(#eq"=% g\n",(double)(eq))
#define OutputReal(eq) printf(#eq"=% g\n",(double)(eq))
#define OutputR(eq) printf(#eq"=% g\n",(double)(eq))
/*-- Ex03 --*/
typedef long int INT; /*4 byte integer*/
typedef long int INTEGER;
#define Int(eq) (long)(eq)
#define LOOP while(1){
#define EXITLOOP break
#define EXIT break
#define ENDLOOP }
#define ReadInt(var)\
{ while(scanf("%ld",&(var))<1){\
(void)getchar();\
printf("\nEnter again! ");\
}\
}
#define ReadI(var)\
{ while(scanf("%ld",&(var))<1){\
(void)getchar();\
}\
}
#define ScanInt(var) scanf("%ld", &(var))
#define WriteInt(eq) printf("% ld",(long)(eq))
#define WriteI(eq) printf("% ld",(long)(eq))
#define DebugInt(eq) printf(#eq"=% ld\n",(long)(eq))
#define DebugI(eq) printf(#eq"=% ld\n",(long)(eq))
#define OutputInt(eq) printf(#eq"=% ld\n",(long)(eq))
#define OutputI(eq) printf(#eq"=% ld\n",(long)(eq))
#define MOD % /*modulo*/
/*-- Ex04 --*/
#define IF( cond) if( cond ){
#define ENDIF }
#define EQL == /*equal*/
#define NEQ != /*not equal*/
#define WriteStringFormat(str, width, n)\
printf("%*.*s", width, n, str)
#define WriteStringF(str, width, n)\
printf("%*.*s", width, n, str)
#define WriteRealFormat(eq, width, n)\
printf("%*.*f",width,n,(double)(eq))
#define WriteRealF(eq, width, n)\
printf("%*.*f",width,n,(double)(eq))
#define WriteIntFormat(eq, width, n)\
printf("%*.*d",width,n,(long)(eq))
#define WriteIntF(eq, width, n)\
printf("%*.*d",width,n,(long)(eq))
/*-- Ex05 --*/
typedef long int* PointerToINT;
typedef long int* PtrINT;
#define FOR( n, fst, lst)\
for(n=(fst);n<=(lst);n++){
#define ENDFOR }
#define AddressOf( var) &(var)
#define ADR( var) &(var)
#define DebugArrayInt(ary,fst,lst)\
{ INT i;\
printf(#ary"[%d..%d]=",\
(long)(fst),(long)(lst));\
for(i=fst;i<=lst;i++){\
printf("% d", ary);\
}\
printf("\n");\
}
#define OutputArrayInt(ary,fst,lst)\
DebugArrayInt(ary,fst,lst)
/*-- Ex06 --*/
typedef double* PointerToREAL;
typedef double* PtrREAL;
#define InputReal(var)\
{printf(#var"? ");ReadR(var);}
#define ObjectOf( var) *(var)
#define OBJ( var) *(var)
#define SWAP(type, xx, yy)\
{type d_=xx;xx=yy;yy=d_;}
/*-- EX07 --*/
#define DebugArrayReal(ary,fst,lst)\
{ int i;\
printf(#ary"[%d..%d]=",\
(long)(fst),(long)(lst));\
for(i=fst;i<=lst;i++){\
printf("% g", ary);\
}\
printf("\n");\
}
#define OutputArrayReal(ary,fst,lst)\
DebugArrayReal(ary,fst,lst)
/*-- Ex08 --*/
#define ELSEIF(cond) }else if(cond){
#define ELSE }else{
#define AND &&
#define OR ||
#define MLOOP LOOP
#define EXITMLOOP(nn)\
goto _EndMultiLoop##nn
#define ENDMLOOP(nn)\
}_EndMultiLoop##nn:;
/*-- Ex09 --*/
#define SWITCH( c ) switch( c ){case -9876:
#define CASE break; case
#define OTHER break; default
#define ENDSWITCH }
/*-- Ex10 --*/
#define WHILE(cond) while(cond){
#define ENDWHILE }
#define REPEAT do {
#define UNTIL(cond) }while(!(cond));
#define FORINC( n,fst,lst,step)\
for(n=(fst);n<=(lst);n+= (step)){
#define FORDEC( n,fst,lst,step)\
for(n=(fst);n>=(lst);n-= (step)){
#define INC(v) (v)++ /*increase 1*/
#define DEC(v) (v)-- /*decrease 1*/
/*-- Ex11 --*/
typedef void VOID;
#define TYPE
#define InputInt(var)\
{printf(#var"? "); ReadI(var);}
#define RETURN return
/*-- Ex12 --*/
#define StaticINT static INT
#define StcINT static INT
#define StaticREAL static REAL
#define StcREAL static REAL
/*-- Ex13 --*/
typedef char CHAR;
#define StaticCHAR static CHAR
#define StcCHAR static CHAR
#define ReadString(str) scanf("%s",str)
#define ReadS(str) scanf("%s",str)
#define Read1S(str) scanf("%1s",str)
#define DebugString(str) \
printf(#str"= \"%s\"\n", str)
#define OutputString(str) DebugString(str)
/*-- Ex14 --*/
#define POINTER *
#define PTR *
typedef CHAR* PtrCHAR;
#define STRUCT typedef struct{
#define ENDSTRUCT(name) }name;
/*-- Ex15 --*/
#define SwapPtr(p1,p2) \
{ void* _tempSwapP=(p1);p1=(p2);p2= _tempSwapP;}

/*-- Ex16 --*/
#define WriteChar(var) printf("%c",(CHAR)var)
#define WriteC(var) WriteChar(var)
#define DebugChar(var)\
printf(#var"=%c\n",(CHAR)var)
/*-- Ex17 --*/
#define ReadHex(var) scanf("%x",&(var))
#define WriteHex(var) printf("%x",(int)var)
#define WriteH(var) WriteHex(var)
#define DebugHex(var)\
printf(#var"=%x\n",(int)var)
/*-- Ex18 --*/
typedef FILE* PointerToFILE;
typedef FILE* PtrFILE;

#define OpenFileRead(fname,fp)\
{ if(( fp =fopen(fname,"r"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
getchar();getchar();getchar();exit(1);\
}\
}
#define OpenFileWrite(fname,fp)\
{ if(( fp =fopen(fname,"w"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
getchar();getchar();getchar();exit(1);\
}\
}
#define OpenFileAppend(fname,fp)\
{ if(( fp =fopen(fname,"a"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
getchar();getchar();getchar();exit(1);\
}\
}
#define FileReadInt(var,fp)\
{ while(fscanf(fp,"%ld",&(var))<1)\
(void)fgetc(fp);\
}
#define FileReadI(var,fp) FileReadInt(var,fp)
#define FileReadReal(var,fp)\
{ while(fscanf(fp,"%lf",&(var))<1)\
(void)fgetc(fp);\
}
#define FileReadR(var,fp) FileReadReal(var,fp)
#define FileRead1S(pvar,fp) fscanf(fp,"%1s", pvar)
#define FileWriteInt(var,fp)\
fprintf(fp,"% ld",(var))
#define FileWriteI(var,fp) FileWriteInt(var,fp)
#define FileWriteReal(var,fp)\
fprintf(fp,"% g",(var))
#define FileWriteR(var,fp) FileWriteReal(var,fp)
#define FileWriteString(var,fp)\
fprintf(fp,"%s",(var))
#define FileWriteS(var,fp) FileWriteString(var,fp)
#define FileWriteLn(fp) fprintf(fp,"\n")
#define FileWriteLine(str, fp) fprintf(fp,"%s\n", str)
#define FileWriteChar(cha, fp) fprintf(fp,"%c", cha)
#define CloseFile(fp) fclose(fp)

/*-- Ex19 --*/
#define OpenBinaryFileRead(fname,fp)\
{ if(( fp =fopen(fname,"rb"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
getchar();getchar();getchar();exit(1);\
}\
}
#define OpenBinaryFileWrite(fname,fp)\
{ if(( fp =fopen(fname,"wb"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
getchar();getchar();getchar();exit(1);\
}\
}
#define OpenBinaryFileAppend(fname,fp)\
{ if(( fp =fopen(fname,"ab"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
exit(1);\
}\
}
/*-- Ex20 --*/
#define MemAlloc( type, nelem, ptr)\
{ ptr= (type *)malloc(\
(size_t)(sizeof(type)*nelem));\
if(!ptr){\
printf("out of memory!\n");\
getchar();getchar();getchar();\
exit(1);\
}\
}
#define NewAlloc( type, nelem, ptr )\
{ ptr=(type *)calloc( (size_t)(nelem),\
(size_t)sizeof( type));\
if(!ptr){\
printf("out of memory!!\n");\
getchar();getchar();getchar();\
exit(1);\
}\
}
#define Free( ptr) free( ptr)
/*-- Ex21 --*/
#define SwapReal( v1, v2) \
{ double tempSwapR_= (v1); v1= (v2); v2= tempSwapR_;}
#define SwapReal4( v1, v2) \
{ float tempSwapR4_= (v1); v1= (v2); v2= tempSwapR4_;}
#define SwapR4( v1, v2) SwapReal4( v1, v2)
#define SwapInt( v1, v2) \
{ long tempSwapI_= (v1); v1= (v2); v2= tempSwapI_;}
#define SwapI( v1, v2) SwapInt( v1, v2)
#define SwapInt2( v1, v2) \
{ short tempSwapI2_= (v1); v1= (v2); v2= tempSwapI2_;}
#define SwapI2( v1, v2) SwapInt2( v1, v2)

typedef short int INT2;
typedef short int* PointerToINT2;
typedef short int* PtrINT2;
#define StaticINT2 static INT2
#define StcINT2 static INT2
#define Int2(eq) (INT2)(eq)
#define ReadInt2(var)\
{ while(scanf("%hd",&(var))<1)\
(void)getchar();\
}
#define ReadI2(var) ReadInt2(var)
#define WriteInt2(eq) WriteInt(eq)
#define WriteI2(eq) WriteInt(eq)
#define DebugInt2(eq) DebugInt(eq)
#define DebugI2(eq) DebugInt(eq)

typedef float REAL4;
typedef float* PointerToREAL4;
typedef float* PtrREAL4;
#define StaticREAL4 static REAL4
#define StcREAL4 static REAL4
#define Real4(eq) (REAL4)(eq)
#define ReadReal4(var)\
{ while(scanf("%f",&(var))<1)\
(void)getchar();\
}
#define ReadR4(var) ReadReal4(var)
#define WriteReal4(eq) WriteReal(eq)
#define WriteR4(eq) WriteReal(eq)
#define DebugReal4(eq) DebugReal(eq)
#define DebugR4(eq) DebugReal(eq)

/*-- other --*/
#define InputString(var)\
{printf(#var"? "); ReadString(var);}
#define New( TYPE, ptr )\
{ ptr=(TYPE)calloc( (size_t)1,\
(size_t)sizeof( *(ptr)));\
if(!ptr){\
printf("New: allocation error!\n");\
getchar();getchar();getchar();exit(1);\
}\
}

typedef long* Ptr1DINT;
typedef long** Ptr2DINT;
typedef long*** Ptr3DINT;
typedef double* Ptr1DREAL;
typedef double** Ptr2DREAL;
typedef double*** Ptr3DREAL;



#define NewArrayErr( ptr, num, size1, str)\
{ void * ppp; (ptr)= (void*) calloc( (size_t)(1),\
(size_t)size1*(num)); ppp= ptr;\
if((ptr) == NULL){ printf(str);\
}\
}

#define New1DArray( aa, nn )\
{ char *bb;\
long size1= sizeof( *(aa));\
NewArrayErr( bb, (nn+1)+2, size1, "New1DArray: allocation error!\n\n");\
aa= (void*)&bb[2*size1];\
aa[-2]= nn;\
aa[-1]= 0;\
}

#define New2DArray( aa, mm, nn)\
{ char **bb, *cc;\
long ii, size1;\
size1= sizeof( *(aa));\
NewArrayErr(bb, (mm+1)+4, size1, "New2DArray: allocation error!\n\n");\
size1= sizeof( **(aa));\
NewArrayErr(cc, (mm+1)*(nn+1), size1, "New2DArray: allocation error!\n\n");\
aa= (void*)&bb[4];\
for( ii=0; ii<=mm;ii++){\
bb[ii+4]= &cc[ii*(nn+1)*size1];\
}\
aa[-4]= (void*)(mm); aa[-3]= (void*)0;\
aa[-2]= (void*)(nn); aa[-1]= (void*)0;\
}

#define New3DArray( aa, ll, mm, nn)\
{ char ***bb, **cc, *dd;\
long jj, ii, size1;\
size1= sizeof( *(aa));\
NewArrayErr(bb, (ll+1)+6, size1, "New3DArray: allocation error!\n");\
size1= sizeof( **(aa));\
NewArrayErr(cc, (ll+1)*(mm+1), size1, "New3DArray: allocation error!\n");\
size1= sizeof( ***(aa));\
NewArrayErr(dd, (ll+1)*(mm+1)*(nn+1), size1, "New3DArray: allocation error!\n");\
aa= (void*)&bb[6];\
for( jj=0; jj<=ll; jj++){\
bb[jj+6]= &cc[jj*(mm+1)];\
for( ii=0; ii<=mm;ii++){\
cc[jj*(mm+1)+ii]= &dd[(jj*(mm+1)+ii)*(nn+1)*size1];\
}\
}\
aa[-6]= (void*)(ll); aa[-5]= (void*)0;\
aa[-4]= (void*)(mm); aa[-3]= (void*)0;\
aa[-2]= (void*)(nn); aa[-1]= (void*)0;\
}

#define Free1DArray(aa) free( &aa[-2]);\

#define Free2DArray(aa)\
{ free( aa[0]);\
free( &aa[-4]);\
}
#define Free2DAsymArray(aa)\
{ free( aa[0]);\
free( &aa[-4]);\
}
#define Free3DArray(cc)\
{ free( cc[0][0]);\
free( cc[0]);\
free( &cc[-6]);\
}

#define Free3DAsymArray(cc)\
{ free( cc[0][0]);\
free( cc[0]);\
free( &cc[-6]);\
}

#define New1DArrayInt( aa, nn)\
{ long *bb;\
NewAlloc(long, (nn+1)+2, bb);\
bb[0]= nn;\
bb[1]= 0;\
aa= &bb[2];\
}

#define New2DArrayInt( aa, mm, nn)\
{ long ii, **bb, *cc;\
NewAlloc(long *, mm+1+4, bb);\
NewAlloc(long, (mm+1)*(nn+1), cc);\
bb[0]= (long*)(mm); bb[1]= (long*)0;\
bb[2]= (long*)(nn); bb[3]= (long*)0;\
aa= &bb[4];\
for( ii=0; ii<=mm;ii++){\
bb[ii+4]= &cc[ii*(nn+1)];\
}\
}


#define New2DAsymArrayInt( aa, mm, na)\
{ long _ii, _nByte, **_bb, *_cc;\
NewAlloc(long *, (mm)+2+4, _bb);\
_nByte= 0;\
for( _ii= 0; _ii <= (mm); _ii++){\
_nByte= _nByte+ na[_ii]+2;\
}\
NewAlloc(long, _nByte, _cc);\
_bb[0]= (long*)(mm); _bb[1]= (long*)0;\
_bb[2]= (long*)(_nByte-2*mm); _bb[3]= (long*)0;\
aa= (long**)&_bb[4];_nByte= 0;_bb[4]= &_cc[0];\
for( _ii= 0; _ii <= (mm); _ii++){\
_nByte= _nByte+ na[_ii]+2;\
_bb[_ii+5]= &_cc[_nByte];\
}\
}

#define New3DAsymArrayInt( aa, ll, mm, na)\
{ long _jj, _ii, _kSum, _nItem, ***_bb, **_cc, *_dd;\
NewAlloc(long **, (ll)+2+6, _bb);\
NewAlloc(long *, ((ll)+1)*((mm)+1)+5, _cc);\
_nItem= 0;\
for( _ii= 0; _ii <= (mm); _ii++){\
_nItem= _nItem+ na[_ii];\
}\
_kSum= _nItem;\
NewAlloc(long, ((ll)+1)*(_kSum+1)+2, _dd);\
_bb[0]= (long**)(ll); _bb[1]= (long**)0;\
_bb[2]= (long**)(mm); _bb[3]= (long**)0;\
_bb[4]= (long**)_kSum; _bb[5]= (long**)0;\
aa= &_bb[6];_nItem= -1;\
for( _jj=0; _jj<=ll; _jj++){\
_bb[_jj+6]= &_cc[(_jj)*((mm)+1)];_nItem++;\
for( _ii=0; _ii<=(mm);_ii++){\
_cc[(_jj)*((mm)+1)+_ii]= &_dd[_nItem];\
_nItem= _nItem+ na[_ii];\
}\
}\
}\

#define New3DArrayInt( aa, ll, mm, nn)\
{ long jj, ii, ***bb, **cc, *dd;\
NewAlloc(long **, ll+1+6, bb);\
NewAlloc(long *, (ll+1)*(mm+1), cc);\
NewAlloc(long, (ll+1)*(mm+1)*(nn+1), dd);\
bb[0]= (long**)(ll); bb[1]= (long**)0;\
bb[2]= (long**)(mm); bb[3]= (long**)0;\
bb[4]= (long**)(nn); bb[5]= (long**)0;\
aa= &bb[6];\
for( jj=0; jj<=ll; jj++){\
bb[jj+6]= &cc[jj*(mm+1)];\
for( ii=0; ii<=mm;ii++){\
cc[jj*(mm+1)+ii]= &dd[(jj*(mm+1)+ii)*(nn+1)];\
}\
}\
}

#define New1DArrayReal( aa, nn)\
{ double *bb;\
NewAlloc(double, (nn+1)+2, bb);\
bb[0]= nn;\
bb[1]= 0;\
aa= &bb[2];\
}

#define New2DArrayReal( aa, mm, nn)\
{ long ii;\
double **bb, *cc;\
NewAlloc(double *, mm+1+4, bb);\
NewAlloc(double, (mm+1)*(nn+1), cc);\
bb[0]= (double*)mm; bb[1]= (double*)0;\
bb[2]= (double*)nn; bb[3]= (double*)0;\
aa= &bb[4];\
for( ii=0; ii<=mm;ii++){\
bb[ii+4]= &cc[ii*(nn+1)];\
}\
}

#define New3DArrayReal( aa, ll, mm, nn)\
{ long jj, ii;\
double ***bb, **cc, *dd;\
NewAlloc(double **, ll+1+6, bb);\
NewAlloc(double *, (ll+1)*(mm+1), cc);\
NewAlloc(double, (ll+1)*(mm+1)*(nn+1), dd);\
bb[0]= (double*)ll; bb[1]= (double*)0;\
bb[2]= (double*)mm; bb[3]= (double*)0;\
bb[4]= (double*)nn; bb[5]= (double*)0;\
aa= &bb[6];\
for( jj=0; jj<=ll; jj++){\
bb[jj+6]= &cc[jj*(mm+1)];\
for( ii=0; ii<=mm;ii++){\
cc[jj*(mm+1)+ii]= &dd[(jj*(mm+1)+ii)*(nn+1)];\
}\
}\
}
#define New2DAsymArrayReal( aa, mm, na)\
{ long _ii, _nByte;\
double **_bb, *_cc;\
NewAlloc(double *, (mm)+2+4, _bb);\
_nByte= 0;\
for( _ii= 0; _ii <= (mm); _ii++){\
_nByte= _nByte+ na[_ii]+2;\
}\
NewAlloc(double, _nByte, _cc);\
_bb[0]= (double*)(mm); _bb[1]= (double*)0;\
_bb[2]= (double*)(_nByte-2*mm); _bb[3]= (double*)0;\
aa= (double**)&_bb[4];_nByte= 0;_bb[4]= &_cc[0];\
for( _ii= 0; _ii <= (mm); _ii++){\
_nByte= _nByte+ na[_ii]+2;\
_bb[_ii+5]= &_cc[_nByte];\
}\
}

#define New3DAsymArrayReal( aa, ll, mm, na)\
{ long _jj, _ii, _kSum, _nItem;\
double ***_bb, **_cc, *_dd;\
NewAlloc(double **, (ll)+2+6, _bb);\
NewAlloc(double *, ((ll)+1)*((mm)+1)+5, _cc);\
_nItem= 0;\
for( _ii= 0; _ii <= (mm); _ii++){\
_nItem= _nItem+ na[_ii];\
}\
_kSum= _nItem;\
NewAlloc(double, ((ll)+1)*(_kSum+1)+2, _dd);\
_bb[0]= (double**)(ll); _bb[1]= (double**)0;\
_bb[2]= (double**)(mm); _bb[3]= (double**)0;\
_bb[4]= (double**)(_kSum); _bb[5]= (double**)0;\
aa= &_bb[6];_nItem= -1;\
for( _jj=0; _jj<=ll; _jj++){\
_bb[_jj+6]= &_cc[(_jj)*((mm)+1)];_nItem++;\
for( _ii=0; _ii<=(mm);_ii++){\
_cc[(_jj)*((mm)+1)+_ii]= &_dd[_nItem];\
_nItem= _nItem+ na[_ii];\
}\
}\
}\


#define chk1DAry(aa, nn, num)\
{ if(nn<0 || nn>(int)aa[-2]){\
printf("No. %d ArrayCheckError!\n", num);\
getchar(); getchar(); exit(1);\
}}

#define chk2DAry(aa, mm, nn, num)\
{ if(mm<0 || mm>(int)aa[-4] || nn<0 || nn>(int)aa[-2]){\
printf("No. %d ArrayCheckError!\n", num);\
getchar(); getchar(); exit(1);\
}}

#define chk3DAry(aa, ll, mm, nn, num)\
{ if(ll<0 || ll>(int)aa[-6] ||\
mm<0 || mm>(int)aa[-4] ||\
nn<0 || nn>(int)aa[-2]){\
printf("No. %d ArrayCheckError!\n", num);\
getchar(); getchar(); exit(1);\
}}


#define OpenFile(fname, mode, fp)\
{ if(( fp =fopen(fname,mode))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
exit(1);\
}\
}
#define FileRead( ary, size, nitems, fp)\
{ INT _ii;\
if((_ii= fread(ary,size,nitems, fp)) < nitems){\
WriteI(_ii); WriteS(" items\n");\
printf("Read error in FileRead\(\)\n");\
}\
}
#define FileWrite( ary,size, nitems, fp)\
{ INT _ii;\
if((_ii= fwrite(ary,size,nitems, fp)) < nitems){\
WriteI(_ii); WriteS(" items\n");\
printf("Write error in FileWrite\(\)\n");\
}\
}
#define FileTell( pos, fp)\
{ if( (pos=ftell(fp))< 0)\
printf("Error in FileTell()!\n");\
}

#define EWriteC(VAR) fprintf(stderr, "%c", VAR)
#define EWriteS(pVAR) fprintf(stderr, "%s", pVAR)
#define EWriteI(VAR) fprintf(stderr, " %d", VAR)
#define EWriteR(VAR) fprintf(stderr, " %g", VAR)
#define EWriteRealF(VAR,w,n) fprintf(stderr, " %*.*lf",w,n,VAR)
#define EWriteL(VAR) fprintf(stderr, " %ld", VAR)
#define EWriteD(VAR) fprintf(stderr, " %17.10e", VAR)
#define EWriteLn fprintf(stderr, "\n")

#define LOCAL static
#define MAX(v1,v2) ((v1)>(v2)? (v1):(v2))
#define MIN(v1,v2) ((v1)<(v2)? (v1):(v2))

#define EXITFOR break
#define EXITWHILE break
#define EXITREPEAT break
#define THEN
#define NOT ~

#define IsOdd( var) (var%2)
typedef unsigned long int UINT;
typedef UINT* PtrUINT;
typedef unsigned short int UINT2;
typedef UINT2* PtrUINT2;

#define WriteUInt(eq) printf("% lu", (eq))
#define WriteUI(eq) WriteInt(eq)
#define MaxREAL DBL_MAX
#define MinREAL DBL_MIN
#define MaxINT LONG_MAX
#define MinINT LONG_MIN

/*-- Visual Basic like C -------21474836449-----------*/
#define EndMain }
#define Sub
#define EndSub }
#define If( cond) if( cond ){
#define ElseIf(cond) }else if(cond){
#define Else }else{
#define EndIf }
#define Loop while(1){
#define ExitLoop break
#define Exit break
#define EndLoop }
#define While(cond) while(cond){
#define ExitWhile break
#define EndWhile }
#define Repeat do {
#define ExitRepeat break
#define Until(cond) }while(!(cond));
#define For( n, fst, lst)\
for(n=(fst);n<=(lst);n++){
#define ForInc( n,fst,lst,step)\
for(n=(fst);n<=(lst);n+= (step)){
#define ForDec( n,fst,lst,step)\
for(n=(fst);n>=(lst);n-= (step)){
#define ExitFor break
#define EndFor }
#define Switch( c ) switch( c ){case -9876:
#define Case break; case
#define Other break; default
#define EndSwitch }
#define Adr( var) &(var)
#define Obj( var) *(var)
#define Inc(v) (v)++ /*increase 1*/
#define Dec(v) (v)-- /*decrease 1*/
#define MLoop while(1){
#define ExitMLoop(nn)\
goto _EndMultiLoop##nn
#define EndMLoop(nn)\
}_EndMultiLoop##nn:;
#define Type
#define Return return
#define Swap(type, xx, yy)\
{type d_=xx;xx=yy;yy=d_;}
/*-- END ----------------------------------*/
#endif



◎pseudo10.hの内容

/*==========================================*/
/*== Header file ==*/
/*== for pseudo code like Modula-2 ==*/
/*== Last updated 20/07/2008 ==*/
/*==========================================*/
#if !defined (__pseudo__)
#define __pseudo__
/*-- Ex01 --*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <string.h>
#include <float.h>
#include <limits.h>
#define FUNCTION
#define FUNC
#define Main() int main(void)
#define VARIABLE {
#define VAR {
#define BEGIN
#define ENDFUNCTION }
#define ENDFUNC }
#define END }
#define WriteString(str)\
printf("%s",str)
#define WriteS(str) printf("%s",str)
#define WriteLine(str)\
printf("%s\n",str)
#define WriteLn printf("\n")
/*-- Ex02 --*/
typedef double REAL; /*8 byte real*/
#define Real(eq) (double)(eq)
#define ReadReal(var)\
{ while(scanf("%lf",&(var))<1){\
(void)getchar();\
printf("\nEnter again! ");\
}\
}
#define ReadR(var)\
{ while(scanf("%lf",&(var))<1){\
(void)getchar();\
}\
}

#define ScanReal(var) scanf("%lf",&(var))
#define WriteReal(eq) printf("% g",(double)(eq))
#define WriteR(eq) printf("% g",(double)(eq))
#define DebugReal(eq) printf(#eq"=% g\n",(double)(eq))
#define DebugR(eq) printf(#eq"=% g\n",(double)(eq))
#define OutputReal(eq) printf(#eq"=% g\n",(double)(eq))
#define OutputR(eq) printf(#eq"=% g\n",(double)(eq))
/*-- Ex03 --*/
typedef long int INT; /*4 byte integer*/
typedef long int INTEGER;
#define Int(eq) (long)(eq)
#define LOOP while(1){
#define EXITLOOP break
#define EXIT break
#define ENDLOOP }
#define ReadInt(var)\
{ while(scanf("%ld",&(var))<1){\
(void)getchar();\
printf("\nEnter again! ");\
}\
}
#define ReadI(var)\
{ while(scanf("%ld",&(var))<1){\
(void)getchar();\
}\
}
#define ScanInt(var) scanf("%ld", &(var))
#define WriteInt(eq) printf("% ld",(long)(eq))
#define WriteI(eq) printf("% ld",(long)(eq))
#define DebugInt(eq) printf(#eq"=% ld\n",(long)(eq))
#define DebugI(eq) printf(#eq"=% ld\n",(long)(eq))
#define OutputInt(eq) printf(#eq"=% ld\n",(long)(eq))
#define OutputI(eq) printf(#eq"=% ld\n",(long)(eq))
#define MOD % /*modulo*/
/*-- Ex04 --*/
#define IF( cond) if( cond ){
#define ENDIF }
#define EQL == /*equal*/
#define NEQ != /*not equal*/
#define WriteStringFormat(str, width, n)\
printf("%*.*s", width, n, str)
#define WriteStringF(str, width, n)\
printf("%*.*s", width, n, str)
#define WriteRealFormat(eq, width, n)\
printf("%*.*g",width,n,(double)(eq))
#define WriteRealF(eq, width, n)\
printf("%*.*g",width,n,(double)(eq))
#define WriteRealFormatE(eq, width, n)\
printf("%*.*e",width,n,(double)(eq))
#define WriteRealFE(eq, width, n)\
printf("%*.*e",width,n,(double)(eq))
#define WriteIntFormat(eq, width, n)\
printf("%*.*d",width,n,(long)(eq))
#define WriteIntF(eq, width, n)\
printf("%*.*d",width,n,(long)(eq))
/*-- Ex05 --*/
typedef long int* PointerToINT;
typedef long int* PtrINT;
#define FOR( n, fst, lst)\
for(n=(fst);n<=(lst);n++){
#define ENDFOR }
#define AddressOf( var) &(var)
#define ADR( var) &(var)
#define DebugArrayInt(ary,fst,lst)\
{ INT i;\
printf(#ary"[%d..%d]=",\
(long)(fst),(long)(lst));\
for(i=fst;i<=lst;i++){\
printf("% d", ary);\
}\
printf("\n");\
}
#define OutputArrayInt(ary,fst,lst)\
DebugArrayInt(ary,fst,lst)
/*-- Ex06 --*/
typedef double* PointerToREAL;
typedef double* PtrREAL;
#define InputReal(var)\
{printf(#var"? ");ReadR(var);}
#define ObjectOf( var) *(var)
#define OBJ( var) *(var)
#define SWAP(type, xx, yy)\
{type d_=xx;xx=yy;yy=d_;}
/*-- EX07 --*/
#define DebugArrayReal(ary,fst,lst)\
{ int i;\
printf(#ary"[%d..%d]=",\
(long)(fst),(long)(lst));\
for(i=fst;i<=lst;i++){\
printf("% g", ary);\
}\
printf("\n");\
}
#define OutputArrayReal(ary,fst,lst)\
DebugArrayReal(ary,fst,lst)
/*-- Ex08 --*/
#define ELSEIF(cond) }else if(cond){
#define ELSE }else{
#define AND &&
#define OR ||
#define MLOOP LOOP
#define EXITMLOOP(nn)\
goto _EndMultiLoop##nn
#define ENDMLOOP(nn)\
}_EndMultiLoop##nn:;
/*-- Ex09 --*/
#define SWITCH( c ) switch( c ){case -9876:
#define CASE break; case
#define OTHER break; default
#define ENDSWITCH }
/*-- Ex10 --*/
#define WHILE(cond) while(cond){
#define ENDWHILE }
#define REPEAT do {
#define UNTIL(cond) }while(!(cond));
#define FORINC( n,fst,lst,step)\
for(n=(fst);n<=(lst);n+= (step)){
#define FORDEC( n,fst,lst,step)\
for(n=(fst);n>=(lst);n-= (step)){
#define INC(v) (v)++ /*increase 1*/
#define DEC(v) (v)-- /*decrease 1*/
/*-- Ex11 --*/
typedef void VOID;
#define TYPE
#define InputInt(var)\
{printf(#var"? "); ReadI(var);}
#define RETURN return
/*-- Ex12 --*/
#define StaticINT static INT
#define StcINT static INT
#define StaticREAL static REAL
#define StcREAL static REAL
/*-- Ex13 --*/
typedef char CHAR;
#define StaticCHAR static CHAR
#define StcCHAR static CHAR
#define ReadString(str) scanf("%s",str)
#define ReadS(str) scanf("%s",str)
#define Read1S(str) scanf("%1s",str)
#define DebugString(str) \
printf(#str"= \"%s\"\n", str)
#define OutputString(str) DebugString(str)
/*-- Ex14 --*/
#define POINTER *
#define PTR *
typedef CHAR* PtrCHAR;
#define STRUCT typedef struct{
#define ENDSTRUCT(name) }name;
/*-- Ex15 --*/
#define SwapPtr(p1,p2) \
{ void* _tempSwapP=(p1);p1=(p2);p2= _tempSwapP;}

/*-- Ex16 --*/
#define WriteChar(var) printf("%c",(CHAR)var)
#define WriteC(var) WriteChar(var)
#define DebugChar(var)\
printf(#var"=%c\n",(CHAR)var)
/*-- Ex17 --*/
#define ReadHex(var) scanf("%x",&(var))
#define WriteHex(var) printf("%x",(int)var)
#define WriteH(var) WriteHex(var)
#define DebugHex(var)\
printf(#var"=%x\n",(int)var)
/*-- Ex18 --*/
typedef FILE* PointerToFILE;
typedef FILE* PtrFILE;

#define OpenFileRead(fname,fp)\
{ if(( fp =fopen(fname,"r"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
getchar();getchar();getchar();exit(1);\
}\
}
#define OpenFileWrite(fname,fp)\
{ if(( fp =fopen(fname,"w"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
getchar();getchar();getchar();exit(1);\
}\
}
#define OpenFileAppend(fname,fp)\
{ if(( fp =fopen(fname,"a"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
getchar();getchar();getchar();exit(1);\
}\
}
#define FileReadInt(var,fp)\
{ while(fscanf(fp,"%ld",&(var))<1)\
(void)fgetc(fp);\
}
#define FileReadI(var,fp) FileReadInt(var,fp)
#define FileReadReal(var,fp)\
{ while(fscanf(fp,"%lf",&(var))<1)\
(void)fgetc(fp);\
}
#define FileReadR(var,fp) FileReadReal(var,fp)
#define FileRead1S(pvar,fp) fscanf(fp,"%1s", pvar)
#define FileReadString(pvar,fp) fscanf(fp,"%s", pvar)
#define FileWriteInt(var,fp)\
fprintf(fp,"% ld",(var))
#define FileWriteI(var,fp) FileWriteInt(var,fp)
#define FileWriteReal(var,fp)\
fprintf(fp,"% g",(var))
#define FileWriteR(var,fp) FileWriteReal(var,fp)
#define FileWriteString(var,fp)\
fprintf(fp,"%s",(var))
#define FileWriteS(var,fp) FileWriteString(var,fp)
#define FileWriteLn(fp) fprintf(fp,"\n")
#define FileWriteLine(str, fp) fprintf(fp,"%s\n", str)
#define FileWriteChar(cha, fp) fprintf(fp,"%c", cha)

#define FileWriteRealFormat(eq, width, n, fp)\
fprintf(fp, "%*.*f",width,n,(double)(eq))
#define FileWriteRealF(eq, width, n, fp)\
fprintf(fp, "%*.*f",width,n,(double)(eq))
#define FileWriteIntFormat(eq, width, n, fp)\
fprintf(fp, "%*.*d",width,n,(long)(eq))
#define FileWriteIntF(eq, width, n, fp)\
fprintf(fp, "%*.*d",width,n,(long)(eq))

#define CloseFile(fp) fclose(fp)

/*-- Ex19 --*/
#define OpenBinaryFileRead(fname,fp)\
{ if(( fp =fopen(fname,"rb"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
getchar();getchar();getchar();exit(1);\
}\
}
#define OpenBinaryFileWrite(fname,fp)\
{ if(( fp =fopen(fname,"wb"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
getchar();getchar();getchar();exit(1);\
}\
}
#define OpenBinaryFileAppend(fname,fp)\
{ if(( fp =fopen(fname,"ab"))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
exit(1);\
}\
}
/*-- Ex20 --*/
#define MemAlloc( type, nelem, ptr)\
{ ptr= (type*)malloc(\
(size_t)(sizeof(type)*(nelem+2)));\
if(!ptr){\
printf("out of memory!\n");\
getchar();getchar();getchar();\
exit(1);\
}\
}
#define NewAlloc( type, nelem, ptr )\
{ ptr=(type*)calloc( (size_t)((nelem+2)),\
(size_t)sizeof( type));\
if(!ptr){\
printf("out of memory!!\n");\
getchar();getchar();getchar();\
exit(1);\
}\
}
#define Free( ptr) free( ptr)
/*-- Ex21 --*/
#define SwapReal( v1, v2) \
{ double tempSwapR_= (v1); v1= (v2); v2= tempSwapR_;}
#define SwapReal4( v1, v2) \
{ float tempSwapR4_= (v1); v1= (v2); v2= tempSwapR4_;}
#define SwapR( v1, v2) SwapReal( v1, v2)
#define SwapR4( v1, v2) SwapReal4( v1, v2)
#define SwapInt( v1, v2) \
{ long tempSwapI_= (v1); v1= (v2); v2= tempSwapI_;}
#define SwapI( v1, v2) SwapInt( v1, v2)
#define SwapInt2( v1, v2) \
{ short tempSwapI2_= (v1); v1= (v2); v2= tempSwapI2_;}
#define SwapI2( v1, v2) SwapInt2( v1, v2)

typedef short int INT2;
typedef short int* PointerToINT2;
typedef short int* PtrINT2;
#define StaticINT2 static INT2
#define StcINT2 static INT2
#define Int2(eq) (INT2)(eq)
#define ReadInt2(var)\
{ while(scanf("%hd",&(var))<1)\
(void)getchar();\
}
#define ReadI2(var) ReadInt2(var)
#define WriteInt2(eq) WriteInt(eq)
#define WriteI2(eq) WriteInt(eq)
#define DebugInt2(eq) DebugInt(eq)
#define DebugI2(eq) DebugInt(eq)

typedef float REAL4;
typedef float* PointerToREAL4;
typedef float* PtrREAL4;
#define StaticREAL4 static REAL4
#define StcREAL4 static REAL4
#define Real4(eq) (REAL4)(eq)
#define ReadReal4(var)\
{ while(scanf("%f",&(var))<1)\
(void)getchar();\
}
#define ReadR4(var) ReadReal4(var)
#define WriteReal4(eq) WriteReal(eq)
#define WriteR4(eq) WriteReal(eq)
#define DebugReal4(eq) DebugReal(eq)
#define DebugR4(eq) DebugReal(eq)

/*-- other --*/
#define InputString(var)\
{printf(#var"? "); ReadString(var);}
#define New( TYPE, ptr )\
{ ptr=(TYPE)calloc( (size_t)1,\
(size_t)sizeof( *(ptr)));\
if(!ptr){\
printf("New: allocation error!\n");\
getchar();getchar();getchar();exit(1);\
}\
}

typedef long* Ptr1DINT;
typedef long** Ptr2DINT;
typedef long*** Ptr3DINT;
typedef double* Ptr1DREAL;
typedef double** Ptr2DREAL;
typedef double*** Ptr3DREAL;



#define NewArrayErr( ptr, num, size1, str)\
{ void * _ppp; (ptr)= (void*) calloc( (size_t)(1),\
(size_t)size1*((num+2))); _ppp= ptr;\
if((ptr) == NULL){ printf(str);\
}\
}

#define New1DArray( aa, nn )\
{ char *bb;\
long size1= sizeof( *(aa));\
NewArrayErr( bb, (nn+3)+3, size1, "New1DArray: allocation error!\n\n");\
aa= (void*)&bb[3*size1];\
aa[-2]= nn;\
aa[-1]= 0;\
}

#define New2DArray( aa, mm, nn)\
{ char **_bb, *_cc;\
long _ii, _size1;\
_size1= sizeof( *(aa));\
NewArrayErr(_bb, (mm+1)+4, _size1, "New2DArray: allocation error!\n\n");\
_size1= sizeof( **(aa));\
NewArrayErr(_cc, (mm+1)*(nn+3), _size1, "New2DArray: allocation error!\n\n");\
aa= (void*)&_bb[5*_size1];\
for( _ii=0; _ii<=mm;_ii++){\
_bb[_ii+4]= &_cc[_ii*(nn+3)*_size1];\
}\
aa[-4]= (void*)(mm); aa[-3]= (void*)0;\
aa[-2]= (void*)(nn); aa[-1]= (void*)0;\
}

#define New3DArray( aa, ll, mm, nn)\
{ char ***_bb, **_cc, *_dd;\
long _jj, _ii, _size1;\
_size1= sizeof( *(aa));\
NewArrayErr(_bb, (ll+1)+6, _size1, "New3DArray: allocation error!\n");\
_size1= sizeof( **(aa));\
NewArrayErr(_cc, (ll+1)*(mm+1), _size1, "New3DArray: allocation error!\n");\
_size1= sizeof( ***(aa));\
NewArrayErr(_dd, (ll+1)*(mm+1)*(nn+3), _size1, "New3DArray: allocation error!\n");\
aa= (void***)&_bb[7*_size1];\
for( _jj=0; _jj<=ll; _jj++){\
_bb[_jj+6]= (void**)&_cc[_jj*(mm+1)];\
for( _ii=0; _ii<=mm;_ii++){\
_cc[_jj*(mm+1)+_ii]= (void*)&_dd[(_jj*(mm+1)+_ii)*(nn+3)*_size1];\
}\
}\
aa[-6]= (void*)(ll); aa[-5]= (void*)0;\
aa[-4]= (void*)(mm); aa[-3]= (void*)0;\
aa[-2]= (void*)(nn); aa[-1]= (void*)0;\
}

#define Free1DArray(aa) free( &(aa[-2]));\

#define Free2DArray(aa)\
{ free( aa[0]);\
free( &(aa[-4]));\
}
#define Free2DAsymArray(aa)\
{ free( aa[0]);\
free( &(aa[-5]));\
}
#define Free3DArray(cc)\
{ free( cc[0][0]);\
free( cc[0]);\
free( &(cc[-6]));\
}

#define Free3DAsymArray(cc)\
{ free( cc[0][0]);\
free( cc[0]);\
free( &(cc[-6]));\
}

#define New1DArrayInt( aa, nn)\
{ long *_zzzbb;\
NewAlloc(long, ((nn)+3)+3, _zzzbb);\
_zzzbb[0]= nn;\
_zzzbb[1]= 0;\
aa= &_zzzbb[2];\
}

#define New2DArrayInt( bb, mm, nn)\
{ long _zzzii, **_zzzbb, *_zzzcc;\
NewAlloc(long*, (mm)+1+4, _zzzbb);\
NewAlloc(long, ((mm)+1)*((nn)+3), _zzzcc);\
_zzzbb[0]= (long*)(mm); _zzzbb[1]= (long*)0;\
_zzzbb[2]= (long*)(nn); _zzzbb[3]= (long*)0;\
bb= &_zzzbb[4];\
for( _zzzii=0; _zzzii<=mm;_zzzii++){\
bb[_zzzii]= &_zzzcc[_zzzii*(nn+3)];\
}\
}


#define New2DAsymArrayInt( aa, mm, na)\
{ long _ii, _nByte, **_bb, *_cc;\
NewAlloc(long *, (mm)+2+4, _bb);\
_nByte= 0;\
for( _ii= 0; _ii <= (mm); _ii++){\
_nByte= _nByte+ na[_ii]+4;\
}\
NewAlloc(long, _nByte, _cc);\
_bb[0]= (long*)(mm); _bb[1]= (long*)0;\
_bb[2]= (long*)(_nByte-2*mm); _bb[3]= (long*)0;\
aa= &_bb[5];_nByte= 0;_bb[4]= &_cc[0];\
for( _ii= 0; _ii <= (mm); _ii++){\
_bb[_ii+5]= &_cc[_nByte];\
_nByte= _nByte+ na[_ii]+4;\
}\
}

#define New3DAsymArrayInt( aa, ll, mm, na)\
{ long _jj, _ii, _kSum, _nItem, ***_bb, **_cc, *_dd;\
NewAlloc(long **, (ll)+2+6, _bb);\
NewAlloc(long *, ((ll)+1)*((mm)+1)+5, _cc);\
_nItem= 0;\
for( _ii= 0; _ii <= (mm); _ii++){\
_nItem= _nItem+ na[_ii]+4;\
}\
_kSum= _nItem;\
NewAlloc(long, ((ll)+1)*(_kSum+1)+2, _dd);\
_bb[0]= (long**)(ll); _bb[1]= (long**)0;\
_bb[2]= (long**)(mm); _bb[3]= (long**)0;\
_bb[4]= (long**)_kSum; _bb[5]= (long**)0;\
aa= &_bb[6];_nItem= -1;\
for( _jj=0; _jj<=ll; _jj++){\
_bb[_jj+6]= &_cc[(_jj)*((mm)+1)];_nItem++;\
for( _ii=0; _ii<=(mm);_ii++){\
_cc[(_jj)*((mm)+1)+_ii]= &_dd[_nItem];\
_nItem= _nItem+ na[_ii]+4;\
}\
}\
}\

#define New3DArrayInt( cc, ll, mm, nn)\
{ long _zzzjj, _zzzii, ***_zzzbb, **_zzzcc, *_zzzdd;\
NewAlloc(long **, ll+1+6, _zzzbb);\
NewAlloc(long *, (ll+1)*(mm+1), _zzzcc);\
NewAlloc(long, (ll+1)*(mm+1)*(nn+3), _zzzdd);\
_zzzbb[0]= (long**)(ll); _zzzbb[1]= (long**)0;\
_zzzbb[2]= (long**)(mm); _zzzbb[3]= (long**)0;\
_zzzbb[4]= (long**)(nn); _zzzbb[5]= (long**)0;\
cc= &_zzzbb[6];\
for( _zzzjj=0; _zzzjj<=ll; _zzzjj++){\
_zzzbb[_zzzjj+6]= &_zzzcc[_zzzjj*(mm+1)];\
for( _zzzii=0; _zzzii<=mm;_zzzii++){\
_zzzcc[_zzzjj*(mm+1)+_zzzii]= &_zzzdd[(_zzzjj*(mm+1)+_zzzii)*(nn+3)];\
}\
}\
}

#define New1DArrayReal( aa, nn)\
{ double *_zzzbb;\
NewAlloc(double, ((nn)+3)+3, _zzzbb);\
_zzzbb[0]= nn;\
_zzzbb[1]= 0;\
aa= &_zzzbb[2];\
}

#define New2DArrayReal( rb, mm, nn)\
{ long _zzzii; double **_zzzbb, *_zzzcc;\
NewAlloc(double *, (mm)+1+4, _zzzbb);\
NewAlloc(double, ((mm)+1)*((nn)+3), _zzzcc);\
_zzzbb[0]= (double*)(mm); _zzzbb[1]= (double*)0;\
_zzzbb[2]= (double*)(nn); _zzzbb[3]= (double*)0;\
rb= &_zzzbb[4];\
for( _zzzii=0; _zzzii<=mm;_zzzii++){\
rb[_zzzii]= &_zzzcc[_zzzii*(nn+3)];\
}\
}

#define New3DArrayReal( rc, ll, mm, nn)\
{ long _zzzjj, _zzzii; double ***_zzzbb, **_zzzcc, *_zzzdd;\
NewAlloc(double **, ll+1+6, _zzzbb);\
NewAlloc(double *, (ll+1)*(mm+1), _zzzcc);\
NewAlloc(double, (ll+1)*(mm+1)*(nn+3), _zzzdd);\
_zzzbb[0]= (double**)(ll); _zzzbb[1]= (double**)0;\
_zzzbb[2]= (double**)(mm); _zzzbb[3]= (double**)0;\
_zzzbb[4]= (double**)(nn); _zzzbb[5]= (double**)0;\
rc= &_zzzbb[6];\
for( _zzzjj=0; _zzzjj<=ll; _zzzjj++){\
_zzzbb[_zzzjj+6]= &_zzzcc[_zzzjj*(mm+1)];\
for( _zzzii=0; _zzzii<=mm;_zzzii++){\
_zzzcc[_zzzjj*(mm+1)+_zzzii]= &_zzzdd[(_zzzjj*(mm+1)+_zzzii)*(nn+3)];\
}\
}\
}
#define New2DAsymArrayReal( aa, mm, na)\
{ long _ii, _nByte;\
double **_bb, *_cc;\
NewAlloc(double *, (mm)+2+4, _bb);\
_nByte= 0;\
for( _ii= 0; _ii <= (mm); _ii++){\
_nByte= _nByte+ na[_ii]+4;\
}\
NewAlloc(double, _nByte, _cc);\
_bb[0]= (double*)(mm); _bb[1]= (double*)0;\
_bb[2]= (double*)(_nByte-2*mm); _bb[3]= (double*)0;\
aa= (double**)&_bb[5];_nByte= 0;_bb[4]= &_cc[0];\
for( _ii= 0; _ii <= (mm); _ii++){\
_bb[_ii+5]= &_cc[_nByte];\
_nByte= _nByte+ na[_ii]+4;\
}\
}

#define New3DAsymArrayReal( aa, ll, mm, na)\
{ long _jj, _ii, _kSum, _nItem;\
double ***_bb, **_cc, *_dd;\
NewAlloc(double **, (ll)+2+6, _bb);\
NewAlloc(double *, ((ll)+1)*((mm)+1)+5, _cc);\
_nItem= 0;\
for( _ii= 0; _ii <= (mm); _ii++){\
_nItem= _nItem+ na[_ii]+4;\
}\
_kSum= _nItem;\
NewAlloc(double, ((ll)+1)*(_kSum+1)+2, _dd);\
_bb[0]= (double**)(ll); _bb[1]= (double**)0;\
_bb[2]= (double**)(mm); _bb[3]= (double**)0;\
_bb[4]= (double**)(_kSum); _bb[5]= (double**)0;\
aa= &_bb[6];_nItem= -1;\
for( _jj=0; _jj<=ll; _jj++){\
_bb[_jj+6]= &_cc[(_jj)*((mm)+1)];_nItem++;\
for( _ii=0; _ii<=(mm);_ii++){\
_cc[(_jj)*((mm)+1)+_ii]= &_dd[_nItem];\
_nItem= _nItem+ na[_ii]+4;\
}\
}\
}\


#define chk1DAry(aa, nn, num)\
{ if(nn<0 || nn>(int)aa[-2]){\
printf("No. %d ArrayCheckError!\n", num);\
getchar(); getchar(); exit(1);\
}}

#define chk2DAry(aa, mm, nn, num)\
{ if(mm<0 || mm>(int)aa[-4] || nn<0 || nn>(int)aa[-2]){\
printf("No. %d ArrayCheckError!\n", num);\
getchar(); getchar(); exit(1);\
}}

#define chk3DAry(aa, ll, mm, nn, num)\
{ if(ll<0 || ll>(int)aa[-6] ||\
mm<0 || mm>(int)aa[-4] ||\
nn<0 || nn>(int)aa[-2]){\
printf("No. %d ArrayCheckError!\n", num);\
getchar(); getchar(); exit(1);\
}}


#define OpenFile(fname, mode, fp)\
{ if(( fp =fopen(fname,mode))==NULL){\
printf("Can't open \"%s\" !\n", fname);\
exit(1);\
}\
}
#define FileRead( ary, size, nitems, fp)\
{ INT _ii;\
if((_ii= fread(ary,size,nitems, fp)) < nitems){\
WriteI(_ii); WriteS(" items\n");\
printf("Read error in FileRead\(\)\n");\
}\
}
#define FileWrite( ary,size, nitems, fp)\
{ INT _ii;\
if((_ii= fwrite(ary,size,nitems, fp)) < nitems){\
WriteI(_ii); WriteS(" items\n");\
printf("Write error in FileWrite\(\)\n");\
}\
}
#define FileTell( pos, fp)\
{ if( (pos=ftell(fp))< 0)\
printf("Error in FileTell()!\n");\
}

#define EWriteC(VAR) fprintf(stderr, "%c", VAR)
#define EWriteS(pVAR) fprintf(stderr, "%s", pVAR)
#define EWriteI(VAR) fprintf(stderr, " %d", VAR)
#define EWriteR(VAR) fprintf(stderr, " %g", VAR)
#define EWriteRealF(VAR,w,n) fprintf(stderr, " %*.*lf",w,n,VAR)
#define EWriteL(VAR) fprintf(stderr, " %ld", VAR)
#define EWriteD(VAR) fprintf(stderr, " %17.10e", VAR)
#define EWriteLn fprintf(stderr, "\n")

#define LOCAL static
#define MAX(v1,v2) ((v1)>(v2)? (v1):(v2))
#define MIN(v1,v2) ((v1)<(v2)? (v1):(v2))

#define EXITFOR break
#define EXITWHILE break
#define EXITREPEAT break
#define THEN
#define NOT ~

#define IsOdd( var) (var%2)
typedef unsigned long int UINT;
typedef UINT* PtrUINT;
typedef unsigned short int UINT2;
typedef UINT2* PtrUINT2;

#define WriteUInt(eq) printf("% lu", (eq))
#define WriteUI(eq) WriteInt(eq)
#define MaxREAL DBL_MAX
#define MinREAL DBL_MIN
#define MaxINT LONG_MAX
#define MinINT LONG_MIN

/*-- C like Visual Basic -----------------*/
#define EndMain }
#define Sub
#define EndSub }
#define If( cond) if( cond ){
#define ElseIf(cond) }else if(cond){
#define Else }else{
#define EndIf }
#define Loop while(1){
#define ExitLoop break
#define Exit break
#define EndLoop }
#define While(cond) while(cond){
#define ExitWhile break
#define EndWhile }
#define Repeat do {
#define ExitRepeat break
#define Until(cond) }while(!(cond));
#define For( n, fst, lst)\
for(n=(fst);n<=(lst);n++){
#define ForInc( n,fst,lst,step)\
for(n=(fst);n<=(lst);n+= (step)){
#define ForDec( n,fst,lst,step)\
for(n=(fst);n>=(lst);n-= (step)){
#define ExitFor break
#define EndFor }
#define Switch( c ) switch( c ){case -9876:
#define Case break; case
#define Other break; default
#define EndSwitch }
#define Adr( var) &(var)
#define Obj( var) *(var)
#define Inc(v) (v)++ /*increase 1*/
#define Dec(v) (v)-- /*decrease 1*/
#define MLoop while(1){
#define ExitMLoop(nn)\
goto _EndMultiLoop##nn
#define EndMLoop(nn)\
}_EndMultiLoop##nn:;
#define Type
#define Return return
#define Swap(type, xx, yy)\
{type d_=xx;xx=yy;yy=d_;}
/*-- END ----------------------------------*/
#endif



◎Enumeration2.cの内容
/*============ Knapsak Problem =========================*/
#include "pseudo10.h"
typedef struct DATA* PtrDATA;

struct DATA{
long *x;
long N;
long *a,*c;
long b;
};

void MakeKP( PtrDATA D);
int Enumerate( INT i, PtrDATA D);
void Rand1DArrayInt( long* x, INT n);
void SolveKP( PtrDATA D);
void Output1DArrayInt( long* x, INT n);
//================================================
int main(void)
{
PtrDATA D;
long N;

New( PtrDATA, D);
InputInt( N); D->N= N;
New1DArrayInt( D->a, N);
New1DArrayInt( D->c, N);
New1DArrayInt( D->x, N);

MakeKP( D);

SolveKP( D);
//Rand1DArrayInt( D->a, N);
Output1DArrayInt( D->a, N);

Free1DArray( D->x);
Free1DArray( D->c);
Free1DArray( D->a);
Free( D);
getchar(); getchar();
return 0;
}//================================================
void MakeKP( PtrDATA D)
{
long i;
long sum;

srand( 1);
sum= 0.0e0;
for(i= 1; i<= D->N; i++){
D->a= rand();
//D->a= rand()%1000;
sum= sum +D->a;
}
D->b= floor(0.5*sum);
}//------------------------------------------------
void SolveKP( PtrDATA D)
{
long n;


Enumerate( 1, D);
}//------------------------------------------------
int Enumerate( INT i, PtrDATA D)
{

IF( i == D->N)
D->x[ i]= 0;
Output1DArrayInt( D->x, i);
D->x[ i]= 1;
Output1DArrayInt( D->x, i);
return -1;
ENDIF

D->x= 0;
Enumerate( i+1, D);
D->x[i]= 1;
Enumerate( i+1, D);
return 0;
}//------------------------------------------------
void Output1DArrayInt(long* x, INT n)
{
long k;

for(k= 1; k<=n; k++){
printf("% d", x[k]);
}
printf("\n");
}//------------------------------------------------
void Rand1DArrayInt( long* a, INT n)
{
INT k;

srand( 1);
for(k= 1; k<= n; k++){
a[k]= rand()%1000;
}
}//------------------------------------------------

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: ナップサック問題の最適解を求めるプログラムについて質問です。

#2

投稿記事 by beatle » 13年前

第一に、あなたが思うところの、間違っているかもしれない、抜けているかもしれないこととは何でしょうか?
あと少しの所までできた、と言えるということは、「あと何をすれば完成するのか」の予想が出来ているということですよね?それは何ですか?

第二に、ソースコードを貼り付けるときはcodeタグを使って下さい。詳しくはフォーラムルールを御覧ください。

第三に、質問はもう少し簡潔にお願いします。
間違いを訂正してもらうのに、本当に全てのソースコードを貼り付ける必要があるのでしょうか?
抜けていることを探し出すという非常に根気のいる作業を、ほとんど丸投げしていいのでしょうか?

第四に、貼り付けるソースコードにはコメントを入れて下さい。
特に長いソースコードの場合、回答者さんたちはソースコードを読まねばならないわけですから、「この部分は、こういう処理をする部分」というような要約コメントがあるべきです。

質問の仕方がちょっと(僕の)常識では考えられないものでしたので厳し目にツッコミを入れました。

たいちう
記事: 418
登録日時: 14年前

Re: ナップサック問題の最適解を求めるプログラムについて質問です。

#3

投稿記事 by たいちう » 13年前

ソースコードも酷いですね。#defineの濫用は止めましょう。
まともに動かなくて当たり前です。デバッグ以前の問題。
cf. Cプログラミング診断室

なるさんが自分で書いたものならば人に見せる前に書き直してください。
どこかで拾ったものならば捨てて下さい。

かずま

Re: ナップサック問題の最適解を求めるプログラムについて質問です。

#4

投稿記事 by かずま » 13年前

なる さんが書きました:ナップサック問題の係数を乱数を用いて生成し、すべての解を列挙することで最適解を求めるプログラムを求めなさい。という課題です。
あと少しの所まできたのですが、間違っている箇所、抜けている箇所を訂正してください><

コード:

◎Enumeration2.cの内容
/*============ Knapsak Problem =========================*/
#include "pseudo10.h"
typedef struct DATA* PtrDATA;

struct DATA{
long *x;
long N;
long *a,*c;
long b;
};
抜けているところだらけです。

個々の品物の容量 a は乱数で設定しているのに、
個々の品物の価値 c は何も設定していない。
どの品物をナップサックに入れるかを示す x はすべて列挙しているのに、
それがナップサックの容量 b に入るかどうかをチェックしていない。
入った場合の価値の合計も計算せず、最大値を求めるところもない。

間違っているところは、knapsack の綴りです。

閉鎖

“C言語何でも質問掲示板” へ戻る