/*
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.
INT_MAX - stała o wartości maksymalnej możliwej liczby typu int
<limits> - plik nagłówkowy w którym między innymi zadeklarowana stała INT_MAX
setprecision(N) - następne wyprowadzenie będzie pokazano z dokładnością N znaków
cout.setf(ios::fixed) - tryb zmiennoprzecinkowy
cout.setf(ios::scientific) - tryb zmiennoprzecinkowy
instrukcja continue;
własne funkcji













*/
#include <iostream>
#include <iomanip>
#include <limits>
#include <math>

using namespace std; // w starszych kompilatorach trzeba zakomentować ten wiersz

double f(double x);

void drukujWiersz(double x)
  {
   cout<<setw(14)<<setprecision(12)<<x<<'\t'<<setw(14)<<setprecision(12)<<f(x)<<endl;
  }

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');
            cout.setf(ios::fixed);
            unsigned M=N-1;
            if(M) // nie chcemy dzielić przez zero
              {
               double Zakres=(Do-Od);
               for(unsigned i=0;i<N;++i) drukujWiersz(Od+i*Zakres/M);
              }
            else drukujWiersz((Od+Do)/2);
            cout<<endl;
            continue;
           }
        }
      cin.clear();
      cin.ignore(INT_MAX,'\n');
      cout<<"Blad wprowadzenia"<<endl<<endl;
     }
   return 0;
  }

double f(double x)
  {
   double sx=sin(x);
   return(2*sx*sx);
  }

