/*      Inspektoriaus uzdavinys */
/*----------------------------*/
/*Sauliaus Nevo pakoreguotas Vilijos Pranckevicienes namu darbas*/

//#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
/*------------------------------------*/
#define MaxDuom  10
#define ResultsFile "rezult.h"
/*------------------------------------*/
struct ADuom
{  char name[21];
  float p;       /*tikimybe susekti plote i*/
  float q;       /*tikimybe nusauti briedi plote i*/
  float g;       /*briedzio svoris*/
 }  miskas[MaxDuom];

float v[10][10];
float u[10][10];

int m;

/*--- Duomenu skaitymas ------------------------------*/
int ReadMiskoData(int * m)
{  FILE * stream;
   int i=0;
   float xxx;
   char fn[80]="miskas.dat";
   printf("\n\nDuomenu failo vardas:");
   scanf("%s",&fn);
   stream = fopen(fn, "r");
   if (stream==NULL)
   { printf("Duomenu failas %s neatidarytas",fn); return 1; }
   fgets(fn,80,stream);
   while (!feof(stream))
   {    fscanf(stream,"%20s ", miskas[i].name);
        fscanf(stream,"\t%f",&xxx);
        miskas[i].p=xxx;
        fscanf(stream,"\t%f",&xxx);
        miskas[i].g=xxx;
        fscanf(stream,"\t%f",&xxx);
        miskas[i].q=xxx;
        fscanf(stream,"\n");
      i++;
   }
   *m=i;
   fclose(stream);
   return 0;
}
/*--- Duomenu spausdinimas ekrane -----------------------------*/
int PrintMiskoData(FILE * stream, int m)
{  int i;
   if (stream==NULL)
   { printf("Duomenu failas neatidarytas"); return 1; }
   fprintf(stream,"\n%i misku duomenys:",m);
   fprintf(stream,"\nmiskai             \tp     \tg     \tq");
   for (i=0;i<m;i++)
   {  fprintf(stream,"\n%-20s\t%7.2f\t%7.2f\t%7.2f",miskas[i].name, miskas[i].p,miskas[i].g,miskas[i].q);
         }
   return 0;
}
/*--- Naudingumo funkciju u[i][j] ir v[i][j] skaiciavimas ---------------------*/
  int SkaicU_V(FILE * stream,  int  m)
{
   int i , j ;
   char fn[80];
   stream = fopen(ResultsFile, "w");
   if (stream==NULL)
   { printf("Rezultatu failas %s neatidarytas",ResultsFile);
     return;
   }
   fprintf(stream,"\n%i misku duomenys:",m);
   fprintf(stream,"\nmiskai               \tp   \tg     \tq");
   for (i=0;i<m;i++)
   {  fprintf(stream,"\n%-20s\t%7.2f\t%7.2f\t%7.2f",miskas[i].name, miskas[i].p,miskas[i].g,miskas[i].q);
         }
      fprintf(stream,"\n ---------------------------------------- ");
   fprintf(stream,"\n%i misku rezultatai:\n",m);
for(i=0;i<=m;i++)
        {for(j=0;j<=m;j++)
        {if(i==j)
         {
         u[i][j]=miskas[i].p*miskas[i].g*miskas[i].q;
          v[i][j]=-miskas[j].g*miskas[i].p*miskas[j].q+(1-miskas[i].p)*miskas[j].g*miskas[j].q;
         }
                else{
                u[i][j]=0;
                v[i][j]=miskas[j].g*miskas[j].q;
                }
                }}
 for(i=0;i<=m-1;i++)
        {for(j=0;j<=m-1;j++) {
                fprintf(stream,"u(%d,%d)=%f\n",i+1,j+1,u[i][j]);
             fprintf(stream,"v(%d,%d)=%f\n",i+1,j+1,v[i][j]);
                                 }

}
/*------------LP failo formavimas-----------------------*/
        printf("\nIveskite LP failo pavadinima (pvz:'b.lp'):");
        scanf("%s",&fn);
        stream = fopen(fn, "w");
           if (stream==NULL)
           { printf("Rezultatu failas %s neatidarytas",fn);
     return 1; }
        fprintf(stream,"max: U1 - U2 + V1 - V2;\n");
        for(i=1;i<=m;i++)
        {
        if(u[i-1][i-1]>=0)
                fprintf(stream,"+%f y%d -1 U1 +1 U2 = 0 ;\n",u[i-1][i-1],i);
        else    fprintf(stream,"%f y%d -1 U1 +1 U2 = 0 ;\n",u[i-1][i-1],i);
            }
        for(j=1;j<=m;j++)
        {
        for(i=1;i<=m;i++)
        {
          if(v[i-1][j-1]>=0){
                   fprintf(stream,"+%f x%d ",v[i-1][j-1],i);}
                   else    {fprintf(stream,"%f x%d ",v[i-1][j-1],i);}
                   }
                fprintf(stream,"-1 V1 +1 V2 = 0 ;\n");
        }
           fprintf(stream,"x1 ");
         for(i=2;i<=m;i++)
         { fprintf(stream,"+ x%d ",i);}
           fprintf(stream,"= 1;\n");
           fprintf(stream,"y1 ");
         for(i=2;i<=m;i++)
         { fprintf(stream,"+ y%d ",i);}
           fprintf(stream,"= 1;\n");
   return 0;
}
/*------PAGRINDINE PROGRAMA-------------------------*/
int main(void)
{
  if (ReadMiskoData(&m)) exit(1);
  PrintMiskoData(stdout, m);
  if(SkaicU_V(stdout,m)) exit(1);
  printf("\n\nRezultatu failas %s suformuotas.\nPabaiga!", ResultsFile);
}

