Pasar Array de una funcion a otra

Iniciado por YDOM, 31 Mayo 2014, 23:31 PM

0 Miembros y 1 Visitante están viendo este tema.

YDOM

que tal Foro, les pido el favor que me colaboren con este problema...

el problema me pida que llene un vector1[] en una funcion1() y luego en una funcion2() se muestren los valores del vector[1]...

les dejo el codigo de lo que he trabajado...



int AnhiadirArticulos()
{
    int art, tran, op, cod;
    int cantrecibida, cantvendida;

    system("cls");

    cout << endl << endl;
    cout<<"CON CUANTOS ARTICULOS INICIA EL ALMACEN:  ";
    cin>>art;

    int codigo[art];
    int cantidad[art];

    for ( int i=1; i<=art; i++ )
    {
        system("cls");

        cout << endl << endl;
        cout << "INGRESE EL ARTICULO " << i << endl;
        cout << "CODIGO    ";
        cin >> codigo[i];
        cout << "CANTIDAD  ";
        cin >> cantidad[i];
    }

    VerArticulos( codigo[art], cantidad[art] );
    menu();

    return 0;
}


el contenido de este vector tengo que pasarlo a este otro...

int VerArticulos( int codigo, int cantidad )
{
    int art;
    int codigo[art], articulo[art];

    system("cls");

    cout << endl << endl;
    cout << "CODIGO\t\tARTICULO" << endl << endl;

    for ( int i=1; i<=art; i++ )
    {
        cout << codigo[i] << "\t\t" << articulo[i];
    }

    cout << "PRESIONE UNA TECLA PARA IR AL MENU";
    cin.get();
    cin.get();

    menu();

    return 0;
}



y esto es parte de la cabecera del programa

...

int AnhiadirArticulos();
int Transacciones();
int VerArticulos( int codigo[], int cantidad[] );

int menu()
{
   int opcion, codigo, cantidad;
    .....
   cin >> opcion;

   switch ( opcion )
   {
   case 1:
       AnhiadirArticulos();
       break;
   case 2:
       VerArticulos( int codigo, int cantidad );
       break;
   case 3:
       Transacciones();
       break;
   case 4:
       return 0;
       break;
   default:
       cout << "OPCION INVALIDA, INTENTE DE NUEVO";
       menu();
   }

   return 0;
}


Si le das a alguien un programa, lo frustarás un día. Si le enseñas a programar, lo frustarás toda la vida.

MS Windows 7 Ultimate 64-bit
AMD Phenom II X4 955 3.2GHz
4,0GB RAM, NVIDIA GeForce 9400 GT

ivancea96

#1
Código (cpp) [Seleccionar]
int VerArticulos( int codigo, int cantidad )

int VerArticulos( int codigo[], int cantidad[] );


Tienes esas 2 declaraciones en diferentes partes. Usa la segunda.


EDITO:

Código (cpp) [Seleccionar]
void func(int a[]){
}

int main(){
    int var[10];
    func(var);
}


Eso es un ejemplo. Espero que te sirva :o

YDOM

pues me ha quedado asi...

Código (cpp) [Seleccionar]

/// variables globales

int AnhiadirArticulos();
int Transacciones();
int VerArticulos( int codigo[], int cantidad[] );



Citar

Código (cpp) [Seleccionar]

/// funcion que llama los articulos
    case 2:
        VerArticulos( codigo[art], cantidad[art] );
        break;

  aqui me lanza estos errores

  /// C:\Users\...s\Downloads\13 funciones.cpp||In function 'int menu()':|
  /// C:\Users\...\Downloads\13 funciones.cpp|30|error: invalid types 'int[int]' for array subscript|
  /// C:\Users\...\Downloads\13 funciones.cpp|30|error: invalid types 'int[int]' for array subscript|
  /// ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|


Citar
y estas son las funciones que hacen el trabajo
Código (cpp) [Seleccionar]

