# include # include # include using namespace std; int main ( ); void make_arrays ( int m, int **a, int n, int **b ); void i4vec_print ( int n, int a[], string title ); //****************************************************************************80 int main ( ) //****************************************************************************80 // // Purpose: // // MAIN is the main program for ARRAY_RETURN. // // Discussion: // // The correct form of this program was worked out with the somewhat // bemused assistance of Miro Stoyanov. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 03 February 2014 // // Author: // // John Burkardt // { int *a; int *b; int m; int n; cout << "\n"; cout << "ARRAY_RETURN:\n"; cout << " C++ version\n"; cout << " Create two arrays in a function, \n"; cout << " return them in the argument list.\n"; // // Specify the size of the arrays to be created. // m = 10; n = 5; make_arrays ( m, &a, n, &b ); // // Verify that the arrays were created and transferred properly. // i4vec_print ( m, a, " A as received by main:" ); i4vec_print ( n, b, " B as received by main:" ); // // Free memory. // delete [] a; delete [] b; // // Terminate. // cout << "\n"; cout << "ARRAY_RETURN:\n"; cout << " Normal end of execution.\n"; return 0; } //****************************************************************************80 void make_arrays ( int m, int **a, int n, int **b ) //****************************************************************************80 // // Purpose: // // MAKE_ARRAYS creates, sets, and returns two arrays using the argument list. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 03 February 2014 // // Author: // // John Burkardt // // Parameters: // // Input, int M, the desired size of the first array. // // Output, int **A, the first array. // // Input, int N, the desired size of the second array. // // Output, int **B, the second array. // { int i; // // We create PA and PB simply as a convenience. // They make the code a little more readable. // int *pa; int *pb; ( *a ) = new int[m]; pa = *a; for ( i = 0; i < m; i++ ) { pa[i] = 10 + i; } i4vec_print ( m, pa, " A as defined in MAKE_ARRAYS:" ); ( *b ) = new int[n]; pb = *b; for ( i = 0; i < n; i++ ) { pb[i] = 100 + 2 * i; } i4vec_print ( n, pb, " B as defined in MAKE_ARRAYS:" ); return; } //****************************************************************************80 void i4vec_print ( int n, int a[], string title ) //****************************************************************************80 // // Purpose: // // I4VEC_PRINT prints an I4VEC. // // Discussion: // // An I4VEC is a vector of I4's. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 14 November 2003 // // Author: // // John Burkardt // // Parameters: // // Input, int N, the number of components of the vector. // // Input, int A[N], the vector to be printed. // // Input, string TITLE, a title. // { int i; cout << "\n"; cout << title << "\n"; cout << "\n"; for ( i = 0; i < n; i++ ) { cout << " " << setw(8) << i << ": " << setw(8) << a[i] << "\n"; } return; }