// lab05.cpp   adolfo@di-mare.com

// ftp://ftp.prenhall.com/pub/deitel/C++_HTP/C++HTP2e/c++htp2e_examples.zip

// Fig. 5.6: fig05_06.cpp && Fig. 5.7: fig05_07.cpp
// Cube a variable using call-by-value && call-by-reference

#include <iostream.h>

int cuboPorValor( int n ) {
    return n * n * n;   // eleva al cubo la variable local n
}

void cuboNO( int k ) {
    k = k*k*k;   // eleva al cubo la variable local n
}

void cuboPorReferencia( int& k ) {
    k = k*k*k;   // eleva al cubo la variable en main()
}

int main_cube(void) {
    int n = 5;

    cout << endl << endl << "Valor original == " << n;

    cout << endl << "cuboPorValor(" << n << ") == "
         << cuboPorValor(n);

    cuboNO(n);
    cout << endl << "cuboNO() ==> " << n;

    cuboPorReferencia(n);
    cout << endl << "cuboPorReferencia() ==> " << n;

    return 0;
}

// Fig. 4.16: fig04_16.cpp
// This program sorts an array's values into ascending order
#include <iostream.h>
#include <iomanip.h>

int main_vector() {
    const int arraySize = 10;
    int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
    int i, hold;

    cout << "Data items in original order\n";

    for ( i = 0; i < arraySize; i++ ) {
        cout << setw( 4 ) << a[ i ];
    }

    for ( int pass = 0; pass < arraySize - 1; pass++ ) { // passes

        for ( i = 0; i < arraySize - 1; i++ )  {   // one pass

            if ( a[ i ] > a[ i + 1 ] ) {      // one comparison
                hold = a[ i ];                // one swap
                a[ i ] = a[ i + 1 ];
                a[ i + 1 ] = hold;
            }
        }
    }

   cout << "\nData items in ascending order\n";

    for ( i = 0; i < arraySize; i++ ) {
        cout << setw( 4 ) << a[ i ];
    }

    cout << endl;
    return 0;
}


// Fig. 4.19: fig04_19.cpp  ==> Linear search of an array
#include <iostream.h>

int linearSearch( const int [], int, int );

int main_linear() {
    const int arraySize = 100;
    int a[ arraySize ], searchKey, element;

    for ( int x = 0; x < arraySize; x++ ) { // create some data
        a[ x ] = 2 * x;
    }

    cout << "Enter integer search key:" << endl;
    cin >> searchKey;
    element = linearSearch( a, searchKey, arraySize );

    if ( element != -1 ) {
        cout << "Found value in element " << element << endl;
    }
    else {
        cout << "Value not found" << endl;
    }

    return 0;
}

int linearSearch( const int array[], int key, int sizeOfArray ) {
    for ( int n = 0; n < sizeOfArray; n++ ) {
        if ( array[ n ] == key ) {
            return n;
        }
    }

   return -1;
}

int main(void) {
    return main_cube();
    return main_vector();
    return main_linear();
}

// EOF: lab05.cpp
