[C con Clase] no entiendo mi error

Isaaç corcino reyes carnal_wevas en hotmail.com
Jue Mayo 13 16:09:44 CEST 2010


gracias Steven mejor explicado no podria estar, te agradesco mucho me has aclarado y resolvido mis dudas

Date: Thu, 13 May 2010 11:35:27 +0200
From: srd4121 en njit.edu
To: cconclase en listas.conclase.net
Subject: Re: [C con Clase] no entiendo mi error

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
  		 	   		  
_________________________________________________________________
Enciende tu hotness con Hotmail
www.hotmailhotness.com.mx
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100513/e4059584/attachment-0001.html>


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