User Tag List

Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 15 de 29

Tema: Paso de matrices a funciones

  1. #1

    Fecha de ingreso
    Jun 2017
    Mensajes
    2
    Mencionado
    1 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts

    Paso de matrices a funciones

    Hola, buenos dias,

    ¿ Alguien podría indicarme que estoy haciendo mal en el siguiente código ? Obtengo resultados diferentes y no veo el fallo. Muchas gracias de antemano.

    void multiply(int a[], int b[]){
    printf("\nTamaño de a = %d\n", (int)(sizeof(a)/sizeof(int)));
    printf("Tamaño de b = %d\n", (int)(sizeof(b)/sizeof(int)));
    }

    int main(int argc, const char * argv[]) {
    int a[] = { 9, 2, 3, 4, 5, 6, 7, 8 };
    int b[] = { 4, 3, 2, 1 };

    printf("sizeof(int)=%lu\n", sizeof(int));

    printf("Tamaño de a = %d\n", (int)(sizeof(a)/sizeof(int)));
    printf("Tamaño de b = %d\n", (int)(sizeof(b)/sizeof(int)));
    multiply(a,b);

    return 0;

    }

  2. #2

    Fecha de ingreso
    Jul 2009
    Mensajes
    8,555
    Mencionado
    57 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    780
    Agradecer Thanks Received 
    399
    Thanked in
    Agradecido 283 veces en [ARG:2 UNDEFINED] posts
    porque lo que recibe multiply como parametro son punteros no una matriz/array...

    el compilador ya te lo esta diciendo

    array.c: In function ‘multiply’:
    array.c:4:45: warning: ‘sizeof’ on array function parameter ‘a’ will return size of ‘int *’ [-Wsizeof-array-argument]
    printf("\nTamaño de a = %d\n", (int)(sizeof(a)/sizeof(int)));


    -----Actualizado-----

    tienes que incluir el tamaño como parametro... algo asi


    void multiply(int a[], int sza, int b[], int szb)

    ....


    multiply(a,sizeof(a)/sizeof(int),b,sizeof(b)/sizeof(int))




    (aunque yo usaria sizeof(a[0]) en lugar de sizeof(int))
    ...

  3. #3

    Fecha de ingreso
    Jun 2006
    Mensajes
    4,384
    Mencionado
    37 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    985
    Agradecer Thanks Received 
    561
    Thanked in
    Agradecido 346 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    7
    Para empezar, podrías decir cual es el fallo en vez de decir solamente "da un fallo". qué es lo que esperas que salga como resultado? La longitud de los arrays -a- y -b- que estás pasando a la función multiply?

    Yo he probado el código aquí: https://www.jdoodle.com/c-online-compiler y, en la función main, los printf arrojan que la longitud de -a- y -b- valen 8 y 4 respectivamente (hasta ahí correcto,no?).

    Pero los printf de dentro de multiply sacan que la longitud de -a- y -b- vale 2 cada uno (WTF?)

    Lo siento, hace como 12 o 13 años que no toco C y ni me acuerdo ya de cómo se trabajaba con arrays en esa basura caduca de lenguaje. Supongo que es un trabajo de ciclo formativo o algo. Si no, te recomendaría que te olvidases de C y pasases a programación orientada a objetos. Los punteros y demás métodos de tortura satánicos mejor dejarlos como lo que son, algo del pasado que ya no tiene razón de ser.
    Última edición por akualung; 16/06/2017 a las 15:33
    _
    .

  4. #4

    Fecha de ingreso
    Jul 2009
    Mensajes
    8,555
    Mencionado
    57 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    780
    Agradecer Thanks Received 
    399
    Thanked in
    Agradecido 283 veces en [ARG:2 UNDEFINED] posts
    "caduca"???!!! WTF?
    ...

  5. #5

    Fecha de ingreso
    Jun 2006
    Mensajes
    4,384
    Mencionado
    37 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    985
    Agradecer Thanks Received 
    561
    Thanked in
    Agradecido 346 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    7
    Cita Iniciado por SplinterGU Ver mensaje
    "caduca"???!!! WTF?
    Hombre, no me dirás que el ansi C no es del año de la catapúm. Casi toda la programación en C actual es C#, no?
    _
    .

  6. #6

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,553
    Mencionado
    201 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,091
    Agradecer Thanks Received 
    1,666
    Thanked in
    Agradecido 1,069 veces en [ARG:2 UNDEFINED] posts
    cojo palomitas sobre todo por la última frase xDDD

  7. Los siguientes 2 usuarios agradecen a ^MiSaTo^ este post:

    Karkayu (16/06/2017), Ñuño Martínez (19/06/2017)

  8. #7

    Fecha de ingreso
    Jul 2009
    Mensajes
    8,555
    Mencionado
    57 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    780
    Agradecer Thanks Received 
    399
    Thanked in
    Agradecido 283 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por akualung Ver mensaje
    Hombre, no me dirás que el ansi C no es del año de la catapúm. Casi toda la programación en C actual es C#, no?
    del año que quieras, pero decir "caduca" es mucho...

    lo demas, ve y decilo a Linus...
    ...

  9. #8

    Fecha de ingreso
    Jun 2006
    Mensajes
    4,384
    Mencionado
    37 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    985
    Agradecer Thanks Received 
    561
    Thanked in
    Agradecido 346 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    7
    Cita Iniciado por ^MiSaTo^ Ver mensaje
    cojo palomitas sobre todo por la última frase xDDD
    Hombre, yo me refiero a los que programan en visual studio. O usas VB o C#. Si haces juegos o otras cosas que se salga del habitual desarrollo de aplicaciones web, entonces sí.

    Bueno, si he ofendido a alguien, lo siento, pasemos página. Respecto al tema principal del post, en esta web hay un ejemplo en C de paso de array a una función y no incluyen el tamaño del array (aunque en este caso es un array de float, no de ints): https://www.programiz.com/c-programm...rays-functions
    Última edición por akualung; 16/06/2017 a las 15:51
    _
    .

  10. #9

    Fecha de ingreso
    Apr 2006
    Mensajes
    10,485
    Mencionado
    140 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,901
    Agradecer Thanks Received 
    2,795
    Thanked in
    Agradecido 1,314 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    15
    @akualung, no me seas hereje...


  11. #10

    Fecha de ingreso
    Jun 2004
    Ubicación
    Pinto (MADRID)
    Mensajes
    953
    Mencionado
    5 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3
    Agradecer Thanks Received 
    73
    Thanked in
    Agradecido 52 veces en [ARG:2 UNDEFINED] posts
    Esperad que pongo el índice TIOBE. Otra de palomitas.
    https://www.tiobe.com/tiobe-index/

  12. El siguiente usuario agradece a saboteur este mensaje:

    Ñuño Martínez (19/06/2017)

  13. #11

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,553
    Mencionado
    201 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,091
    Agradecer Thanks Received 
    1,666
    Thanked in
    Agradecido 1,069 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por akualung Ver mensaje
    Hombre, yo me refiero a los que programan en visual studio. O usas VB o C#. Si haces juegos o otras cosas que se salga del habitual desarrollo de aplicaciones web, entonces sí.

    Bueno, si he ofendido a alguien, lo siento, pasemos página. Respecto al tema principal del post, en esta web hay un ejemplo en C de paso de array a una función y no incluyen el tamaño del array (aunque en este caso es un array de float, no de ints): https://www.programiz.com/c-programm...rays-functions
    Lo dices como si el 99% de los programadores usaran visual studio, VB y C#. Como si no hubiera nada más en este mundo xDDDDDDD

    No me ofendo tío, pero incluso para programar aplicaciones web (cosa que he hecho durante 6 años de mi vida) no hace falta usar eso. Es más, yo nunca lo he usado xD Y llevo casi 15 años programando profesionalmente.

  14. #12

    Fecha de ingreso
    Jul 2009
    Mensajes
    8,555
    Mencionado
    57 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    780
    Agradecer Thanks Received 
    399
    Thanked in
    Agradecido 283 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por akualung Ver mensaje
    Hombre, yo me refiero a los que programan en visual studio. O usas VB o C#. Si haces juegos o otras cosas que se salga del habitual desarrollo de aplicaciones web, entonces sí.

    Bueno, si he ofendido a alguien, lo siento, pasemos página. Respecto al tema principal del post, en esta web hay un ejemplo en C de paso de array a una función y no incluyen el tamaño del array (aunque en este caso es un array de float, no de ints): https://www.programiz.com/c-programm...rays-functions
    vale, ahora veo que AJMurphy, esta programando paginas webs...

    por otro lado, no me has ofendido... solo que tal afirmacion es erronea...

    y el link que pasaste esos codigos son de listillo, ahi ya sabe el tamaño dentro de la funcion, que gracia tiene eso? no es el caso que pregunta arriba, que por cierto ya respondi que es lo que pasa y como solucionarlo...
    ...

  15. #13

    Fecha de ingreso
    Jun 2006
    Mensajes
    4,384
    Mencionado
    37 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    985
    Agradecer Thanks Received 
    561
    Thanked in
    Agradecido 346 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    7
    Cita Iniciado por SplinterGU Ver mensaje
    vale, ahora veo que AJMurphy, esta programando paginas webs...

    por otro lado, no me has ofendido... solo que tal afirmacion es erronea...

    y el link que pasaste esos codigos son de listillo, ahi ya sabe el tamaño dentro de la funcion, que gracia tiene eso? no es el caso que pregunta arriba, que por cierto ya respondi que es lo que pasa y como solucionarlo...
    Tienes razón, no me había fijado en el bucle donde el tío ha metido ahí, hardcodeado, el tamaño del array que recibe esa función. Pero pregunto, y de ahí lo que he dicho antes de "caduco". si en C le pasas un array a una función (un array que se supone que viene ya con una serie de valores dentro y por lo tanto, ya tendrá un tamaño determinado) por qué has de pasar el tamaño del array como otro parámetro adicional en vez de simplemente sacarlo de alguna manera similar como se hace en programación orientada a objetos con un sencillo arrayQueAcabamosDeRecibir.length()?

    Sí, lo sé: programación orientada a objetos != programación estructurada... Pero aún así. Encuentro muy fuerte que, en C, si pasas un array a una función, "pierdas" su tamaño y por lo tanto lo tengas que enviar como un parámetro adicional porque el sizeof() ya no funciona dentro de la función multiply (cuando en main sí que devuelve bien lso tamaños de -a- y -b-).

    Edito: por si aca, para no ofender más a nadie, que ya veo que están los ánimos caldeados (debe ser el calor, jejeje) he buscado yo mismo https://stackoverflow.com/questions/...-to-a-function
    Última edición por akualung; 16/06/2017 a las 16:12
    _
    .

  16. #14

    Fecha de ingreso
    Jul 2009
    Mensajes
    8,555
    Mencionado
    57 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    780
    Agradecer Thanks Received 
    399
    Thanked in
    Agradecido 283 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por saboteur Ver mensaje
    Esperad que pongo el índice TIOBE. Otra de palomitas.
    https://www.tiobe.com/tiobe-index/
    por cierto, caramba! gracias por el link...

    Nombre:  bennugd.jpg
Visitas: 1026
Tamaño: 53.8 KB
    ...

  17. #15

    Fecha de ingreso
    Jan 2010
    Ubicación
    Getxo
    Mensajes
    1,518
    Mencionado
    6 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    50
    Agradecer Thanks Received 
    235
    Thanked in
    Agradecido 115 veces en [ARG:2 UNDEFINED] posts
    Por cierto... ¿qué es lo que quieres que haga el código? Supongo que hacer algun tipo de multiplicación entre dos arrays... pero ¿como los quieres multiplicar exactamente?

Página 1 de 2 12 ÚltimoÚltimo

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •