Ricardo:<br><br>   Estoy agradecido enormemente por tu ingeniosa solución, ya que al final recorriste la matrices moviendo sólo el puntero a float. Además, gracias por  ampliar la solución con una explicación del malloc. Siempre son bienvenidas este tipo de explicaciones ya que sirve para más soluciones en el futuro.<br>
<br>Miguel.<br><br><div class="gmail_quote">2010/11/20 Ricardo Torres <span dir="ltr"><<a href="mailto:rictor@cuhrt.com">rictor@cuhrt.com</a>></span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


  
    
    
  
  <div text="#000000" bgcolor="#ffffff">
    Hola Miguel<br>
    <br>
    El 20/11/10 10:44, Miguel Olave escribió:
    <div class="im"><blockquote type="cite">Estimados:<br>
      <br>
         Como siempre es un agrado recurrir a esta lista, pues de seguro
      sé que enontraré una solución para un problema, creo, fácil de
      resolver para muchos de ustedes pero desde ayer estoy pegado y no
      me puedo destrabar.<br>
    </blockquote></div>
    espero poder ayudarte!<div class="im"><br>
    <blockquote type="cite">
      <br>
      Lo que ocurre es que quiero realizar funciones con matrices de
      diversos tamaños pero no sé como pasarle estas como argumento a
      una función.<br>
      <br>
      He aquí un ejmplo sencillo de una de las formas de como lo he
      tratado de hacer.<br>
      <br>
      n: número de filas <br>
      M: número de columnas<br>
    </blockquote></div>
    he tomado tu ejemplo y he creado uno que creo hace lo que necesitas
    y perdón me me fijé en tu definición de n y M y en el ejemplo que te
    muestro n con columnas y m son renglones<br>
    <br>
    --- matrices.c ----------------------<div class="im"><br>
    #include <stdio.h><br>
    #include <math.h><br>
    #include <stdlib.h><br>
    <br>
    void print_matrix(float *pm, int n, int m)<br>
    {<br></div>
    /*<br>
       pm - puntero al inicio de la matriz de nxm<br>
       n  - número de columnas<br>
       m  - número de renglones<br>
    */<br>
        int i, j;<br>
        /* Se recorrent renglones */<div class="im"><br>
        for (j=0; j<m; j++){<br></div>
            /* Primero se recorren columnas */<div class="im"><br>
            for (i=0; i<n; i++){<br></div>
                /* j*n es el inicio de cada renglon, i es la columna */<br>
                printf("%f\t",*(pm+i+j*n));<div class="im"><br>
            }<br>
            printf("\n");<br>
        }<br>
    }<br>
    <br>
    void main(int argc, char* argv[]){<br>
    <br>
        int i, j;<br>
        float p[2][2] = { {1, 2}, {2, 1} };<br></div>
        float q[2][3] = { {1, 2, 3}, {3, 2, 1} };<br>
       <br>
        printf("matriz p:\n");<br>
        printf("-----------\n");<div class="im"><br>
        print_matrix(p,2,2);<br>
        printf("-----------\n");<br>
    <br></div>
        printf("matriz q:\n");<br>
        printf("-----------\n");<br>
        print_matrix(q,3,2);<div class="im"><br>
        printf("-----------\n");<br>
    <br>
    }<br>
    ---------------------------------------<br>
    <br>
    <blockquote type="cite">Nota: Se me ocurre que la mejor solución debe ser
      mediante punteros pues de otro modo debería usar malloc.<br>
    </blockquote></div>
    He compilado este programa y efectivamente aparece el siguiente
    warning:<br>
    --- wraning -----------------------<br>
    matrices.c:32: warning: passing argument 1 of ‘print_matrix’ from
    incompatible pointer type<br>
    matrices.c:5: note: expected ‘float *’ but argument is of type
    ‘float (*)[2]’<br>
    matrices.c:37: warning: passing argument 1 of ‘print_matrix’ from
    incompatible pointer type<br>
    matrices.c:5: note: expected ‘float *’ but argument is of type
    ‘float (*)[3]’<br>
    --------------------------------------<br>
    <br>
    Y la salida es la siguiente<br>
    --- salida -------------------------<br>
    matriz p:<br>
    -----------<br>
    1.000000    2.000000    <br>
    2.000000    1.000000    <br>
    -----------<br>
    matriz q:<br>
    -----------<br>
    1.000000    2.000000    3.000000    <br>
    3.000000    2.000000    1.000000    <br>
    -----------<br>
    -------------------------------------<br>
    <br>
    Como verás, funciona de forma correcta<div class="im"><br>
    <br>
    <blockquote type="cite">
      <br>
      Nota 2: en Ejemplos he visto que las matrices las definen como
      m[][5], o sea, sólo con el campo de las columnas llenado. No
      estiendo esa notación. ¿Qué pasa con las filas? (he visto que
      incluso lo hacen para matrices que no son cuadradas).<br>
    </blockquote></div>
    si tenemos la matriz<br>
    --- matriz --<br>
    1, 2, 3<br>
    3, 2, 1<br>
    --------------<br>
    En C sería<br>
        int m1[][3] = { {1, 2, 3}, {3, 2, 1} };<br>
    <br>
    Esto define una variable de tipo int constante llamada m1. Por
    ejemplo, yo podría obtener el elemento m1[1][1] que daría como
    resultado un 2.<br>
    <br>
    Una forma alternativa con punteros y malloc se podría hacer algo
    como<br>
    <br>
      int m2 = (int *) malloc(3x2); /* Reservamos memoria para 6 enteros
    */<br>
    <br>
    En realidad este es un vector no una matriz, pero haciendo las
    cuentas correspondientes se puede usar como una matriz, veamos:<br>
    <br>
    Si nuestra matriz es de 3x2, quiere decir que tenemos 3 columnas y 2
    renglones<br>
      m2[0] = 1;  /* Se guarda el valor de la posición 0,0 */<br>
    Una forma de calcular la posición en el vector en base a la columna
    "i" y renglón "j" sería con i+j*n<br>
    <br>
    Si nos imaginamos el vector m2 sería algo como<br>
    <tt>[ ][ ][ ][ ][ ][ ] <- espacio de memoria<br>
       0  1  2  3  4  5  <- dirección de memoria<br>
      | ren 0 || ren 1 | <- organización x renglones, cada renglón es
      de longitud 3<br>
      <br>
      Renglón 0 inicia en m2[0], con 0 = 0*3<br>
    </tt><tt>Renglón 1 inicia en m2[3], con 3 = 1*3<br>
    </tt><tt>Renglón j inicia en m2[y], con y = j*3 para renglones de
      longitud 3<br>
    </tt><tt>Renglón j inicia en m2[y], con y = j*n para renglones de
      longitud n<br>
    </tt><br>
    Para el caso de las columnas sería<br>
    <tt>Renglón 0, columna 0: m2[0], con 0 = 0*3 + 0<br>
    </tt><tt>Renglón 0, columna 1: m2[1], con 1 = 0*3 + 1<br>
    </tt><tt>Renglón 1, columna 1: m2[4], con 4 = 1*3 + 1<br>
    </tt><tt>Renglón j, columna i: m2[k], con k = j*n + i para renglones
      de longitud n<br>
    </tt><br>
    Otra forma con vectores sería usando un puntero a punteros, creo que
    se podría crear algo como esto, si me equivoco x favor corriganme,
    thx)<br>
    <br>
      int m3 = (void *) malloc(2); /* Reservamos memoria para 2
    renglones, no estoy seguro si es asi, pero sería la idea */<br>
      int m3[0] = (int *) malloc(3); /* Reservamos memoria para 3
    enteros para el renglón 0 */<br>
      int m3[1] = (int *) malloc(3); /* Reservamos memoria para 3
    enteros para el renglón 1 */<br>
    <br>
    Y para asignar los valores sería<br>
      m3[0][0] = 1; /* renglón 0, columna 0 */<br>
      m3[0][1] = 2; /* renglón 0, columna 1 */<br>
      m3[j][i] = k; /* renglón j, columna i */<br>
    <br>
    Espero te sea de utilidad y no haberte enredado más!!<br>
    <br>
    Saludos<br>
    RT<br>
    <br>
    <blockquote type="cite">
      <br>
    </blockquote>
    <br>
    <blockquote type="cite">
      <br>
      ESOP!!<br>
      <br>
      Espero sus respuestas.<br>
      <br>
      <br>
      <pre><fieldset></fieldset>
_______________________________________________
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a></pre>
    </blockquote>
    <br>
  </div>


<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br>