int AnhiadirArticulos()
{
    int art, tran, op, cod;
    int cantrecibida, cantvendida;

    cout<<"CON CUANTOS ARTICULOS INICIA EL ALMACEN:  ";
    cin>>art;

    int codigo[art];
    int cantidad[art];

    for ( int i=1; i<=art; i++ )
    {
        system("cls");

        cout << endl << endl;
        cout << "INGRESE EL ARTICULO " << i << endl;
        cout << "CODIGO    ";
        cin >> codigo[i];
        cout << "CANTIDAD  ";
        cin >> cantidad[i];
    }

    VerArticulos( codigo, cantidad );
}

int VerArticulos( int codigo[], int cantidad[] )
{
    int art;

   for ( int i=1; i<=art; i++ )
    {
        cout << codigo[i] << "\t\t" << cantidad[i];
    }
}


Si le das a alguien un programa, lo frustarás un día. Si le enseñas a programar, lo frustarás toda la vida.

MS Windows 7 Ultimate 64-bit
AMD Phenom II X4 955 3.2GHz
4,0GB RAM, NVIDIA GeForce 9400 GT

MessageBoxA

tienes que inicializar esta variable

Código (cpp) [Seleccionar]
int art;
SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++

kaiserr

Cita de: YDOM en  1 Junio 2014, 01:15 AM
pues me ha quedado asi...

Código (cpp) [Seleccionar]

   for ( int i=1; i<=art; i++ )
   {
       cout << codigo[i] << "\t\t" << cantidad[i];
   }
}





mmmm los arrays empiezan en el 0.
y como dicen arriba mio, te falta declarar algunas variables.

YDOM


Cita de: MessageBoxA en  1 Junio 2014, 01:31 AM
tienes que inicializar esta variable

Código (cpp) [Seleccionar]
int art;

aqui esta y el error continua, no si es que estoy declarando en el sitio incorrecto la variable, pero hay esta...

Código (cpp) [Seleccionar]
using namespace std;

[.....]

int AnhiadirArticulos();
int Transacciones();
int VerArticulos( int codigo[], int cantidad[], int art );

int menu()
{
    int opcion, codigo, cantidad, art;
   
     [.....]

    case 2:
        VerArticulos( codigo[art], cantidad[art], art );
        break;
    case 3:
        Transacciones();
        break;
    case 4:
        return 0;
        break;
    default:
        cout << "OPCION INVALIDA, INTENTE DE NUEVO";
        menu();
    }

    return 0;
}

int AnhiadirArticulos()
{
    int art, tran, op, cod;
    int cantrecibida, cantvendida;

    system("cls");

    cout << endl << endl;
    cout<<"CON CUANTOS ARTICULOS INICIA EL ALMACEN:  ";
    cin>>art;

    int codigo[art];
    int cantidad[art];

    for ( int i=0; i<=art; i++ )
    {
        system("cls");

        cout << endl << endl;
        cout << "INGRESE EL ARTICULO " << i << endl;
        cout << "CODIGO    ";
        cin >> codigo[i];
        cout << "CANTIDAD  ";
        cin >> cantidad[i];
    }

    VerArticulos( codigo, cantidad, art );

    menu();

    return art;
}

int VerArticulos( int codigo[], int cantidad[], int art )
{
    int art;

       [.....]

    for ( int i=0; i<=art; i++ )
    {
        cout << codigo[i] << "\t\t" << cantidad[i];
    }

        [.....]

    menu();

    return art;
}

     [.....]
/// Erro que manda el programa...
/// C:\Users\Foto Artes\Downloads\13 funciones.cpp||In function 'int menu()':|
/// C:\Users\Foto Artes\Downloads\13 funciones.cpp|30|error: invalid types 'int[int]' for array subscript|
/// C:\Users\Foto Artes\Downloads\13 funciones.cpp|30|error: invalid types 'int[int]' for array subscript|
/// ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|


Si le das a alguien un programa, lo frustarás un día. Si le enseñas a programar, lo frustarás toda la vida.

MS Windows 7 Ultimate 64-bit
AMD Phenom II X4 955 3.2GHz
4,0GB RAM, NVIDIA GeForce 9400 GT

MessageBoxA

Código (cpp) [Seleccionar]
int menu()
{
    int opcion, codigo, cantidad, art;   //estas diciendo que "codigo" y "cantidad" son variables enteras!!!

     [.....]

    case 2:
        VerArticulos( codigo[art], cantidad[art], art ); // y aqui estas diciendo que son vectores.
        break;
    case 3:
        Transacciones();
        break;
    case 4:
        return 0;
        break;
    default:
        cout << "OPCION INVALIDA, INTENTE DE NUEVO";
        menu();
    }

    return 0;
}


