Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] ejercicio de matrices en programacion c

Estas en el tema de ejercicio de matrices en programacion c en el foro de C/C++ en Foros del Web. hola que tal estoy tratando de ordenar de menor a manor las filas de mi matriz 3x3 el tema es que utilizo el metodo de ...
  #1 (permalink)  
Antiguo 05/09/2013, 22:07
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 14 años, 2 meses
Puntos: 0
ejercicio de matrices en programacion c

hola que tal
estoy tratando de ordenar de menor a manor las filas de mi matriz 3x3
el tema es que utilizo el metodo de la burbuja, ya que es simple
pero en mi caso
no funciona y no solo eso, no los ordena y en la ultima posicion aparece un numero de direccion(???

no entiendo porque

lo que hago es esto

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <Windows.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5. #define FILAS 3
  6. #define COLUMNAS 3
  7. void cargarMatriz();
  8. int main()
  9. {
  10.  
  11.  
  12.     cargarMatriz();
  13.     system("pause");
  14.     return 0;
  15. }
  16.  
  17. void cargarMatriz()
  18. {
  19.     int num = 0;
  20.     int i= 0;
  21.     int j= 0;
  22.     int simetrica =COLUMNAS * FILAS;
  23.     int matriz1[FILAS][COLUMNAS];
  24.    
  25.     int aux= 0;
  26.     int aux2=0;
  27.  
  28.     for( i ; i <FILAS; i++)
  29.     {
  30.         for (j; j < COLUMNAS; j++)
  31.         {
  32.             printf("ingrese un numero\n");
  33.             scanf("%d" , &matriz1[i][j]);
  34.         }
  35.         j = 0;
  36.    
  37.     }
  38.  
  39.     ///////////////
  40.     i = 0;
  41.     j = 0;
  42.     for( i ; i <FILAS; i++)
  43.     {
  44.         for (j; j < COLUMNAS; j++)
  45.         {
  46.             printf("  %d  ",matriz1[i][j]);
  47.         }
  48.         j = 0;
  49.         printf("\n");
  50.     }
  51.  
  52.     ////
  53.     i = 0;
  54.     j = 0;
  55.     printf("ordeno sus filas en ascendencia\n");
  56.    
  57.     for( i ; i <FILAS; i++)
  58.     {
  59.         j = 0;
  60.  
  61.         for (j ; j < COLUMNAS; j++)
  62.         {
  63.            
  64.  
  65.                 if (matriz1[i][j] > matriz1[i][j+1])
  66.                 {
  67.  
  68.                     aux= matriz1[i][j];
  69.                     matriz1[i][j] = matriz1[i][j+1];
  70.                     matriz1[i][j+1] = aux;
  71.                 }
  72.  
  73.            
  74.  
  75.             printf("  %d  ",matriz1[i][j]);
  76.         }
  77.        
  78.         printf("\n");
  79.     }
  80.    
  81.  
  82.  
  83.     //muestro ordenado
  84.    
  85. }


sale algo asi
(valores ficticios)


2 1 2
55 6 2
34 5 -383873

O.o

Última edición por eke_ps; 05/09/2013 a las 22:24
  #2 (permalink)  
Antiguo 05/09/2013, 23:08
 
Fecha de Ingreso: septiembre-2013
Mensajes: 5
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: ejercicio de matrices en programacion c

Probaste usando cin>> y cout<< para mostrar y cargar????
  #3 (permalink)  
Antiguo 05/09/2013, 23:12
 
Fecha de Ingreso: septiembre-2013
Mensajes: 5
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: ejercicio de matrices en programacion c

Ahh y tambien intenta usar las variables de otra forma en el for ejemplo: for(int i=0; i<FILAS; i++)
de esa misma forma usas j y no las tienes que declarar arriba y no iria la linea 35
  #4 (permalink)  
Antiguo 06/09/2013, 07:30
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 11 meses
Puntos: 25
Respuesta: ejercicio de matrices en programacion c

El ordenamiento de burbuja consiste en comparar cada valor con todos los que le siguen, si es mayor a uno de los siguientes, se realiza el intercambio y se continúa con las comparaciones.
En tu algoritmo, estas comparando cada valor con su contiguo y no con todos los que le siguen, por lo que si tenes los siguientes valores:

1
7
9
0
4
10
7

Te van a quedar ordenados de la siguiente manera:

1
7
0
4
5
9
7
10

Ahora, tu problema de que te imprima una dirección de memoria es porque el for que se maneja con la variable j recorre el arreglo completo con el ultimo valor inclusive, por lo que en la siguiente linea, en la ultima iteracion j va a tener el valor mas grande que pueda y que será la cantidad de las columnas. Entonces, matriz[i][j+1] está referenciando a una posición fuera del arreglo:

Código C:
Ver original
  1. if (matriz1[i][j] > matriz1[i][j+1])

Entonces, deberías de modificar tu código en la parte del ordenamiento:

Código C:
Ver original
  1. int k= 0;//nueva variable
  2.  
  3. for( i ; i <FILAS; i++)
  4.     {
  5.         j = 0;
  6.  
  7.         //j itera desde la primera columna a la anteultima
  8.         for (j ; j < COLUMNAS - 1; j++)
  9.         {
  10.             //k itera desde la columna siguiente a la de j hasta la ultima
  11.             k= j+1;
  12.             for (k; k<COLUMNAS; k++){
  13.  
  14.                 if (matriz1[i][j] > matriz1[i][k])
  15.                 {
  16.  
  17.                     aux= matriz1[i][j];
  18.                     matriz1[i][j] = matriz1[i][k];
  19.                     matriz1[i][k] = aux;
  20.                 }
  21.  
  22.              printf("  %d  ",matriz1[i][j]);
  23.  
  24.             }
  25.            
  26.         }
  27.        
  28.         printf("\n");
  29.     }

Creo que ahi debería funcionar, no lo he probado

Ordenamiento burbuja wikipedia



Saludos. Espero que funcione y que me hayas entendido .
  #5 (permalink)  
Antiguo 08/09/2013, 00:56
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ejercicio de matrices en programacion c

muchas gracias me funciono y lo entendi
claro yo hacia para una sola fila y ademas tiraba el +1 sin poner el columnas -1
entonces iba a buscar un lugar donde no habia nada

gracias

Etiquetas: ejercicio, funcion, matrices, numero, programacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:46.