• Viernes 26 de Abril de 2024, 15:05

Autor Tema:  SUMA DIAGONAL  (Leído 17679 veces)

eruelas

  • Miembro activo
  • **
  • Mensajes: 69
  • Nacionalidad: mx
    • Ver Perfil
SUMA DIAGONAL
« en: Domingo 14 de Septiembre de 2008, 19:15 »
0
BUENO PS TENGO UN PROBLEMILLA KON UNA MATRIZ HE HECHO TODO LO K NECESITO EXCEPTO SUMAR EN DIAGONAL KOMO LE PUEDO HACER PARA K SUME TODOS LOS NUMEROS EN DIAGONAL DE UNA MATRIZ DE MAXIMO 5*5 Y K ME MUESTRE LA SUMA?? LES AGREDECERIA SU AYUDA GRACIAS DE ANTEMANO
HE AKI EL CODIGO

Código: Text
  1. /*Ruelas Olea Edgar Adan
  2. Programacion Logica Estructurada II
  3. Practica 2 Programa 2
  4. 630548  4øA*/
  5.  
  6. #include<conio.h>
  7. #include<stdio.h>
  8. void main()
  9. {//inicio
  10. int i,j,mat[5][5],reng,col;
  11. clrscr();
  12.  do
  13.  {//do
  14.  gotoxy(5,5);
  15.  printf("Cuantos renglones y columnas son [maximo 5x5 y separados por un espacio]:       ");
  16.  scanf("%d %d",&reng,&col);
  17.  if(reng!=col)
  18.     {//if
  19.     gotoxy(6,8);
  20.     printf("ERROR: La matriz no tiene el mismo numero de renglones y columnas");  clreol();
  21.     getch();
  22.     gotoxy(6,8);           clreol();
  23.     }//if
  24.  else if(reng>5)
  25.     {//if
  26.     gotoxy(6,8);
  27.     printf("ERROR: La matriz no debe ser mayor a 5x5");     clreol();
  28.     getch();
  29.     gotoxy(6,8);           clreol();
  30.     }//if
  31.  }//do
  32.  while(reng!=col||reng>6);
  33.  printf("n");
  34.  for(i=0;i<reng;i++)
  35.     for(j=0;j<col;j++)
  36.     {//for
  37.     printf("Dame el numero en el %dø renglon %dø columna:  ",i+1,j+1);
  38.     scanf("%d",&mat[i][j]);
  39.     }//for
  40.  for(i=0;i<reng;i++)
  41.  {//f1
  42.     for(j=0;j<col;j++)
  43.     {//f2
  44.     printf("t%dtt",mat[i][j]);
  45.     }//f2
  46.  printf("nn");
  47.  }//f1
  48.  printf("nnn");
  49.  
  50.  getch();
  51. }//fin
  52.  

Rombus

  • Miembro MUY activo
  • ***
  • Mensajes: 105
  • Nacionalidad: ar
    • Ver Perfil
    • http://myspace.com/punkrecycle
Re: SUMA DIAGONAL
« Respuesta #1 en: Domingo 14 de Septiembre de 2008, 20:15 »
0
sumar en diagonal te referis a sumar la diagonal principal o secundaria?

la diagonal principal es facil, sumas los valores cuando i = j;

y la diag secundaria es i = MAX - (j - 1) y j empieza en MAX--


saludos;)

eruelas

  • Miembro activo
  • **
  • Mensajes: 69
  • Nacionalidad: mx
    • Ver Perfil
Re: SUMA DIAGONAL
« Respuesta #2 en: Domingo 14 de Septiembre de 2008, 20:24 »
0
primero k nada gracias por ser el k kasi siempre me responde xD
y ps es la suma de la diagonal principal entonces tendria k declarar otra variabe y usar un for??? para k me vaya recorriendo la matriz?? o un if???

Rombus

  • Miembro MUY activo
  • ***
  • Mensajes: 105
  • Nacionalidad: ar
    • Ver Perfil
    • http://myspace.com/punkrecycle
Re: SUMA DIAGONAL
« Respuesta #3 en: Lunes 15 de Septiembre de 2008, 02:41 »
0
hey! no hay problema para eso estamos XD

claro, la onda seria que hagas un
Código: Text
  1.  
  2. for (i = 0; i<N;i++)
  3.     for(j=0;j <M; j++){
  4.         if(i==j)
  5.             aux +=  mat[i][j];
  6.     }
  7.  
  8.  


existen formas mas eficientes para hacerlo pero te respondo rapido antes de irme a comer JOJO, pero eso deberia andar



saludos!

eruelas

  • Miembro activo
  • **
  • Mensajes: 69
  • Nacionalidad: mx
    • Ver Perfil
Re: SUMA DIAGONAL
« Respuesta #4 en: Lunes 15 de Septiembre de 2008, 20:10 »
0
ps te dire k me lo suma mal me sale 64
pongo k la matriz sea de 2*2  y le doy 1234 k jijos me salio mal???

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: SUMA DIAGONAL
« Respuesta #5 en: Lunes 15 de Septiembre de 2008, 20:41 »
0
Supongo que habrás puesto a cero aux, porque en C++ las variables locales no se inicializan de forma automática...
y que controlas que M y N valgan el valor que has introducido por teclado y no estés sumando la matriz de 5x5 haya lo que haya en donde no has introducido números.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