conclusion: ¿o son vectores, o son variables enteras?
SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++

YDOM

que tal chicos, miren le he hecho otras modificaciones al programa pero aun me sigue arrojando problemas, debo decirles que es la primera vez que hago esto de pasar arrays entre funciones.  :-\ 


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <iostream>
#include <cstdlib>

using namespace std;

int AnhiadirArticulos();
int Transacciones( int );
int VerArticulos( const int art, int codigo[], int cantidad[] );

int menu()
{
    int opcion, art, codigo[0], cantidad[0];
    system("cls");
    cout << endl << endl;
    cout << "MARQUE << 1 >> PARA VER NUESTROS ARTICULOS" << endl;
    cout << "MARQUE << 2 >> PARA HACER   TRANSACCIONES" <<  endl;
    cout << "MARQUE << 3 >> PARA  SALIR   DEL  PROGRAMA" << endl;
    cout << "MARQUE UNA OPCION PARA CONTINUAR        ";
    cin >> opcion;

    system("cls");

    switch ( opcion )
    {
    case 1:
        VerArticulos( art, codigo, &cantidad[0] );
        break;
    case 2:
        Transacciones( art );
        break;
    case 3:
        return 0;
        break;
    default:
        cout << "OPCION INVALIDA, INTENTE DE NUEVO";
        menu();
    }

    return 0;
}

int AnhiadirArticulos()
{
    int art, tran, op, cod;
    art = tran = op = cod = 0;

    system("cls");

    cout << endl << endl;
    cout<<"CON CUANTOS ARTICULOS INICIA EL ALMACEN:  ";
    cin>>art;

    int codigo[art];
    int cantidad[art];

    for ( int i=0; i<art; i++ )
    {
        system("cls");

        cout << endl << endl;
        cout << "INGRESE EL ARTICULO " << i+1 << endl;
        cout << "CODIGO    ";
        cin >> codigo[i];
        cout << "CANTIDAD  ";
        cin >> cantidad[i];
    }

    VerArticulos( art, codigo, &cantidad[0] );
    /* aqui cuando llama a la funcion VerArticulos() me muestra la lista de los articulos sin problemas,
        pero cuando me sale el menu principal y le digo que me muestre la lista de articulos "funcion de mas abajo"
        me imprime una secuencia de numeros sin sentido alguno y al final me arroja unos ceros "0" y se cierra el programa...*/
   
    return 0;
}

int VerArticulos( int art, int codigo[], int cantidad[] )
{
    system("cls");

    cout << endl << endl;
    cout << "CODIGO\t\tCANTIDAD" << endl << endl;

    for ( int i=0; i<art; i++ )
    {
        cout << codigo[i] << "\t\t" << cantidad[i] << endl;
    }

    cout << endl << endl;
    cout << "PRESIONE UNA TECLA PARA IR AL MENU";
    cin.get();
    cin.get();

    menu();

    return 0;
}

