• Jueves 18 de Abril de 2024, 08:21

Autor Tema:  Pasar Una Tabla A Un Procedimiento  (Leído 1803 veces)

-SB-

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Pasar Una Tabla A Un Procedimiento
« en: Martes 9 de Marzo de 2004, 18:27 »
0
Hola.

No he utilizado mucho el lenguaje de prorgamacion c y me veo ante un gran problema a la hora de pasar una tabla a una funcion (y que esta la modifique).

Hasta ahora para realizar esta tarea, he definido la tabla como una variable global y luego modificado su valor con las funciones, pero quiero hacer funciones un poco mas independientes, por ejemplo si quiero una funcion que sume 1 a cada elemento de la tabla, como puedo hacerla?

void suma1(int *n[], int long)
//La tabla n tiene long elementos.
//Suma uno a cada elemento de la tabla n.

a la que se le llamaria asi:

main()
{int v[CTE];
...
suma1(&v, CTE);
...
}

¿Como se podria implementar la funcion suma1?


Muxas gracias  :hola:

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Pasar Una Tabla A Un Procedimiento
« Respuesta #1 en: Martes 9 de Marzo de 2004, 20:07 »
0
Mira, en C/C++ los vectores "son punteros", verdadermante si tuvieras este caso:
char vec[10];
Verdaderamente "vec" no existe en ningun lado (antes q nada se q esto va a generar q lluevan mails diciendo q esta diciendo este pibe????, pero si uno hiciera un printf("%s", vec); esto imprimiria basura hasta encontrar un /0 en memoria), lo q si existe es vec. vec vendria a ser una direccion de memoria, por lo tando, por ser un valor, no podra ser modificada. vec como variable no existe, a eso es a lo q me referia.
Debido a q los vectores son punteros ( a la posicion donde se encuentran los datos), cuando llamas a una funcion le estas pasando la direccion de memoria de tu vector, por lo tanto no la tenes q pasar por referencia, simplemente asi:

void main(void)
{
long vec[10];
long incremento;
CargarVector();//Funcion q carga el vector
TuFuncion(vec, incremento); //le estas pasando vec, q es la direccion de memoria del primer elemento del contenido del vector
//bla bla


}
 :blink:
Salu2!!!!

-SB-

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: Pasar Una Tabla A Un Procedimiento
« Respuesta #2 en: Miércoles 10 de Marzo de 2004, 12:36 »
0
¡Muchas gracias! :D

1 Saludo!

-SB-

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: Pasar Una Tabla A Un Procedimiento
« Respuesta #3 en: Domingo 21 de Marzo de 2004, 23:37 »
0
Bueno, ahora tengo otro problemilla, a ver si me lo podeis solucionar:

Teniendo una tabla bidimensional, por ejemplo:

main()
{ int v[5][5];
...
}

Intento pasarsela a una funcion para que la modifique asi:
void nombre(int tabla[][]);

y me da un error de compilacion.
(si la funcion la defino poniendo ...tabla[5][5].. no tengo problema, pero puesto que el tamaño de la tabla no va a ser siempre el mismo, esto no me vale..

Alguien me puede explicar como hacerlo en este caso?

Gracias,

SB.

desorden

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Pasar Una Tabla A Un Procedimiento
« Respuesta #4 en: Lunes 22 de Marzo de 2004, 02:31 »
0
Puedes hacerlo pasando como parámetro el primer elemento de la tabla, pero de alguna manera tendrás que controlar cuando llegas al final. Por ejemplo, si en tus tablas almacenas números positivos, que el último elemento de cada una de ellas sea un número negativo.

Un saludo...
desorden

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Pasar Una Tabla A Un Procedimiento
« Respuesta #5 en: Lunes 22 de Marzo de 2004, 13:58 »
0
Cuando pasas una matriz por parametro a una funcion/metodo, es igual q cuando pasas un vector, porque una matriz es un vector de vectores si lo queres pensar de esa forma.
Ahora, todo tiene su particularidad : "En C es obligatorio especificar las dimenciones de cada uno de los vectores de un array ndimencional,
con excepción del primero en el pasaje por parametro." por lo q deberias saber de antemano el tamaño maximo de las filas de la matriz (recorda que si tenes Matriz[5][8] significa q tenes 8 filas y 5 columnas y no al reves como sucede en PASCAL).

Espero q te sirva!!

Salu2!!!! :comp: