#include <conio.h>
#include <stdio.h>
#include <math.h>
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 (" \n\n\n\n\n Copyright 1994 by Dan.V.Puzanov & Anton A.Mets \n All rights reserved\n");
printf (" Special thanks Dmitry A.Davidenko\n");
printf ("\n\n\n\n\n Определение лучшего пакета методом смещенного идеала\n\n\n\n\n\n\n\n\n\n");
printf ("Нажмите любую клавишу");
getch();
printf ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nДанные о пакетах вводить из файла? [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<z[i]) //Выбор максимальной метрики
{
y=z[i]; //Определение лучшего пакета
e=i;
}
};
printf (" \nВ результате вычислений получено,\nчто ближе всего к идеалу находиться пакет ~%s~",nm[e].pname);
//printf ("\nЕго метрика равна: %le",y);
getch();
};
Литература
1. Craig Hunt
“TCP/IP Network Administration”,
O’Reilly & Associates, Inc., March 1993.
2. Елтаренко Е.А. , Симонов С.В.
“Методы решения многокритериальных задач”,
Москва, МИФИ, 1980.
3. Computer World - Москва, №№ 36, 45, 150 /1994.
4. Технологии электронных коммуникаций
том 27 “Межсетевые протоколы и мультисети”,
Москва, СП “Эко-Трендз” 1992.
5. Технологии электронных коммуникаций
том 28 “Unix: Сетевые возможности”,
Москва, СП “Эко-Трендз” 1992.
6. Технологии электронных коммуникаций
том 43 “Международная компьютерная сеть Internet”,
Москва, СП “Эко-Трендз” 1993.
7. Климеко С.В., Уразметов В.
“Internet. Среда обитания иформационного общества”,
Протвино, ИВФЭ, 1994.
8. LAN-WorkPlace for DOS. Administrators Guide.
San Jose, Novell, 1992.
9. PC/TCP Network software for DOS.
North Andover, FTP Software Inc., 1992.
Дата: 2019-07-24, просмотров: 173.