int Transacciones( int art )
{
    int tran, op, cod;
    int cantrecibida, cantvendida;
    int codigo[0], cantidad[0];

    cout << endl;
    cout<<"TRANSSACCIONES POR DIA  ";
    cin>>tran;

    for( int l=0; l<tran; l++)
    {
        system("cls");

        cout<<" MARQUE << 1 >> SI ES PROVEERDOR"<<endl;
        cout<<" MARQUE << 2 >> SI ES UN CLIENTE"<<endl;
        cout<<" MARQUE UNA OPCION PARA        "<<endl;
        cin>>op;

        if( op == 1 )
        {
            cout<<"INGRESE CODIGO DEL ARTICULO    "<<endl;
            cin>>cod;

            for ( int j=0; j<art; j++ )
            {
                if ( cod == codigo[j] )
                /* en esta parte del codigo me arroja siempre un error diciendome que el articulo no existe
                    osea toma el "else" de este "if" lo mismo pasa con la condicional de mas abajo*/
                {
                    cout << "CUANTOS ARTICULOS INGRESARAN    ";
                    cin >> cantrecibida;
                    cantidad[j] = cantidad[j] + cantrecibida;
                    cout << "MUCHAS GRACIAS, TRANSACCION EXITOSA";
                    cout << "EXISTEN " << cantidad[j] << " UNIDADES DEL ARTICULO" << endl << endl;
                }
                else
                {
                    cout << "EL CODIGO INGRESADO NO ES CORRECTO" << endl;
                    cout << "PRESIONE UNA TECLA PARA IR AL MENU ";
                    cin.get();
                    cin.get();
                    system("cls");
                    menu();
                }

            }
        }
        else if ( op == 2 )
        {
            cout<<"INGRESE CODIGO DEL ARTICULO "<<endl;
            cin>>cod;

            for ( int j=0; j<art; j++ )
            {
                if ( cod == codigo[j] )
                {
                    cout << "ARTICULOS VENDIDOS     ";
                    cin >> cantvendida;
                    cantidad[j] = cantidad[j] - cantvendida;
                    cout << "MUCHAS GRACIAS, TRANSACCION EXITOSA";
                    cout << "EXISTEN " << cantidad[j] << " UNIDADES DEL ARTICULO" << endl << endl;
                }
                else
                {
                    cout << "EL CODIGO INGRESADO NO ES CORRECTO" << endl;
                    cout << "PRESIONE UNA TECLA PARA IR AL MENU ";
                    cin.get();
                    cin.get();
                    system("cls");
                    menu();
                }
            }
        }
        else
        {
            cout << "DIGITO UN DATO INVALIDO, POR FAVOR" << endl;
            cout << "PRESIONE UNA TECLA PARA CONTINUAR ";
            cin.get();
            cin.get();
            int main();
        }
    }

    return art;
}

int main()
{
    AnhiadirArticulos();
    menu();

    return 0;
}


Código (error) [Seleccionar]

||=== Build: Debug in 13 (compiler: GNU GCC Compiler) ===|
E:\C++\13\main.cpp||In function 'int menu()':|
E:\C++\13\main.cpp|27|warning: 'art' may be used uninitialized in this function [-Wmaybe-uninitialized]|
||=== Build finished: 0 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
Si le das a alguien un programa, lo frustarás un día. Si le enseñas a programar, lo frustarás toda la vida.

MS Windows 7 Ultimate 64-bit
AMD Phenom II X4 955 3.2GHz
4,0GB RAM, NVIDIA GeForce 9400 GT

MessageBoxA

sucede q hay valores que no pasas por referencia

fijate de las modifcaciones que le hice (solo para que funcionara la funcion de mostrar el inventario), para la funcion de transacciones te tocara hacer lo mismo

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <iostream>
#include <cstdlib>

using namespace std;
int  art=0, *codigo, *cantidad;
int menu(int art, int &codigo, int &cantidad);
int AnhiadirArticulos();
int Transacciones(int art);
int VerArticulos(int art, int codigo[], int cantidad[] );

int menu(int art, int &codigo, int &cantidad)
{
    int opcion;
    system("cls");
    cout << endl << endl;
    cout << "MARQUE << 1 >> PARA VER NUESTROS ARTICULOS" << endl;
    cout << "MARQUE << 2 >> PARA HACER   TRANSACCIONES" <<  endl;
    cout << "MARQUE << 3 >> PARA  SALIR   DEL  PROGRAMA" << endl;
    cout << "MARQUE UNA OPCION PARA CONTINUAR        ";
    cin >> opcion;
    system("cls");

    switch ( opcion )
    {
    case 1:
        VerArticulos( art, &codigo, &cantidad);
        break;
    case 2:
        Transacciones( art );
        break;
    case 3:
        return 0;
        break;
    default:
        cout << "OPCION INVALIDA, INTENTE DE NUEVO";
        //menu(art, &codigo, &cantidad);
    }

    return 0;
}

