Текст программы экспертного выбора
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

#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, просмотров: 151.