eruelas

  • Miembro activo
  • **
  • Mensajes: 69
  • Nacionalidad: mx
    • Ver Perfil
Re: SUMA DIAGONAL
« Respuesta #6 en: Lunes 15 de Septiembre de 2008, 20:46 »
0
ps ya inicialize las variables k tenia k inicializar a "0" y si le pongo k aux=0 el resultado da 0 no  se en donde este el problema :s
Código: Text
  1. /*Ruelas Olea Edgar Adan
  2. Programacion Logica Estructurada II
  3. Practica 2 Programa 2
  4. 630548  4øA*/
  5.  
  6. #include<conio.h>
  7. #include<stdio.h>
  8. void main()
  9. {//inicio
  10. int i,j,mat[5][5],reng,col,n,m,aux=0;
  11. clrscr();
  12.  do
  13.  {//do
  14.  gotoxy(5,5);
  15.  printf("Cuantos renglones y columnas son [maximo 5x5 y separados por un espacio]:       ");
  16.  scanf("%d %d",&reng,&col);
  17.  if(reng!=col)
  18.     {//if
  19.     gotoxy(6,8);
  20.     printf("ERROR: La matriz no tiene el mismo numero de renglones y columnas");  clreol();
  21.     getch();
  22.     gotoxy(6,8);           clreol();
  23.     }//if
  24.  else if(reng>5)
  25.     {//if
  26.     gotoxy(6,8);
  27.     printf("ERROR: La matriz no debe ser mayor a 5x5");     clreol();
  28.     getch();
  29.     gotoxy(6,8);           clreol();
  30.     }//if
  31.  }//do
  32.  while(reng!=col||reng>6);
  33.  printf("n");
  34.  for(i=0;i<reng;i++)
  35.     for(j=0;j<col;j++)
  36.     {//for
  37.     printf("Dame el numero en el %dø renglon %dø columna:  ",i+1,j+1);
  38.     scanf("%d",&mat[i][j]);
  39.     }//for
  40.  for(i=0;i<reng;i++)
  41.  {//f1
  42.     for(j=0;j<col;j++)
  43.     {//f2
  44.     printf("t%dtt",mat[i][j]);
  45.     }//f2
  46.  printf("nn");
  47.  }//f1
  48.  printf("nnn");
  49.  for(i=0;i<n;i++)
  50.  for(j=0;j<m;j++)
  51.  {
  52.     if(i==j)
  53.     aux+=mat[i][j];
  54.  }
  55.  printf("%i",aux);
  56.  getch();
  57. }//fin
  58.  

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: SUMA DIAGONAL
« Respuesta #7 en: Lunes 15 de Septiembre de 2008, 21:00 »
0
A ver, tienes al menos dos errores:

El primero está aquí:

   while(reng!=col||reng>6);

Ahí no estás haciendo nada por el punto y coma final, que es lo que hará el while. Pero como reng es menor que 6, ni siquiera hace un bucle. Y tampoco sé para qué haces ese bucle, la verda.

El segundo es que, efectivamente, no inicializas ni n ni m, es decir, n y m valdrá lo que quiera que haya en la posición de memoria que representan.

      for(i=0;i<n;i++)
         for(j=0;j<m;j++)
         {
            if(i==j)
               aux+=mat[j];
         }

Date cuenta que en lugar de n y m deberían estar col y reng, que son las variables que tomas del tamaño de la matriz, o bien deberías asignar m y n a col y reng o viceversa.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

eruelas

  • Miembro activo
  • **
  • Mensajes: 69
  • Nacionalidad: mx
    • Ver Perfil
Re: SUMA DIAGONAL
« Respuesta #8 en: Lunes 15 de Septiembre de 2008, 21:05 »
0
ps lo de inicializar todas ya lo habia hecho solo tenia mal lo de akomodar la m y la n ya las kambie jeje muchas gracias por tu ayuda se te agradece!!! thnx

Rombus

  • Miembro MUY activo
  • ***
  • Mensajes: 105
  • Nacionalidad: ar
    • Ver Perfil
    • http://myspace.com/punkrecycle
Re: SUMA DIAGONAL
« Respuesta #9 en: Lunes 15 de Septiembre de 2008, 21:11 »
0
claro, yo puse M y N en mayuscula haciendo referencia a alguna constante simbolica declarada por ahi

la forma un poco mas eficiente que te decia es:

Código: Text
  1. for(i=0; i<N; i++)
  2.     aux += mat[i][i];
  3.  

habiendo antes declarado N,  aux inicializada en 0, suponiendo una matriz cuadrada


;)

eruelas

  • Miembro activo
  • **
  • Mensajes: 69
  • Nacionalidad: mx
    • Ver Perfil
Re: SUMA DIAGONAL
« Respuesta #10 en: Jueves 18 de Septiembre de 2008, 17:12 »
0
OK MUCHAS GRACIAS A LOS 2 JEJE SI ME FUNCIONO GRACIAS POR SU AYUDA SE LES AGRADECE  :D  :good: