/*
MODYFIKACJA: teraz używamy tablicy dwuwymiarowej kolumna x, kolumna f(x)
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.
Tablice dwówymiarowe
Przekazywanie tablic dwówymiarowych do funkcji

















*/
#include <iostream>
#include <iomanip>
#include <limits>
#include <math>

using namespace std; // w starszych kompilatorach trzeba zakomentować ten wiersz

const unsigned MaksymalnyRozmiarTablicy=1000;

double f(double x);
void Wypelnij(double T[][2],unsigned N,double Od,double Do);
void Drukuj(double T[][2],unsigned N);

int main()
  {
   while(true)
     {
      double Tb[MaksymalnyRozmiarTablicy][2];
      cout<<"Podaj ilosc pomiarow 1.."<<MaksymalnyRozmiarTablicy<<" (0-koniec): ";
      unsigned N;
      cin>>N;
      if((cin)&&(N<=MaksymalnyRozmiarTablicy))
        {
         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');
            Wypelnij(Tb,N,Od,Do);
            Drukuj(Tb,N);
            cout<<endl;
            continue;
           }
        }
      cin.clear();
      cin.ignore(INT_MAX,'\n');
      cout<<"Blad wprowadzenia"<<endl<<endl;
     }
   return 0;
  }

void Drukuj(double T[][2],unsigned N)
  {
   cout.setf(ios::fixed);
   for(unsigned i=0;i<N;++i)
     {
      cout<<setw(20)<<setprecision(12)<<T[i][0]<<setw(20)<<setprecision(12)<<T[i][1]<<endl;
     }
  }

void Wypelnij(double T[][2],unsigned N,double Od,double Do)
  {
   unsigned M=N-1;
   if(M) // nie chcemy dzielić przez zero, prawda ?
     {
      double Zakres=(Do-Od);
      for(unsigned i=0;i<N;++i) T[i][1] = f(  T[i][0] = Od+i*Zakres/M  );
     }
   else T[0][1] = f(  T[0][0] = (Od+Do)/2  );
  }

double f(double x)
  {
   double sx=sin(x);
   return(2*sx*sx);
  }


