#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include "Transf.h"


/* IO */
/*----------------------------------------------------------------*/
void read_punct(Punct& p, char* nume=NULL)
{
   if(nume!=NULL) printf("%s(x, y) = ", nume);
   scanf("%f %f", p.x, p.y);
//    cout<<nume<<".x = "; cin>>p.x;
//    cout<<nume<<".y = "; cin>>p.y;
}
/*----------------------------------------------------------------*/
void write_punct(Punct& p, char* nume=NULL)
{
   if(nume!=NULL) printf("%s", nume);
   printf("(%6.2f, %6.2f)\t", p.x, p.y);
}
/*----------------------------------------------------------------*/
int readf_puncte(char* numef, PPunct p)
{
   int nr=0;
   char buf[101];
   if(!numef || !strlen(numef))
   {
      cout << "Introdu numele fisierului care contine coordonatele punctelor:" << endl;
      cin >> buf;  numef = buf;
   }
   ifstream in(numef);
   if( !in ){ cout<<"Nu pot deschide fisierul "<<numef<<" pentru citire!"<<endl; return 0; }
   
   while(!in.eof())
   {
      in >> p[nr].x >> p[nr].y;
      in.getline(buf, 100);
      nr++;
   }
   in.close();
   return nr-1;
}
/*----------------------------------------------------------------*/
int writef_puncte(char* numef, PPunct p, int nr)
{
   if(!numef || !strlen(numef))
   {
      char buf[101];
      cout << "Introdu numele fisierului care contine coordonatele punctelor:" << endl;
      cin >> buf;  numef = buf;
   }
   ofstream out(numef);
   if( !out ){ cout << "Nu pot deschide fisierul " << numef << " pentru scriere!" << endl; return 0; }
   out.precision(2);
   out.width(6);
   out.setf(ios::fixed, ios::floatfield);

   for(int i=0; i<nr; i++){ out << p[i].x << "\t" << p[i].y << endl; }
   out.close();
   return i;
}
/*----------------------------------------------------------------*/
void gen_puncte(PPunct p, int nr, TCoord max_x = 150, TCoord max_y = 150)
{
   int i;
   for(i=0; i<nr; i++)
   {
     p[i].x = random(2*max_x)-max_x;
     p[i].y = random(2*max_y)-max_y;
   }
}
/*----------------------------------------------------------------*/
int read_puncte(PPunct p, int nr=0)
{
   int i;
   if(nr == 0)
   {
     cout<<"\nIntrodu nr de puncte: "<<endl; // printf("Introdu nr de puncte:\n");
     cin>>nr;                                // scanf("%d", &nr);
   }
   for(i=0; i<nr; i++)
   {
      cout<<"p["<<i<<"].x = "; cin>>p[i].x;
      cout<<"p["<<i<<"].y = "; cin>>p[i].y;
   }
   return nr;
}
/*----------------------------------------------------------------*/
int introdu_puncte(PPunct p, TCoord max_x = 150, TCoord max_y = 150)
{
  int nr;
  char c;

  cout<<"Sa generez punctele? (D/N)"<<endl;
  c = getch();

  cout<<"\nIntrodu nr de puncte: "<<endl; // printf("Introdu nr de puncte:\n");
  cin>>nr;                                // scanf("%d", &nr);

  if(c =='d' || c=='D')  gen_puncte(p, nr, max_x, max_y); // Generarea coordonatelor punctelor
  else                   read_puncte(p, nr);              // Citirea coordonatelor punctelor

  return nr;
}
/*----------------------------------------------------------------*/
void write_puncte(PPunct p, int nr)
{
  int i;
  cout.precision(2);
  cout.width(6);
  cout.setf(ios::fixed, ios::floatfield);
  cout<<endl;
  for(i=0; i<nr; i++)
  {
     cout<<"p["<<i<<"].x = "<<p[i].x<< "\t\t" <<
           "p["<<i<<"].y = "<<p[i].y<< endl;
//      printf("p[%d].x = %5.2f,\t", i, p[i].x);
//      printf("p[%d].y = %5.2f\n",  i, p[i].y);
  }
}
/*----------------------------------------------------------------*/
void write_puncte_pol(PPunct p, int nr)
{
  int i;
  cout.precision(2);
  cout.width(6);
  cout.setf(ios::fixed, ios::floatfield);
  cout<<endl;
  for(i=0; i<nr; i++)
  {
     cout<<"p["<<i<<"].ro = "<<p[i].x<<"\t\t";
     cout<<"p["<<i<<"].fi = "<<(int)grad(p[i].y)<<endl;
  }
}
/*----------------------------------------------------------------*/
