[C con Clase] no entiendo mi error

Steven Davidson srd4121 en njit.edu
Jue Mayo 13 11:35:27 CEST 2010


Hola Isaac,

2010/5/13 Isaac Corcino isunix en hotmail.com

Veamos el código fuente.


> #include<stdio.h>
>
> int suma_matriz(int mat[][], int a, int b);
>

Esto es un error. Para los arrays de varias dimensiones, debes indicar las
cantidades de cada array. La excepción es el primer array que es optativo
indicar la cantidad. En tu caso, esto sería,

int suma_matriz( int mat[][100], int a, int b );



> void main(void)
> {
>     int a, b, i, j, num;
>     int mat[100][100];
>
>     printf("De cuantas columnas la matriz  \n");
>     scanf("%d", &a);
>     printf("De cuantas filas la matriz  \n");
>     scanf("%d", &b);
>
>

Sugiero que uses nombres más descriptivos para tus variables importantes. En
este caso, en lugar de usar 'a' y 'b', escribe 'nCols' y 'nFilas',
respectivamente. Esto aumenta la legibilidad de tu código fuente y serás
menos propenso a cometer errores.



>
>     for(i=0; i<a; i++){
>         for(j=0; j<b; j++){
>                 printf("\ndame el numero de la matriz %d fila  %d columna:
> ", j, i);
>                 scanf("%d", &num);
>                 mat[i][j]=num;
>

No es necesario usar 'num' como variable auxiliar. Usa 'mat' directamente
con 'scanf()'. Esto es,

scanf( "%d", &mat[i][j] );

Hay un matiz que quiero exponer. No es habitual representar las filas de una
matriz como la segunda dimensión del array y las columnas como la primera
dimensión. No quiero decir que esto sea un error, sino simplemente que no es
lo habitual. Con tal de que sigas este diseño en todo tu programa, no habrá
problemas.


>         }
>     }
>     suma_matriz(mat, a, b);
>


Aquí invocas la función, pero no haces nada con el valor retornado que
debería ser la suma de los elementos de la matriz. Deberías guardar el
número calculado de por 'suma_matriz()'. Por ejemplo,

num = suma_matriz( mat, a, b );

Y supongo que querrás mostrar este resultado a por pantalla, así que usa
'printf()'.



>
> }
>
> int suma_matriz(int mat[][], int a, int b)
>


Con el prototipo cambiado, aquí también debes indicar las cantidades de cada
"dimensión". Esto es,

int suma_matriz( int mat[][100], int a, int b )



> {
>     int sum, k, l, tem;
>     sum=0
>
>

Aquí te falta un punto y coma para terminar la sentencia:

sum = 0;



>     for(k=0; k<a; k++){
>             for(l=0; l<b; l++){
>                     tem=mats[k][l];
>                     sum=sum+tem;
>


Nuevamente, no es necesario usar una variable auxiliar; usa 'mat'
directamente.

Puedes usar el operador de suma y asignación; esto es,

sum += mat[i][j];



>             }
>     }
>     printf("la suma total es: %d", sum);
>


Esto es un error de diseño. Esta función debe cumplir la tarea imputada; ni
más ni menos. La tarea de esta función es la de calcular la suma de todos
los elementos del array. Sin embargo, realizas otra tarea: imprimes el
resultado en la pantalla. Esta tarea no forma parte del diseño de esta
función y por tanto no debería estar aquí.

Además, esta función DEBE retornar un número entero, pero no lo hace. Según
el diseño, deberías retornar el valor en 'sum'. La parte del programa que
haya invocado a esta función debería manipular este número retornado como
debe.



> }
>
> este es el codigo y lo que hace o pretendo que haga es sumar los valores de
> la matriz y quiero saber es donde estoy mal por que me salen errores
> ojala que alguien m pueda explicar
> gracias
>
>

En el futuro, procura indicar cuáles son los errores marcados, los mensajes
de error lanzados, y quiénes (qué programas) te han indicado los errores:
compilador, enlazador, y/o el sistema operativo. De lo contrario, tardaremos
más en responderte y en darnos cuenta de todos los errores.


Espero que lo anterior te ayude.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100513/c6e250fe/attachment.html>


Más información sobre la lista de distribución Cconclase