int AnhiadirArticulos()
{
    int tran=0, op=0, cod=0;

    system("cls");

    cout << endl << endl;
    cout<<"CON CUANTOS ARTICULOS INICIA EL ALMACEN:  ";
    cin>>art;

    int codigo[art];
    int cantidad[art];

    for ( int i=0; i<art; i++ )
    {
        system("cls");

        cout << endl << endl;
        cout << "INGRESE EL ARTICULO " << i+1 << endl;
        cout << "CODIGO    ";
        cin >> codigo[i];
        cout << "CANTIDAD  ";
        cin >> cantidad[i];
    }

    VerArticulos( art, codigo, cantidad);
    /* aqui cuando llama a la funcion VerArticulos() me muestra la lista de los articulos sin problemas,
        pero cuando me sale el menu principal y le digo que me muestre la lista de articulos "funcion de mas abajo"
        me imprime una secuencia de numeros sin sentido alguno y al final me arroja unos ceros "0" y se cierra el programa...*/

    return 0;
}

int VerArticulos(int art, int codigo[], int cantidad[])
{
    system("cls");

    cout << endl << endl;
    cout << "CODIGO\t\tCANTIDAD" << endl << endl;

    for ( int i=0; i<art; i++ )
    {
        cout << codigo[i] << "\t\t" << cantidad[i] << endl;
    }

    cout << endl << endl;
    cout << "PRESIONE UNA TECLA PARA IR AL MENU";
    cin.get();
    cin.get();

    menu(art,*codigo,*cantidad);

    return 0;
}

int Transacciones(int art )
{
    int tran, op, cod;
    int cantrecibida, cantvendida;
    int codigo[0], cantidad[0];

    cout << endl;
    cout<<"TRANSSACCIONES POR DIA  ";
    cin>>tran;

    for( int l=0; l<tran; l++)
    {
        system("cls");

        cout<<" MARQUE << 1 >> SI ES PROVEERDOR"<<endl;
        cout<<" MARQUE << 2 >> SI ES UN CLIENTE"<<endl;
        cout<<" MARQUE UNA OPCION PARA        "<<endl;
        cin>>op;

        if( op == 1 )
        {
            cout<<"INGRESE CODIGO DEL ARTICULO    "<<endl;
            cin>>cod;

            for ( int j=0; j<art; j++ )
            {
                if ( cod == codigo[j] )
                /* en esta parte del codigo me arroja siempre un error diciendome que el articulo no existe
                    osea toma el "else" de este "if" lo mismo pasa con la condicional de mas abajo*/
                {
                    cout << "CUANTOS ARTICULOS INGRESARAN    ";
                    cin >> cantrecibida;
                    cantidad[j] = cantidad[j] + cantrecibida;
                    cout << "MUCHAS GRACIAS, TRANSACCION EXITOSA";
                    cout << "EXISTEN " << cantidad[j] << " UNIDADES DEL ARTICULO" << endl << endl;
                }
                else
                {
                    cout << "EL CODIGO INGRESADO NO ES CORRECTO" << endl;
                    cout << "PRESIONE UNA TECLA PARA IR AL MENU ";
                    cin.get();
                    cin.get();
                    system("cls");
                    menu(art,*codigo,*cantidad);
                }

            }
        }
        else if ( op == 2 )
        {
            cout<<"INGRESE CODIGO DEL ARTICULO "<<endl;
            cin>>cod;

            for ( int j=0; j<art; j++ )
            {
                if ( cod == codigo[j] )
                {
                    cout << "ARTICULOS VENDIDOS     ";
                    cin >> cantvendida;
                    cantidad[j] = cantidad[j] - cantvendida;
                    cout << "MUCHAS GRACIAS, TRANSACCION EXITOSA";
                    cout << "EXISTEN " << cantidad[j] << " UNIDADES DEL ARTICULO" << endl << endl;
                }
                else
                {
                    cout << "EL CODIGO INGRESADO NO ES CORRECTO" << endl;
                    cout << "PRESIONE UNA TECLA PARA IR AL MENU ";
                    cin.get();
                    cin.get();
                    system("cls");
                    menu(art,*codigo,*cantidad);
                }
            }
        }
        else
        {
            cout << "DIGITO UN DATO INVALIDO, POR FAVOR" << endl;
            cout << "PRESIONE UNA TECLA PARA CONTINUAR ";
            cin.get();
            cin.get();
            int main();
        }
    }

    return art;
}

int main()
{
    AnhiadirArticulos();
    menu(art,*codigo,*cantidad);

    return 0;
}
SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++