Dev - C++ - Error pasando array entre funciones

   
Vista:

Error pasando array entre funciones

Publicado por Ing (3 intervenciones) el 01/06/2014 06:57:44
Que tal comunidad, agradezco si me pueden ayudar con este programa, estoy intentando hacer que la funcion VerArticulos() muestre el vector que se llena en la funcion AnhiadirArtciulos() pero no tengo idea de como hacerlo...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int AnhiadirArticulos();
int Transacciones();
int VerArticulos( const int art, int codigo[], int cantidad[] );
 
int menu()
{
    int opcion, art, codigo[art], cantidad[art];
 
    [...]
 
   cin >> opcion;
 
    [...]
 
    case 2:
        VerArticulos( art, codigo[art], cantidad[art] );
        break;
 
     [...]
 
    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( art, &codigo[art], &cantidad[art] );
 
    menu();
 
    return art;
}
 
int VerArticulos( int codigo[], int cantidad[] )
 {
    int art;
 
    system("cls");
 
    cout << endl << endl;
    cout << "CODIGO\t\tARTICULO" << endl << endl;
 
    for ( int i=1; i<=art; i++ )
    {
        cout << codigo[i] << "\t\t" << cantidad[i];
    }
 
    [...]
 
    return 0;
}
 
int Transacciones()
{
     [...]
}
 
int main()
{
    menu();
 
    return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error pasando array entre funciones

Publicado por Pico (24 intervenciones) el 01/06/2014 09:30:10
En la función VerArticulos no tienes declarado el parámetro int art.

Cuando la llamas VerArticulos( art, codigo[art], cantidad[art] ) con codigo[art] estás pasándole como parámetro un int, el que está en la posición art de la tabla, fuera, por cierto, cuado no es eso lo que espera.

Cuando la llamas VerArticulos( art, &codigo[art], &cantidad[art] ) con &codigo[art] estás pasándole como parámetro un puntero a un int, que sí es lo que espera, pero le mandas el puntero a un valor que está fuera de la tabla. Tienes que mandarle un puntero al inicio de la tabla, VerArticulos( art, &codigo[0], &cantidad[0] ).

Y eso de int art; int cantidad[art] no creo que te funcione, pues al momento de compilar no se sabe el valor de art.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

Error pasando array entre funciones

Publicado por vangodp (287 intervenciones) el 01/06/2014 10:28:34
Hay 2 formas de pasar un array. Pero antes debes saber que es lo que espera una funcion de este tipo: función(array[ ])... para entenderlo.

cuando una función espera espera un array no hace falta decir el tamaño. Solo tienes que decir cual es el inicio.
¿cual es el inicio de una cadena?Pues la posicion 0 pues un array es igual. lo pasas la posicion 0 de ese array.
Si no sabes como es un array pues te dire que en la memoria un array se almacena consecutivamente.
Si yo creo un array asi: array [5];
en memoria esta así: [array0][array1][array2][array3][array4] ¿correcto? va uno detraz de otro no tienes por que decir el tamaño, solo donde esta el final. Es cuando vayas a trabajar con el que debes saber su tamaño.
Basicamente si ves eso: función(array[ ]) toma como que espera la primera posición ok. Ahora pasemosle la primera posicion. Hay 2 formas de hacer eso.
La primera forma de pasar un array es pasando solo su nombre array...eso es asi por que array es un puntero a la primera casilla del array. Si paso array es como si paso &array[0].
Logicamente ya sabes cual es la segunda forma...es &array[0]
ahora te lo demuestro con tu código mismo arraglado.
El menu daba muchos problemas asi que mejor lo implementas ahora que ya te funciona las funciones ;)
http://codepad.org/AOZq00ng#line-30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdio.h>
//#include <conio.h>
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int AnhiadirArticulos();
int Transacciones();
int VerArticulos ( const int art, int codigo[], int cantidad[] );
 
int menu() {
	//vuelve a hacer el menu XD
	//int opcion, art, codigo[art], cantidad[art];	    
    //cin >> opcion;
	//VerArticulos ( art, codigo[art], cantidad[art] );
	return 0;
}
 
int AnhiadirArticulos(){
    int art, tran, op, cod;
    art = tran = op = cod = 0;
    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+1 << endl;
        cout << "CODIGO    ";
        cin >> codigo[i];
        cout << "CANTIDAD  ";
        cin >> cantidad[i];
    }
 
    VerArticulos( art, codigo, &cantidad[0] );
 
    menu();
 
    return art;
}
 
 
int VerArticulos ( int art, int codigo[], int cantidad[] ) {
 
 
	system ( "cls" );
 
	cout << endl << endl;
	cout << "CODIGO\t\tARTICULO" << endl << endl;
 
	for ( int i = 0; i<art; i++ ) {
		cout << codigo[i] << "\t\t" << cantidad[i] << endl;
	}
 
	//[...]
 
	return 0;
}
 
int Transacciones() {
	//[...]
}
 
int main() {
    AnhiadirArticulos();
 
	return 0;
}
Como ves tienes la funcion int

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

y le pasamos:

VerArticulos( art, codigo, &cantidad[0] )

código de una forma y cantidad de otra forma pero ambas son equivalentes ;)

practica con eso por que es muy importante.

Ahora solo te falta el menu
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Error pasando array entre funciones

Publicado por Ing (3 intervenciones) el 01/06/2014 22:13:26
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. :-\


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#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;
}

estos son los errores que me muestra al compilar

1
2
3
4
||=== 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)) ===|
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

Error pasando array entre funciones

Publicado por vangodp (287 intervenciones) el 02/06/2014 13:02:12
Ola compañero haga un favor de pegar su código aqui por que cada vez que me lo pasas me sale una sola linea con todos los códigos. http://codepad.org/
Es un fastidio lo siento

pero lo que te dice es que cuando llamas a:
case 2:
Transacciones( art );
break;

art no le has dado ningun valor. Ademas no es ningun error sino un aviso.
Inicializa dicha variable con un valor aun que sea 0 a ver que te dice.
Ojo, no es porque sea un aviso que las consecuencias no pueden ser catastróficas en tu programa ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error pasando array entre funciones

Publicado por Ing (3 intervenciones) el 03/06/2014 06:28:02
aqui dejo el codigo

Digamos que he logrado solucionar el problema de los arrays, pues ya cumplen con lo que requeria, pero mi nuevo problema es que cuando por ejemplo un proveedor ingresa un nuevo articulo, como puedo hacer para que ese articulo se coloque al final del vector existente...

espero hacerme entender
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Error pasando array entre funciones

Publicado por xve (56 intervenciones) el 03/06/2014 11:13:50
Hola vangodp, eso es porque utilizas Firefox, con Chrome por ejemplo, esto no te sucede.

En Firefox, tienes que seleccionar el código y pulsar el botón derecho y seleccionar: View Selection Source en castellano seria algo como: Visualizar el codigo seleccionado... ahi podrás copiarlo sin problema.

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error pasando array entre funciones

Publicado por Pico (24 intervenciones) el 03/06/2014 12:08:58
Sirve.

El Firefox no pone retornos de línea de ningún tipo, ni unix, ni windows ni, nada. Se ve que separa cada línea con un analizador de código, que sabe cuándo acaba una línea y empieza otra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar