C/Visual C - periferia de matriz en c

 
Vista:
sin imagen de perfil

periferia de matriz en c

Publicado por cable (4 intervenciones) el 20/11/2016 03:15:32
hola, buenas noches
me encargaron un programa que sume los elementos de una matriz de N elementos y pues escribi un codigo y no encuentro el error, me podrian ayudar?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include<stdio.h>
#include<windows.h>
void leermatriz();
void imprimirmatriz();
void sumaperiferia();
int fila, columna,i,j;
int matriz[50][50];
int main()
{
	printf("\nPrograma que imprima los elementos y la suma de la diagonal secundaria");
	leermatriz();
	imprimirmatriz();
	sumaperiferia();
	}
void leermatriz()
{
	printf("\nLectura de matriz");
	do{printf("\nDame la cantidad de fila=>");
	scanf("%d",&fila);
	printf("Dame la cantidad de columnas=>");
	scanf("%d",&columna);
	if(fila!=columna)
	{
		printf("\nNumero de filas debe ser igual al de columnas");
	}
	}while(fila!=columna);
 
	for(i=0;i<fila;i++){
		for(j=0;j<columna;j++){
			printf("\nDame el valor de la casilla[%d][%d]",i,j);
			scanf("%d",&matriz[i][j]);
			}
	}
	system("pause");
	return;
}
void imprimirmatriz()
{
	for(i=0;i<fila;i++){
		printf("\n");
		for(j=0;j<columna;j++){
			printf("\t%d",matriz[i][j]);
		}
	}
	system("pause");
	return;
}void sumaperiferia()
{
	int sumaperiferia=0;
	for(i=0;i<fila-1;++i){
		for(j=0;j<columna-1;++j){
			if(i==0||i==fila-1||j==0||j==columna-1){
				sumaperiferia+=matriz[i][j];
 
			}
		}
	}
	printf("\nLa suma de los elementos de la periferia es:%d",sumaperiferia);
system("pause");
	return;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

periferia de matriz en c

Publicado por agustin (272 intervenciones) el 20/11/2016 09:20:12
Hay varias cosas:
1-usar variables globales no es bueno y cuando hay errores de lógica son difíciles de localizar. Acostumbrate a ponerlas dentro de las funciones y a pasarlas como parámetros por referencia o por valor dependiendo de lo que se necesite.
2-los return al final de las funciones void sobran ya que la función se acaba al llegar a la llave. El return se usa cuando hay que forzar la salida antes.
3-el nombre sumaperiferia lo usas como nombre de función y como nombre de variable en el mismo ámbito. Eso no puedes hacerlo, cambia uno de los nombres.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

periferia de matriz en c

Publicado por ca (4 intervenciones) el 20/11/2016 23:58:50
hola,pues ya segui tus consejos y pues no veo mucho cambio
asi me quedo el codigo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include<stdio.h>
#include<windows.h>
void leermatriz();
void imprimirmatriz();
void suma();
int main()
{
	system("Color 4b");
	printf("\nPrograma que imprima la suma de la periferia de una matriz");
	leermatriz();
	imprimirmatriz();
	suma();
	}
void leermatriz()
{
	int matriz[50][50];
	int fila, columna,i,j;
	printf("\nLectura de matriz");
	do{printf("\nDame la cantidad de fila=>");
	scanf("%d",&fila);
	printf("Dame la cantidad de columnas=>");
	scanf("%d",&columna);
	if(fila!=columna)
	{
		printf("\nNumero de filas debe ser igual al de columnas");
	}
	}while(fila!=columna);
 
	for(i=0;i<fila;i++){
		for(j=0;j<columna;j++){
			printf("\nDame el valor de la casilla[%d][%d]",i,j);
			scanf("%d",&matriz[i][j]);
			}
	}
	system("pause");
 
}
void imprimirmatriz()
{
	int matriz[50][50];
	int fila, columna,i,j;
	for(i=0;i<fila;i++){
		printf("\n");
		for(j=0;j<columna;j++){
			system("color d");
			printf("\t%d",matriz[i][j]);
		}
	}
	system("pause");
 
}void suma()
{
	int matriz[50][50];
	int fila,columna,i,j;
	int sumaperiferia=0;
	for(i=0;i<fila-1;++i){
		for(j=0;j<columna-1;++j){
			if(i==0||i==fila-1||j==0||j==columna-1){
				sumaperiferia+=matriz[i][j];
				printf("\nLa suma de los elementos de la periferia es:%d",sumaperiferia);
			}
		}
	}
	printf("\nLa suma de los elementos de la periferia es:%d",sumaperiferia);
system("pause");
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

periferia de matriz en c

Publicado por ca (4 intervenciones) el 21/11/2016 01:29:18
la primera funcionan y la segunda funcionan bien, pero la de suma no
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

periferia de matriz en c

Publicado por agustin (272 intervenciones) el 21/11/2016 08:17:32
Lo de usar parámetros no lo pillaste. Aquí te lo pongo corregido:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include<stdio.h>
//#include<windows.h>
 
#define MAXSIZE 50
 
void leermatriz(int matriz[MAXSIZE][MAXSIZE], int *nfilas, int *ncolumnas);
void imprimirmatriz(int matriz[MAXSIZE][MAXSIZE], int nfilas, int ncolumnas);
void suma(int matriz[MAXSIZE][MAXSIZE], int nfilas, int ncolumnas);
 
int main()
{
	int matriz[MAXSIZE][MAXSIZE];
	int filas, columnas;
 
	system("Color 4b");
	printf("\nPrograma que imprima la suma de la periferia de una matriz");
	leermatriz(matriz, &filas, &columnas);
	imprimirmatriz(matriz, filas, columnas);
	suma(matriz, filas, columnas);
	}
 
void leermatriz(int matriz[MAXSIZE][MAXSIZE], int *nfilas, int *ncolumnas)
{
	int i,j;
 
	printf("\nLectura de matriz");
	do{
		printf("\nDame la cantidad de fila=>");
		scanf("%d", nfilas);
		printf("Dame la cantidad de columnas=>");
		scanf("%d", ncolumnas);
		if(*nfilas != *ncolumnas){
			printf("\nNumero de filas debe ser igual al de columnas");
		}
		if (*nfilas > MAXSIZE || *ncolumnas > MAXSIZE){
			printf ("\nNumero de filas y de columnas no pueden ser mayor de %d",MAXSIZE);
		}
	}while(*nfilas != *ncolumnas || *nfilas > MAXSIZE || *ncolumnas > MAXSIZE);
 
	for(i = 0; i < *nfilas; i++){
		for(j = 0; j < *ncolumnas; j++){
			printf("\nDame el valor de la casilla[%d][%d]", i, j);
			scanf("%d", &matriz[i][j]);
			}
	}
	system("pause");
}
 
void imprimirmatriz(int matriz[MAXSIZE][MAXSIZE], int nfilas, int ncolumnas)
{
	int i,j;
 
	for(i = 0; i < nfilas; i++){
		printf("\n");
		for(j = 0; j < ncolumnas; j++){
			system("color d");
			printf("\t%d", matriz[i][j]);
		}
	}
	system("pause");
}
 
void suma(int matriz[MAXSIZE][MAXSIZE], int nfilas, int ncolumnas)
{
	int i, j;
	int sumaperiferia = 0;
 
	for(i = 0; i < nfilas; ++i){
		for(j = 0; j < ncolumnas; ++j){
			if(i == 0 || i == nfilas - 1 || j == 0 || j == ncolumnas - 1){
				sumaperiferia += matriz[i][j];
			}
		}
	}
	printf("\nLa suma de los elementos de la periferia es:%d", sumaperiferia);
   system("pause");
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

periferia de matriz en c

Publicado por ca (4 intervenciones) el 07/12/2016 04:47:48
gracias, discúlpame mucho por tardar en responder, me sacaste de un apuro muy grande.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar