[Consulta] Programa lenguaje C resultado incorrecto

Iniciado por neron991, 16 Junio 2015, 03:04 AM

0 Miembros y 1 Visitante están viendo este tema.

neron991

Hola nuevamente yo jaja xD esta vez tengo otro programa en lenguaje c de tarea sobre matrices ya hice todo pero al querer usar la opcion 4 o Case 4: del programa me marca numeros negativos que no estan en la matriz, quisiera saber si me pueden ayudar a resolver ese pequeño detalle gracias:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   int contra = 1997;
   int pass, i, j, n, op, sum, may, g, h, k, f, aux, x, y, z, sumar, num;
   int m[3][3];
   int SUMA [3];
   int MAYOR [3];
   char palabra[20];
   int faltan=3;
do {
   printf ("\nIngrese la contraseña: ");
   scanf ("%d",&pass);
   if (pass == contra)
   {
do {

       printf ("\nDe que tamaño va ser la matriz, no mayor a 3: ");
       scanf ("%d",&n);
  if (n<=3){
       for (i=0;i<n;i++)
       {
           for (j=0;j<n;j++)
           {
               do
               {
                   printf ("\nIngrese el elemento de la Fila %d, columna %d ", i, j);
                   scanf ("%d", &num);
                   if (num > 0)
                       m[i][j] = num;
                   else
                       printf ("El numero deber ser positivo");
               }while (num < 0);
           }
}
}
    else
printf ("\n\nTiene que ser un elemento menor a 3");
} while (n>3);


       for (g=0;g<n;g++)
       {
           for (h=0;h<n;h++)
               printf ("%d\t", m[g][h]);
           printf ("\n");
       }
       do
       {
           printf ("\nMenú\n");
           printf ("1.- Calcular la suma de cada fila\n");
           printf ("2.- Determinar el mayor elemento de cada columna\n");
           printf ("3.- Sumar los elementos por encima de la diagonal principal\n");
           printf ("4.- Ordenar el arreglo SUMA de mayor a menor y el artreglo MAYOR de menor a mayor\n");
           printf ("5.- Introduzca una palabra para determinar si es palindromo\n");
           printf ("6.- Salir\n");
           printf ("\nSeleccion una opción: ");
           scanf ("%d", &op);
           switch (op)
           {
default: printf ("\nOPCIÓN NO DENTRO DE LOS PARAMETROS");
           case 1:
               for (i=0;i<n;i++)
               {
                   sum = 0;
                   for (j=0;j<n;j++)
                   {
                       sum = sum + m[i][j];
                   }
                   SUMA[i]=sum;
               }
               printf ("La suma de cada fila es:\n ");
               for (k=0;k<n;k++)
                   printf ("%d\n", SUMA[k]);
               break;
           case 2:
               for (j=0;j<n;j++)
               {
                   may = 0;
                   for (i=0;i<n;i++)
                   {
                       if (m[i][j] > may)
                           may = m[i][j];
                   }
                   MAYOR[j] = may;
               }
               printf ("\nEl elemento mayor de cada columna es: \n");
               for (k=0;k<n;k++)
                   printf ("%d\n", MAYOR[k]);
               break;
           case 3:
               sumar = 0;
               for (i=0;i<n;i++)
               {
                   for (j=0;j<n-1;j++)
                   {
                       if (j == i)
                           sumar = sumar + m[i][j+1];
                   }
               }
               printf ("\nLa suma de los elementos es: %d\n", sumar);
               break;
           case 4:
               for (i=0;i<n;i++)
               {
                   for (j=0;j<n;j++)
                   {
                       if (SUMA[j] <= SUMA[i])
                       {
                           aux = SUMA[i];
                           SUMA[i] = SUMA[j];
                           SUMA[j] = aux;
                       }
                   }
               }
               printf ("\nEl orden de la suma es: \n");
               for (g=0;g<n;g++)
                   printf("%d\n",SUMA[g]);

               for (h=0;h<n;h++)
               {
                   for (k=0;k<n;k++)
                   {
                       if (MAYOR[k] >= MAYOR[h])
                       {
                           aux = MAYOR[h];
                           MAYOR[h] = MAYOR[k];
                           MAYOR[k] = aux;
                       }
                   }
               }
               printf ("\nEl orden de mayor es: ");
               for (f=0;f<n;f++)
                   printf("%d\n",MAYOR[f]);
               break;
           case 5:
               printf ("\nIngrese una Palabra: ");
               scanf("%s", palabra);
               x=strlen(palabra);
               x=x-1;
               for(y=0,z=x;y<=x/2;y++,z--)
                   if(palabra[y]==palabra[z])
                   {
                       printf("Es palindromo\n");
                       break;
                   }
               else
                   {
                       printf("No es palindromo\n");
                       break;
                   }break;
           case 6:
               printf ("Integrantes:\n  *Castillo Luis\n  *Rodriguez Ronald\n  *Moreno Jose Daniel\n");
               op = 6;
           }


       }while (op != 6);
       break;

   }
   else
       printf ("\n\t\tContraseña Incorrecta");
       faltan--;

}
while (faltan>0);
if(faltan==0)
printf("\n\n\tNumero de intentos maximos alcanzados hasta luego =D");

   return 0;
}

user-marcos

El vector MAYOR, no tiene ningún valor asignado, los valores que te da, son los valores "basura", cuando accedes a la posición de memria reservada por el compilador, sin antes haber asignado valor, obtienes los valores que están en memoria probablemente usado antes por otro programa.

banwave_

Veo que para la opcion 4, nunca asignas valores a tus vectores: SUMA[] y MAYOR[], por lo que contienen basura es por esto los numeros negativos, tienes que pasar los valores de tu vetor m[] donde almacenas los valores capturados para su manipulacion.

neron991

Gracias, ahora mi ultima duda esta en el case 3 de la suma por encima de la diagonal, me di cuenta que tampoco me da el resultado esperado he intentado todo colocar == tambien < y nada que me suma los numeros por encima de la diagonal principal, eso seria todo xD

banwave_

Puedes mostrar un ejemplo de como seria esta suma? ya que no te entiendo lo que quieres hacer xD, con esto verificamos el programa   :silbar:

neron991

Ejemplo: tenemos el caso de que la matriz sea tres por tres

1   2   3
2   4   2
1   3   1

y se requiera sumar todo por encima de la diagonal principal de esa matriz que en este caso vendria siendo 2 3 y 2, pero el detalle esta en que el programa me suma es la diagonal principal que seria 2 y 2 en vez de toda la diagonal principal que comprende el 2 3 y 2, no se si me entiendas xD  :-\ :-\

banwave_

mmm creo que si entendi jajaj haber prueba este cambio en tu case 3:


Código (cpp) [Seleccionar]


for (i=0;i<=n-2;i++)
                {
                    for (j=1;j<=n-1;j++)
                    {
                      if (j != i)
                            sumar = sumar + m[i][j];
                    }
                }



neron991


banwave_

Pueden cerrar este tema... esta solucionado.
Gracias!