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;
}
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.
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.
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
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:
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 :-\ :-\
mmm creo que si entendi jajaj haber prueba este cambio en tu case 3:
for (i=0;i<=n-2;i++)
{
for (j=1;j<=n-1;j++)
{
if (j != i)
sumar = sumar + m[i][j];
}
}
Man, jalo o no jalo?
Gracias hermano me sirvió!! Eres el amo :o :o
Pueden cerrar este tema... esta solucionado.
Gracias!