
Реферат — Текст програми експертного вибору
#include
#include
#include
int i,j,e,n,m,p,command;
double
y=0.0,d[30][30],k[30][30],s[30]w[30],l[30],z[30],a[30],b[30],h[30];
FILE* base;
FILE* name;
FILE* wazh;
struct name
{
char pname[50];
} nm[30];
struct krit
{
char pname[50];
} kr[30];
double power(double num, int st) // функція зведення в ступінь
{
double num1 = 1;
for (int gggggg=1;gggggg<=st;gggggg++)
num1 * = num;
return num1;
}
void main(void)
{
printf (» nnnnn Copyright 1994 by Dan.V.Puzanov & Anton A.Mets n All rights reservedn»);
printf («Special thanks Dmitry A.Davidenkon»);
printf («nnnn Визначення кращого пакету методом зміщеного ідеалуnnnnnnnn»);
printf («Натисніть будь-яку клавішу»);
getch();
printf («nnnnnnnnnnnnnnnnnnn nnnnДані про пакети вводити з файлу? [y/n]: «);
command = getch ();
if (command==’y’ || command==’Y’)
{
name=fopen(«name.dat», «rb»); // читання даних про пакети з
if (name==NULL) return;
fread (&n,sizeof(n),1,name); // файлу name.dat
fread (&nm,sizeof(nm),1,name);
fread (&m,sizeof(m),1,name);
fread (&kr,sizeof(kr),1,name);
fread (&a,sizeof(a),1,name);
fread (&b,sizeof(b),1,name);
fclose(name);
}
else
{ // Введення даних про пакети вручну
printf («nВведіть кількість пакетів: «);
scanf («%d»,&n);
for (i=1;i<=n;i++)
{
printf («nВведіть назву %d-го пакета: «,i);
scanf («%s»,nm[i].pname);
}
printf («nВведіть кількість критеріїв оцінки: «);
scanf («%d»,&m);
for (j=1;j<=m;j++)
{
printf («nВведіть назву %d-го критерію: «,j);
scanf («%s»,kr[j].pname);
}
for (j=1;j<=m;j++)
{
printf («nВведіть ідеальне значення для критерію ~%s~: «,kr[j].pname);
scanf («%le»,&a[j]);
printf («nВведіть найгірше значення для критерію ~%s~: «,kr[j].pname);
scanf («%le»,&b[j]);
};
printf («nЗберегти введені дані про пакети у файлі?»[y/n] «);
command = getch ();
if (command==’y’ || command==’Y’)
{
name=fopen(«name.dat», «wb»);
if (name==NULL) return;
if(fwrite (&n,sizeof(n),1,name) == 0) return;
fwrite (&nm,sizeof(nm),1,name); // запис даних про
fwrite (&m,sizeof(m),1,name); // пакетах
fwrite (&kr,sizeof(kr),1,name); // в файл name.dat
fwrite (&a,sizeof(a),1,name);
fwrite (&b,sizeof(b),1,name);
fclose(name);
};
}; // кінець else
printf(«n Введення значень критеріїв із файлу ? [y/n]: «);
command = getch ();
if (command==’y’ || command== ‘Y’)
{
base=fopen(«base.dat», «rb»);
if (base==NULL) return;
fread (&k,sizeof(k),1,base); // читання значень критеріїв
fread (&d,sizeof(d),1,base);
fclose(base); // з файлу base.dat
}
else
{
for (i=1;i<=n;i++) // Введення значень критеріїв вручну
for (j=1;j<=m;j++)
{printf («n Введіть значення критерію ~%s~n для пакета ~%s~: «,kr[j].pname,nm[i].pname);
scanf («%le»,&k[i][j]);
d[i][j]=(a[j]-k[i][j])/(a[j]b[j]); // Обчислення нормованих критеріїв
};
printf («nЗберегти введені дані про критерії у файлі?» [y/n]: «);
command = getch ();
if (command==’y’ || command==’Y’)
{
base=fopen(«base.dat», «wb»);
if (base==NULL) return; // запис значень критеріїв
fwrite (&k,sizeof(k),1,base); // в файл base.dat
fwrite (&d,sizeof(d),1,base);
fclose(base);
};
}; //кінець else
printf («nВведення значень відносної важливості з файлу?» [y/n]»);
command = getch ();
if (command==’y’ || command== ‘Y’)
{
wazh=fopen(«wazh.dat», «rb»);
if (wazh==NULL) return;
fread (&w,sizeof(w),1,wazh); // читання значень
fclose(base); // важливості критеріїв
} / /з файлу wazh.dat
else
{
for (j=1;j<=m;j++)
{
printf («nВведіть значення відносної важливості критерію ~%s~: «,kr[j].pname);
scanf («%le»,&w[j]); // Введення значень відносної важливості критеріїв
};
printf («nЗберегти значення відносної важливості у файлі?»[y/n]»);
command = getch ();
if (command==’y’ || command==’Y’)
{
wazh=fopen(«wazh.dat», «wb»); // запис значень
if (wazh==NULL) return; // відносної важливості
fwrite (&w,sizeof(w),1,wazh); // критеріїв у файл
fclose(wazh); //wazh.dat
};
}; // end of else
for (j=1;j<=m;j++)
{
s[j]=0.0;
for (i=1;i<=n;i++)
{
if (d[i][j]==0.0) d[i][j]=0.01;
s[j]=s[j]+d[i][j];
}
};
for (j=1;j<=m;j++)
{
h[j]=0.0;
for (i=1;i<=n;i++)
h[j]=h[j]+(d[i][j]/s[j])*log(d[i][j]/s[j]); // Обчислення ентропії
l[j]=w[j]/(h[j]*(-1)); // Обчислення вагових коефіцієнтів
};
printf («nВведіть значення параметра важливості властивостей, що рідко зустрічаються: «);
scanf («%d»,&p);
for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++) // Обчислення метрики
z[i]=z[i]+l[j]*power((1-d[i][j]), p);
if (i==1)
{
y=z[i];
e=i;
}
if (y
{
y=z[i]; // Визначення найкращого пакету
e=i;
}
};
printf (» nВ результаті обчислень отримано,nщо ближче до ідеалу знаходиться пакет ~%s~»,nm[e].pname);
//printf («nЙого метрика дорівнює: %le», y);
getch();
};
© Реферат плюс

