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

void main ( int argc, char* argv[] )
{
  FILE *Name;
  
  
  char *Vystupni_Soubor,Ukazatel,PomocnyNazev[15];
  char *PomocnyRadek;
  char Hodnota;
  int I,J,PocetRadku,PocetSloupcu,Hustota,RozestupRadku=0,PocetMatic,PomocnyPocetMatic,RozestupSloupcu=0,RozestupHustoty=0;
  int Pocet1,Cena;
  
  
   if ( argc == 1 )
     {
	printf ("\n\nUsage: generat.exe -n Pocet sloupcu -m Pocet radku -h Hustota \n[-N rozestup sloupcu] [-M rozestup radku] [-p pocet generovanych matic s rozestupy]\n");
	exit(0);
     }
  else 
  {

  I=1;
  PocetMatic=1;
  PocetRadku=10;
  PocetSloupcu=10;
  Hustota=10;
  Cena=1;
  while (I<argc)
  {
    Ukazatel=argv[I][1];
    switch (Ukazatel)
    {
      case 'n' : {I++;PocetSloupcu=atoi (argv[I]);break;}    
      case 'm' : {I++;PocetRadku=atoi (argv[I]);break;}
      case 'h' : {I++;Hustota=atoi (argv[I]);break;}
      case 'N' : {I++;RozestupSloupcu=atoi (argv[I]);break;}
      case 'p' : {I++;PocetMatic=atoi (argv[I]);break;}
      case 'M' : {I++;RozestupRadku=atoi (argv[I]);break;}
      case 'H' : {I++;RozestupHustoty=atoi (argv[I]);break;}
      case 'c' : {I++;Cena=atoi (argv[I]);break;}
      default : break;
    
   
    
    }
    I++;
  
  
  
  }
  
  

  PomocnyPocetMatic=0;
  printf(" radku %d sloupcu %d hustota %d\n",PocetRadku,PocetSloupcu,Hustota);
  printf("Pocet matic %d\n",PocetMatic);
  printf("Rozestupy %d %d %d\n",RozestupRadku,RozestupSloupcu,RozestupHustoty);
  while (PomocnyPocetMatic<PocetMatic)
  {
  PomocnyPocetMatic++;
    Vystupni_Soubor=new char [15];
    

  sprintf(Vystupni_Soubor,"%03dx%03d_%02d.mtx",PocetRadku,PocetSloupcu,Hustota);
//  Vystupni_Soubor=strcat (Vystupni_Soubor,PomocnyNazev); 
/*
 Vystupni_Soubor=strcat (Vystupni_Soubor,"x");
  
  sprintf(PomocnyNazev,"%2d",PocetSloupcu);
  Vystupni_Soubor=strcat (Vystupni_Soubor,PomocnyNazev);
  Vystupni_Soubor=strcat (Vystupni_Soubor,"_");
 
  sprintf(PomocnyNazev,"%2d",Hustota);
  Vystupni_Soubor=strcat (Vystupni_Soubor,PomocnyNazev);
  Vystupni_Soubor=strcat (Vystupni_Soubor,".mtx");
*/
  printf("generuju matici soubor %s\n",Vystupni_Soubor);

  if ( (Name=fopen(Vystupni_Soubor, "wt"))==NULL)

     {
       printf ("Chyba pri otevirani souboru %s\n",Vystupni_Soubor);
      exit(0);
     }
    fprintf(Name,"%d %d\n",PocetSloupcu,PocetRadku);
   I=0;
   
   randomize();
   while (I<PocetSloupcu)
    {
     
     fprintf(Name,"%d ",random(Cena)+1);
     I++;
    }
    
   I=0;
   J=0;
   fprintf(Name,"\n");
   while (I<PocetRadku)
    {   
      J=0;
      Pocet1=0;
      PomocnyRadek=new char[2*PocetSloupcu+10];
        if (random(100)<Hustota)
          {
            sprintf(PomocnyRadek,"%d ",1);Pocet1++;
          }
        else 
        {
          sprintf(PomocnyRadek,"%d ",0);
        }
        J++;
      while (J<PocetSloupcu)
      {
      //  randomize ();
           
        if (random(100)<Hustota)
          {
            sprintf(PomocnyNazev,"%d ",1);Pocet1++;
            strcat(PomocnyRadek,PomocnyNazev);
          }
        else 
        {
          sprintf(PomocnyNazev,"%d ",0);
          strcat(PomocnyRadek,PomocnyNazev);
        }
        J++;
      }
      if (Pocet1) 
      {
        fprintf(Name,PomocnyRadek);
        I++;
        fprintf(Name,"\n");
      }  
      delete PomocnyRadek;
      
      
    } 
    
  fclose(Name);
  PocetSloupcu+=RozestupSloupcu;
  PocetRadku+=RozestupRadku;
  Hustota+=RozestupHustoty;
delete Vystupni_Soubor;
  }
  }
}

