```/* G02AA_A1W_F C++ Header Example Program.
*
* Copyright 2019 Numerical Algorithms Group.
* Mark 27, 2019.
*/

#include <nag.h>
#include <dco.hpp>
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string>

int main(void)
{
/* Integer scalar and array declarations */
Integer  exit_status = 0;
Integer  feval, i, iter, j, maxit, maxits, n;
Integer  pdg, pdx;

/* Double scalar and array declarations */
nagad_a1w_w_rtype *g = 0, *x = 0, *g_in = 0;
double   *xr =0, *dxdg = 0;
Integer  ifail;

printf("G02AA_A1W_F C++ Example Program Results\n\n");

/* Skip heading in data file */
#ifdef _WIN32
scanf_s("%*[^\n] ");
#else
scanf("%*[^\n] ");
#endif

/* Read in the problem size */
#ifdef _WIN32
scanf_s("%" NAG_IFMT "%*[^\n] ", &n);
#else
scanf("%" NAG_IFMT "%*[^\n] ", &n);
#endif

pdg = n;
pdx = n;
g = new nagad_a1w_w_rtype [n * n];
g_in = new nagad_a1w_w_rtype [n * n];
x = new nagad_a1w_w_rtype [n * n];
xr = new double [n * n];
dxdg = new double [n * n];

double tmp;
/* Read in the matrix g */
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
#ifdef _WIN32
scanf_s("%lf", &tmp);
#else
scanf("%lf", &tmp);
#endif
g_in[i+j*n] = tmp;
}
}
#ifdef _WIN32
scanf_s("%*[^\n] ");
#else
scanf("%*[^\n] ");
#endif

/* Set up method parameters */
errtol = 1.00e-7;
maxits = 200;
maxit = 10;

for (i = 0; i < n * n; i ++) {
g[i] = g_in[i];
}

g02aa_a1w_f_(ad_handle, g, pdg, n, errtol, maxits, maxit, x, pdx,
iter, feval, nrmgrd, ifail);
if (ifail != 0) {
printf("Error from G02AA_A1W_F.%" NAG_IFMT "\n",
ifail);
exit_status = 1;
goto END;
}
for (i=0; i < n*n; ++i) {
}
NagError  fail;
INIT_FAIL(fail);
x04cac(Nag_ColMajor,Nag_GeneralMatrix,Nag_NonUnitDiag,n,n,xr,n,
"     Nearest Correlation Matrix",0,&fail);

printf("\n\n Number of Newton steps taken:%11" NAG_IFMT "\n", iter);
printf(" Number of function evaluations:%9" NAG_IFMT "\n", feval);
if (nrmgrd > errtol)
printf(" Norm of gradient of last Newton step: %12.3e\n",

for (i = 0; i < n*n; i++) {
}

for (i = 0; i < n*n; ++i) {
}
printf("\n\n");
x04cac(Nag_ColMajor,Nag_GeneralMatrix,Nag_NonUnitDiag,n,n,dxdg,n,
"   (1,...,1)^T * dX/dG",0,&fail);
END:

// Remove computational data object and tape