#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <dir.h>

/*----------------------------------------------------------	*/
#define	NLEN		128	// макс. длина строки

short file_skip(FILE *f) /* пропуск до начала след. строки		*/
{ while (fgetc(f) != 0x0A) { if(feof(f)) return (1); } return (0); }

short fget_string(char *s,FILE *f)	/* ввод строки из файла		*/
{
short i=0, iret=0;

while ((*(s+i)=fgetc(f)) != 0x0D)
	{ i++; if(i == NLEN || feof(f)) { iret=1; break; }
	}
*(s+i)=0x00; return (iret);
}

void strunc(char *t)	/* удаление из строки завершающих пробелов	*/
{ short i; i=strlen(t); while(*(t+i-1) == 0x20 && i > 0) i--; *(t+i)=0x00; }

//--------------------------------------------------------------

#define	NUM_IN		20	// к-во значений ном. тока
#define	NAME_LEN        12	// длина наименования выключателя
#define	NUM_IR		10	// к-во значений ном. тока расцепителя
#define	NUM_IO		10	// к-во значений ном. тока отсечки

static	double	av_in[NUM_IN];			// I ном
static	double	av_ir[NUM_IN][NUM_IR];		// I расц
static	short	ir_num[NUM_IN];			// к-во значений I расц
static	double	av_io[NUM_IN][NUM_IO];		// I отсечки
static	short	io_num[NUM_IN];			// к-во значений I отсечки
static	double	av_pks[NUM_IN];			// ПКС
static	char	av_name[NUM_IN][NAME_LEN];	// наименования

#define	NUMS		1000	// количество сочетаний

static	char	w_name[NUMS][NAME_LEN];
static	double	w_in[NUMS];
static	double	w_ir[NUMS];
static	double	w_io[NUMS];
static	double	w_pks[NUMS];

main (int numc,char **s)
{
FILE *f;
short i,k,ko,kr, n, m;
char buf[128], name[NAME_LEN], fname[MAXDIR];
float in,ir[NUM_IR],io[NUM_IO], pks;
double in_min, ir_min, io_min;
double t1,i1;

if(numc == 2) strcpy(fname,s[1]);
	else { printf("USAGE: MAKEBDAV <имя файла без расширения>\n"); return; }

if((f=fopen(fname,"rb")) == NULL)
	{
	printf("USAGE: MAKEBDAV <имя файла без расширения>\n");
	return;
	}
n=0;
while (1)
	{
	fscanf(f,"%s%f",name,&in); if(feof(f)) break;
	strcpy(av_name[n],name); av_in[n]=in;
	file_skip(f);
	if(fget_string(buf,f)) break;
	file_skip(f);
	k=sscanf(buf,"%f%f%f%f%f%f%f%f%f%f",
	&ir[0],&ir[1],&ir[2],&ir[3],&ir[4],&ir[5],&ir[6],&ir[7],&ir[8],&ir[9]);
	for(i=0; i<k; i++) av_ir[n][i]=ir[i];
	ir_num[n]=k; av_ir[n][k]=0;
	if(fget_string(buf,f)) break;
	file_skip(f);
	k=sscanf(buf,"%f%f%f%f%f%f%f%f%f%f",
	&io[0],&io[1],&io[2],&io[3],&io[4],&io[5],&io[6],&io[7],&io[8],&io[9]);
	for(i=0; i<k; i++) av_io[n][i]=io[i];
	io_num[n]=k; av_io[n][k]=0;
	fscanf(f,"%f",&pks); if(feof(f)) break;
	av_pks[n]=pks; n++;
	}
fclose(f);

k=0;
for(i=0; i<n; i++)
	{
	for(kr=0; kr<ir_num[i]; kr++)
		{
		for(ko=0; ko<io_num[i]; ko++)
			{
			strcpy(w_name[k],av_name[i]);
			w_in[k]=av_in[i];
			w_ir[k]=av_ir[i][kr];
			w_io[k]=av_ir[i][kr]*av_io[i][ko];
			w_pks[k]=av_pks[i];
			k++;
			}
		}
	}
strcpy(buf,fname); strcat(fname,".003");
f=fopen(fname,"w");
fprintf(f,"%d\n",k);
for(i=0; i<k; i++)
	{
	in_min=ir_min=io_min=100000.;
	for(n=0; n<k; n++)
		{
		if(w_in[n] < 0) continue;
		if(w_ir[n] < ir_min)
			{
			ir_min=w_ir[n]; in_min=w_in[n]; io_min=w_io[n];
			m=n; continue;
			}
		if(w_ir[n] == ir_min)
			{
			if(w_io[n] < io_min)
				{
				ir_min=w_ir[n]; in_min=w_in[n]; io_min=w_io[n];
				m=n; continue;
				}
			if(w_io[n] == io_min)
				{
				if(w_in[n] < in_min)
					{
					ir_min=w_ir[n]; in_min=w_in[n]; io_min=w_io[n];
					m=n; continue;
					}
				}
			}
		}
	fprintf(f,"%s\n%.0f\n%.2f\n%.1f\n%.2f\n",
	w_name[m],w_in[m],w_ir[m],w_io[m],w_pks[m]);
	w_in[m]=-1.;
	}
fclose(f);
strcpy(fname,buf); strcat(fname,".005");
f=fopen(fname,"w");
fprintf(f,"%d\n",1);
t1=2; i1=40; fprintf(f,"%.1f\n%.1f\n",t1,i1);
t1=3; i1=18; fprintf(f,"%.1f\n%.1f\n",t1,i1);
t1=4; i1=9; fprintf(f,"%.1f\n%.1f\n",t1,i1);
t1=5; i1=6; fprintf(f,"%.1f\n%.1f\n",t1,i1);
t1=6; i1=4; fprintf(f,"%.1f\n%.1f\n",t1,i1);
t1=7; i1=3; fprintf(f,"%.1f\n%.1f\n",t1,i1);
t1=8; i1=2.2; fprintf(f,"%.1f\n%.1f\n",t1,i1);
t1=9; i1=1.7; fprintf(f,"%.1f\n%.1f\n",t1,i1);
t1=10; i1=1.4; fprintf(f,"%.1f\n%.1f\n",t1,i1);
fclose(f);
}