6 ago. 2012

Programación en C - Ordenamiento de Matrices

Hola a todos, en esta ocasión les presento una forma muy simple de ordenar una matriz en el lenguaje de Programación C estructurado.

En alguna ocasión en el uso de este lenguaje de programación se suele utilizar el uso de matrices con alguna finalidad específica, sobre todo, matemática. Una operación muy simple en el uso de matrices puede ser su ordenamiento por valores, pero este algoritmo que parece tan fácil de realizar como resultaría en vectores, cobra una nueva dimensión y se convierte en un verdadero dolor de cabeza, ya que al estar trabajando con filas y columnas hay muchas validaciones que se deben tener en cuenta para no salirse de la matriz al consultar valores.

Algo que debemos tener en cuenta para facilitarnos la tarea, es que el lenguaje de Programación C, toma a las matrices como un conjunto de vectores, por lo cual su almacenamiento en memoria es lineal, entonces al recorrer y salir de un vector (o fila), lo que estaremos obteniendo no será basura de la memoria, sino que será el primer valor del próximo vector (próxima fila, primer columna). Veamos mejor como funciona esto.

En el caso que declaremos una matriz de 2 x 3:

Estas serán vistas de 2 formas, una forma lógica (como nosotros vemos y entendemos que es una matriz), y una forma del lenguaje (como ve en memoria el lenguaje de programación a una matriz)


Si imprimimos por pantalla el valor de matriz[0][0] obtendremos el 2, matriz[0][1] el 4, matriz[0][2] el 9, matriz[1][0] el 22, matriz[1][1] el 1, matriz[1][2] el 8. Pero… ¿Que sucede si imprimimos el valor matriz[0][3]?, lo lógico sería pensar que se obtiene basura de la memoria, pero no es así, como mencionábamos anteriormente, la matriz es memoria es un único vector, y al imprimir matriz[0][3] obtendremos el 22, matriz[0][4] el 1, matriz[0][5] el 8.

Una vez aclarado este tan importante punto, procedemos a hacer nuestro programa que ordene una matriz de enteros



Esto es todo por hoy, cualquier duda/pregunta en los comentarios :)

Saludos!

-----
Argies_Dario


Compilado con: Microsoft Visual Studio 2008
Sistema Operativo: Windows 7

Fuentes:
Ninguna

2 comentarios:

  1. En el ordenamiento de letras. Cuál es mayor, una g o una G. Y en el caso de que fuera a y G, ¿se tendría en cuenta el orden alfabético?

    ResponderEliminar
    Respuestas
    1. Hola Cristina, para responder esa pregunta debes consultar la tabla de codigos ASCII, la cual muestra el valor representativo de cada letra, la misma la podes ver aca: http://ascii.cl/es/

      Como podrás ver, la 'G' tiene el valor 71, mientras que la 'g' tiene valor 103, dependerá de la comparación que realices cual ira antes en tu ordenamiento (una tontería, fijate que el ‘@’ tiene el valor 64, y la forma de escribirlo por teclado es ALT+64, si realizas ALT+71, vas a obtener la 'G', ALT+103 la 'g', y así utilizando la tabla podrás hacer cualquier carácter permitido).

      Si lo que buscas es comparar strings (cadena de caracteres), debes investigar la función strcmp, la cual compara 2 strings y devuelve un valor entero dependiendo de que cadena es mayor en sus códigos ASCII. Podes ver el funcionamiento de esta función aca: http://www.cplusplus.com/reference/cstring/strcmp/ . Cuando tenga mas tiempo disponible voy a dedicar un post a como ordenar cadenas de caracteres con esta función ya que es un tema sumamente útil e interesante.

      Espero haberte ayudado!

      Saludos

      Eliminar

Dejanos tu comentario sobre esta nota