ecco il codice:

codice:
//z(double,double) è la funzione implicita
//g(double,double) ritorna (z(x+0.001,y)-z(x,y))/0.001;

int main()
{

    for (double Y=0.003;Y<=1;Y+=0.001)
        {
            double x=-1;
            while (x<=1)
            {
                if (z(x,Y)>0)
                    {
                        double tm=x; //tm è il valore di x che poi verrà approssimato con il metodo delle tangenti all'ascissa del punto sul grafico
                         for (int i=0;i<10;i++) tm=tm-z(tm,Y)/g(tm,Y);
                        cout<<Y<<" "<<tm<<endl; //stampo il punto
                        while((z(x,Y)>0)&&(x<=1)) x+=0.01;
                    }

                else if (z(x,Y)<0) while(z(x,Y)<0) x+=0.01;
                else {cout<<Y<<" "<<x<<endl; x+=0.01;}
            }

             getchar();
        }
}
per alcune funzioni (come la circonferenza) funziona alla perfezione, per altre (come una qualsiasi parabola) entra in loop in prossimità del ciclo while (x<=1)