/*
MODYFIKACJA: teraz używamy dynamicznej pamięci
Wydruk tabliczki wartości funkcji w podanych przedziałach.
funkcja: y=2*sin(x)*sin(x)
Program prosi o podanie zakresu Od - Do oraz ilości "pomiarów" N.
W podanych przedziałach rozkłada równomiernie N wartości x i dla nich oblicza y.
Dynamiczne przydzielanie tablic.
Przekazywanie dynamicznie przydzielonych tablic do funkcji

















*/
#include <iostream>
#include <iomanip>
#include <limits>
#include <math>

using namespace std; // w starszych kompilatorach trzeba zakomentować ten wiersz

double f(double x);
void Wypelnij(double *T,unsigned N,double Od,double Do);
void Drukuj(const double *T,unsigned N);

int main()
  {
   while(true)
     {
      cout<<"Podaj ilosc pomiarow (0-koniec): ";
      unsigned N;
      cin>>N;
      if(cin)
        {
         if(!N) break;
         cin.ignore(INT_MAX,'\n');
         cout<<"Podaj przedzialy Od-Do: ";
         double Od,Do;
         cin>>Od>>Do;
         if(cin)
           {
            cin.ignore(INT_MAX,'\n');
            double *Tb=new double[N];
            Wypelnij(Tb,N,Od,Do);
            Drukuj(Tb,N);
            delete[] Tb;
            cout<<endl;
            continue;
           }
        }
      cin.clear();
      cin.ignore(INT_MAX,'\n');
      cout<<"Blad wprowadzenia"<<endl<<endl;
     }
   return 0;
  }

void Drukuj(const double *T,unsigned N)
  {
   cout.setf(ios::fixed);
   for(const double *K=T+N;T<K;++T) cout<<setprecision(12)<<*T<<endl;
  }

void Wypelnij(double *T,unsigned N,double Od,double Do)
  {
   unsigned M=N-1;
   if(M) // nie chcemy dzielić przez zero, prawda ?
     {
      double Zakres=(Do-Od);
      unsigned i=0;
      for(double *K=T+N;T<K;++T) *T=f(Od+(i++)*Zakres/M);
     }
   else *T=f((Od+Do)/2);
  }

double f(double x)
  {
   double sx=sin(x);
   return(2*sx*sx);
  }

