Foros del Web » Programación » C/C++ »

Pasar/recibir arreglo bidimensional a una funcion

Estas en el tema de Pasar/recibir arreglo bidimensional a una funcion en el foro de C/C++ en Foros del Web. Hola a todos, Realmente necesito de su ayuda, tengo una gran confusion... Tengo un codigo en el cual creo un arreglo empleado y lo lleno ...
  #1 (permalink)  
Antiguo 07/11/2008, 11:47
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 8 años
Puntos: 0
Pasar/recibir arreglo bidimensional a una funcion

Hola a todos,

Realmente necesito de su ayuda, tengo una gran confusion...

Tengo un codigo en el cual creo un arreglo empleado y lo lleno por pantalla. Construyo el arreglo en el main pero al pasarselo a la funcion no lo hace yme arroja error. He probado de esta forma:


int main(){
while (cant_vend == 0)
{
printf ("Introduzca la cantidad de vendedores a Registrar: ");
scanf ("%i", &cant_vend);
if (cant_vend <= 0){
printf ("ERROR: Introduzca un valor mayor a 0");
cant_vend = 0;
}
}
cant_vend = cant_vend -1;
j = 1;
char vendedores [cant_vend][j];
cargar_vendedor(&vendedores,cant_vend,j)

}


****** En el main construi el arreglo ahora se lo paso a la funcion la cual lo va llenar****

int cargar_vendedor (char *vend, int a, int b){

//Recibe el arreglo de vendedores tipo char y lo llena por pantalla mediante un for
char e, d;
int x;
for (i=0; i<=cant_vend; i++){
while (x==0){ //valida que el codigo del vendedor no este repetido
printf ("Introduzca el codigo del vendedor: ");
scanf ("%c",&e);
for (l = i; l = 0; l--){
if (*vend[l][0]== e){
printf ("ERROR: El codigo existe");
x=0;
l=0;
}else{
x = 1;
vend [i][0] = e;
}
}
printf ("Introduzca el nombre: ");
scanf ("%c", &d);
vend [i][1] = d;

}
}

}

*****************Me sale el siguiente error*******************
C:\Dev-Cpp\vendedores.cpp:48: error: cannot convert `char (*)[((unsigned int)((int)cant_vend))][((unsigned int)((int)j))]' to `char*' for argument `1' to `int cargar_vendedor(char*, int, int)'.

C:\Dev-Cpp\vendedores.cpp:48: error: cannot convert `char (*)[((unsigned int)((int)cant_vend))][((unsigned int)((int)j))]' to `char*' for argument `1' to `int cargar_vendedor(char*, int, int)'


Por favor ayudenme.... Gracias
  #2 (permalink)  
Antiguo 08/11/2008, 05:29
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 7 años, 1 mes
Puntos: 7
Respuesta: Pasar/recibir arreglo bidimensional a una funcion

No es la mejor forma, pero es válida.


Código PHP:

#include <stdio.h>

#define TAMX 2
#define TAMY 2

void funcion(int matriz[][TAMY]);

int main (int nargchar **argv) {

   
int matriz[TAMX][TAMY] = {{12}, {34}};
   
   
funcion(matriz);
   
   return 
0;
}

void funcion(int matriz[][TAMY]) {
    
int i=0;
    
int j=0;
    
    for(; 
TAMXi++) {
    for(
j=0TAMYj++) {
        
printf("%d "matriz[i][j]);
    }
    
    
printf("\n");
    }

  #3 (permalink)  
Antiguo 10/11/2008, 06:25
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 8 años
Puntos: 0
Respuesta: Pasar/recibir arreglo bidimensional a una funcion

Gracias por responder, lo que pasa es que la dimension del arreglo tiene que decidirla el usuario por pantalla y necesito modificar, actualizar el contenido de esos arreglo, por eso necesito pasarlos por referencia y no pr valor como lo hace en el ejericio.

:( Alguna ayudita, por fis??
  #4 (permalink)  
Antiguo 10/11/2008, 09:22
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 7 años, 1 mes
Puntos: 7
Respuesta: Pasar/recibir arreglo bidimensional a una funcion

Ah.. bien.

Como no hacías uso de punteros imaginé que sólo querias ver paso de matrices a funciones.

Para hacer un paso por referencia sólo tienes que tener en cuenta la declaración de la función, puesto que el nombre de la matriz ya es un puntero.

Código PHP:
   void cambiaMatriz(int (*matriz)[NUM_FILAS]);

   [...]

   
int matriz[NUM_COL][NUM_FIL];

   
cambiaMatriz(matriz);

   [...] 

Para acceder a los elementos hazlo con la forma:

Código PHP:
   *(*(matriz+NUM_COL)+NUM_FIL
  #5 (permalink)  
Antiguo 12/11/2008, 06:33
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 8 años
Puntos: 0
Respuesta: Pasar/recibir arreglo bidimensional a una funcion

Gracias Xinef por responder, el codigo me corre maravilloso si colo el numero de filas fijo, pero si coloco el numero de filas una variable que obtiene un valor entero por pantalla ahi no compila. y tambien me pasa que cuando hago el for para llenar y validar se vuelve un pastel el programa, en vez de pedirme primero el codigo del vendedor y segundo el nombre. me pide 5 veces el primero.


for (i=0; i<=cant_vend; i++){
while (x==0){ //valida que el codigo del vendedor no este repetido
printf ("Introduzca el codigo del vendedor: ");
scanf ("%c",&e);
for (l = i; l = 0; l--){

if (*(*(vend+ 0)+l)== e){
printf ("ERROR: El codigo existe");
x=0;
l=0;
}else{
x = 1;

*(*(vend +0)+i) = e;
}
}
printf ("Introduzca el nombre: ");
scanf ("%c", &d);


*(*(vend+1)+ i) = d;

}
}

:(. Alguna ayuda, please?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:21.
SEO by vBSEO 3.3.2