//---------------------------------------------------------------------------

#include <vcl.h>
#include <time.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

unsigned long int wynik1,wynik2,wynik3;
int* tab1,*tab2;
int ile1,ile2,ile3,ile4,ile5;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------

double GetTime()
{
  long long f,t;
  QueryPerformanceFrequency((PLARGE_INTEGER)&f);
  QueryPerformanceCounter((PLARGE_INTEGER)&t);
  return (double)t/(double)f;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ile1=KtoryWyraz(1);
   ile2=KtoryWyraz(2);
   ile3=KtoryWyraz(3);
   ile4=JakaTablica(1);
   ile5=JakaTablica(2);
   tab1=new int[ile4];
   tab2=new int[ile5];
   double czas1=GetTime();
   wynik1=Fib(ile1);
   ZapiszWynik(ile1,wynik1,1);
   wynik2=Fib(ile2);
   ZapiszWynik(ile2,wynik2,2);
   wynik3=Fib(ile3);
   ZapiszWynik(ile3,wynik3,3);
   Sortuj(&tab1,ile4);
   ZapiszTablice(tab1,ile4,1);
   Sortuj(&tab2,ile5);
   ZapiszTablice(tab2,ile5,2);


         double czas2=GetTime();
         double czas=czas2-czas1;
         ShowMessage("Czas wykonywania obliczen i zapisu: "+FloatToStr(czas)+" sekund");
}

int TForm1::JakaTablica(int ktoryCombo)
{
   TComboBox *CB;
   switch (ktoryCombo)
   {
      case 1:
         CB=ComboBox4;
         break;
      case 2:
         CB=ComboBox5;
         break;
   }
   switch (CB->ItemIndex)
   {
      case 0:
         return 50;
      case 1:
         return 60;
      case 2:
         return 70;
      case 3:
         return 90;
      case 4:
         return 100;
      case 5:
         return 150;
      case 6:
         return 200;
      case 7:
         return 300;
      case 8:
         return 450;
      default:
         return 0;
   }

}

int TForm1::KtoryWyraz(int ktoryCombo)
{
   TComboBox* CB;
   switch (ktoryCombo)
   {
      case 1:
         CB=ComboBox1;
         break;
      case 2:
         CB=ComboBox2;
         break;
      case 3:
         CB=ComboBox3;
         break;
   }
   switch (CB->ItemIndex)
   {
      case 0:
         return 15;
      case 1:
         return 25;
      case 2:
         return 35;
      case 3:
         return 40;
      case 4:
         return 45;
      case 5:
         return 46;
      case 6:
         return 47;
      case 7:
         return 48;
      case 8:
         return 50;
      default:
          return 0;
   }

}

void TForm1::ZapiszWynik(int wyraz,int wynik, int ktory)
{
   AnsiString stringS;

   switch (ktory)
   {
      case 1:
         stringS="C:\\users\\Watki\\Watek1wynik1.txt";
         break;
      case 2:
         stringS="C:\\users\\Watki\\Watek1wynik2.txt";
         break;
      case 3:
         stringS="C:\\users\\Watki\\Watek1wynik3.txt";
         break;
   }
   char* szFileName=stringS.c_str();
   // tworzymy plik
   HANDLE hFile=CreateFile(szFileName, GENERIC_WRITE, 0, NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
   // wypelniamy plik danymi
   AnsiString string=IntToStr(wyraz)+" wyraz ciagu Fibonacciego to: "+IntToStr(wynik);
   char* buffer=string.c_str();
   unsigned long ile;
   WriteFile(hFile,buffer,strlen(buffer),&ile,NULL);
   CloseHandle(hFile);
}

void TForm1::ZapiszTablice(int *tab, int ile, int ktora)
{
   AnsiString stringS;
   if (ktora==1)
      stringS="C:\\users\\Watki\\Watek1tablica1.txt";
   else
      stringS="C:\\users\\Watki\\Watek1tablica2.txt";
   char *szFileName=stringS.c_str();
      // tworzymy plik
   HANDLE hFile=CreateFile(szFileName, GENERIC_WRITE, 0, NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
   // wypelniamy plik danymi
   AnsiString string="Posortowana tablica: ";
   for (int i=0; i<ile; i++)
      string+=IntToStr(tab[i])+" ,";
   char* buffer=string.c_str();
   unsigned long ileB;
   WriteFile(hFile,buffer,strlen(buffer),&ileB,NULL);
   CloseHandle(hFile);
}


unsigned long int Fib(int ktory)
{
   if (ktory==0)
      return 0;
   if (ktory==1)
      return 1;
   return Fib(ktory-1)+Fib(ktory-2);

}

void Sortuj(int **tablica, int ile)
{
   srand(time(NULL)*1000);
   int *tab=*tablica;
   int temp;
   for (int i=0; i<ile; i++)
   {
      tab[i]=rand()%500;
   }
   for (int i=1; i<ile; i++)
   {
      for (int j=ile-1; j>=i; j--)
      {
         if (tab[j-1]>tab[j])
         {
            temp=tab[j-1];
            tab[j-1]=tab[j];
            tab[j]=temp;
         }
      }
   }

}

//---------------------------------------------------------------------------
