5.9 Pasaje de información entre argumento y parámetro
6.0.3 Ejemplos de usos de estructuras de datos
A continuación se plantean distintas situaciones problemáticas que servirán para ejemplificar en cuáles circunstancias es adecuado elegir una estructuras de datos para organizar la información a procesar y en cualés no. Se hace un breve análisis y se representan gráficamente, en forma esquemática, los lugares de memoria que ocuparían los valores a procesar; no nos ocuparemos de cómo llevar a cabo el proceso.
Si bien la memoria no está organizada según un patrón geométrico, imaginaremos con una figura de forma rectangular, al lugar que en ella ocuparía cada valor a mantener. De esta forma, asociaremos el espacio de memoria dispuesto para una estructura de datos con un agrupamiento de rectángulos contiguos (cada uno para un componente de la estructura).En realidad, los valores están dispersos en un área amplia de la memoria, pero los lenguajes de programación están dis- eñados para que el programador los pueda manipular “como si estuvieran” acomodados en forma adyacente.En la etapa de desarrollo del algoritmo es suficiente que nos limitemos a considerar la posibilidad de trabajar con grupos de datos organizados de esta manera ya que es, básicamente, la forma a la que se ajustan los lenguajes de programación que están a nuestro alcance. Cuando se estudie un lenguaje, será necesario aprender a usar las herramientas específicas de que se dispone para expresar el tratamiento de las estructuras de datos que se han planteado desde la algoritmia.
1oSe dispone de 15 números enteros. Mostrarlos ordenados en forma creciente. Datos: cada uno de los números de un conjunto finito (son 15 números)
Resultado: el conjunto de números, clasificados de menor a mayor. Proceso: ordenar los números del conjunto.
Nos preguntamos ¿cómo se pueden usar los recursos de una computadora para llevar a cabo este proceso?. Intuitivamente podemos pensar que la computadora tendrá que disponer del conjunto completo de números en su memoria, para poder compararlos entre si y decidir la nueva ubicación de cada uno ellos.Por lo tanto, la unidad de dato a procesar es el conjunto de números y los lugares de memoria que se requerirían para guardar a todos esos números, se podría representar gráficamente como:
2oSe dispone de 15 números enteros. Mostrar el resultado de sumar a todos los que
pertenecen al [-5, 38].
Datos: cada uno de los números de un conjunto finito (son 15 números) Resultado: un único valor, resultante de una sumatoria.
Proceso: sumar sólo aquellos números del conjunto dado, que cumplan una determinada condi- ción.
122 Estructuras de datos
el conjunto completo de números en memoria, bastaría con tenerlos y procesarlos de a uno por vez.Por lo tanto, la unidad de dato a procesar es un número y la unidad de dato resultante del proceso es otro número.La representación gráfica de los lugares de memoria a usar sería:
3oSe dispone de la edad de una persona y de su nombre. Se quiere saber si se trata de un menor de edad (menos de 18 años) y si el nombre es JUAN.
Datos: edad y nombre de una persona, valor de edad máxima y nombre determinado (18 y JUAN respectivamente)Resultado: dos mensajes. Cada uno de ellos aseverará o no, sendas afirmaciones que se plantean en el enunciado.Proceso: comparar el valor de cada dato de la persona con el correspondiente dado.En este caso hay 2 unidades de datos a procesar: la edad y el nombre de una persona (el primero es un dato simple y el segundo es un conjunto de caracteres).
La representación gráfica de los lugares de memoria a usar sería:
4oSe dispone de la edad y el nombre de 7 personas. Determinar cuántos son menores de edad (menos de 18 años) y cuántos se llaman JUAN.
Datos: edad y nombre de cada una de las personas de un conjunto finito (son 7 pares de datos), val- or de edad máxima y nombre determinado (18 y JUAN respectivamente)Resultado: dos valores. Cada uno corresponde a la cantidad de veces que se verifica determinada afirmación.Proceso: contar la ocurrencia de algo. Para ambos casos lo que debe contarse es la veracidad de una comparación (valor de la edad comparada con 18, valor de nombre comparado con JUAN).La situación descrita en este problema es, en síntesis, igual a la anterior. El proceso al que debe someterse a los valores individuales de edad y nombre es la comparación de cada uno de ellos con otro valor, que está dado. La diferencia radica en lo que hay que hacer con el resultado de esa comparación. Por eso, en este caso, la respuesta definitiva se alcanza luego de procesar los valores de edad y nombre de las 7 personas (en el anterior era sólo de una).El tratamiento de los datos de cada persona (edad y nombre), es independiente de la cantidad de las mismas (sea una o más). Por lo tanto, la computadora NO necesita disponer del conjunto completo de datos en su memoria; bastará con los que correspondan a una persona por vez.Hay entonces, 2 unidades de datos a procesar: la edad y el nombre de cada una de las persona (el primero es un dato simple y el segundo es un conjunto de caracteres).La representación gráfica de los lugares de memoria a usar sería:
5oSe dispone de la edad y el nombre de 7 personas. Mostrar el nombre de los que tienen más edad que el promedio del grupo.
123
Resultado: uno o más valores (no podemos precisarlo a priori).
Proceso: calcular el valor promedio de uno de los datos (edad) y luego comparar ese promedio con cada uno de los valores que se usó para obtenerlo; de esa comparación resultará la vincu- lación o no con el otro dato (nombre).Evidentemente hay un dato (edad), cuyos valores serán procesados de distinta forma en distintos momentos: primero obteniendo la edad promedio y luego comparando cada edad con ese resultado. Pero no debe olvidarse, que a cada dato que interviene en el cálculo del promedio le corresponde otro dato (nombre) cuyo valor podrá ser o no el resultado del problema, dependiendo esto de la comparación mencionada (edad promedio ~edad individual).En este caso, la computadora tendrá que disponer del conjunto completo de los datos de las personas en su memoria, para poder realizar todo el tratamiento, pues éste requiere de un mismo valor más de una vez (edad).Hay un conjunto de datos a procesar: todo el grupo de personas (es un conjunto formado por edad y nombre).La representación gráfica de los lugares de memoria a usar sería:
6oDe un conjunto de números enteros positivos de dos cifras con repeticiones, se quiere deter- minar la cantidad de veces que aparece cada número, en el conjunto.Datos: cada uno de los números de un conjunto finito (no hay información acerca de la cantidad de números que inte- gran el conjunto). El valor de cada número es cualquiera que pertenezca al [10, 99].Resultado: noventa valores. Cada uno corresponde a la cantidad de veces que un valor se repite en el conjunto.Proceso: contar las veces que cada número se repite en el conjunto (cantidad de 10, cantidad de 11,. . . , cantidad de 99).En este caso, la unidad de dato a procesar es cada número del conjunto.De las características del proceso a que se debe someter a cada número (contarlo según su valor) resulta que NO es necesario mantener en memoria a todos ellos; aunque SI será indispensable que permanezcan disponibles en memoria, 90 lugares distintos. Cada lugar deberá ser usado para contar la ocurrencia de cada número. En definitiva, habrá un conjunto de datos resultante.Representación gráfica de los lugares de memoria a usar:*
124 Estructuras de datos