UTNianos

Versión completa: [Consulta] Algoritmos 20/09/06
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Final Algoritmos y Estructura de Datos 20/09/06

Una concesionaria con 9 sucursales vende 90 modelos de automóvil diferentes y cuenta con el siguiente archivo de ventas:

a) VENTAS, orden natural, con un registro por cada venta de cada automotor (en un reg. de venta pueden venderse hasta 99 unidades de un mismo modelo)

a.1) Código de modelo (12 car.) a.2) Sucursal (1 a 9)
a.3) Cantidad unidades vendidas (2 díg.)

1) Emita el siguiente listado de ventas por modelo y sucursal, con el siguiente contenido
Código de modelo: XXXXXXXXXXXXX Mayor Venta Unitaria: 99 (> a.3 para dicho modelo)
Sucursal Total de Unidades Vendidas
9 9999 (sumat. de a.3 para dicho modelo/sucursal)

Recursos, restricciones: Mem. p/arrays: 1400 bytes. Mem. dinámica: 22 bytes x nodo, 2200 bytes totales. Disco: Sin espacio adicional.
Desarrollar estructuras de datos con su defin. Pascal, estrategia y algoritmo. Utilice módulos de ambos tipos (procedimiento/s y funcion/es) con parámetros.
Utilizar nombres significativos para los identificadores, dibujo de las estructuras a utilizar rotulando cada elemento. Escribir una carilla por hoja rotulando en c/u. de ellas su Apellido, Nombre y Nro.Página x de y.



Viendo entre los finales que tenia me tope con este, parece sencillo pero cuando planteo la estructura no me dan las restricciones:

Necesito por modelo las ventas de las concecionarias, entonces dije armemos un array con el Numero de modelo y un puntero a un listado de ventas de ese modelo de cada concecionaria.

he aqui : 90 * (13b+4b) osea 1530.

alguna sugerencia?
Yo al principio pense la misma, pero dps se me ocurrio otra:
Vector de 90. Con 4byts para una lista y otro byte para la cantidad total vendida = 90*5 =450

lista: modelo(13) numero de sucursal(1) total(1) sigu(4) =19

nose.. me parece raro. pero funciona
Lo pensé pero si armo un vector de 90 como decís vos como relaciono los punteros con cada lista? es decir cuando leo el archivo de los movimientos como se en que posición ponerlo. Porque la clave seria el modelo. No se si me explico.
lista y vector paralelos es una buena opción

vector:
modelo(13) + cantidad total vendida(1) = 14 * 90 = 1260 b

lista:
sublista(4) sigu(4)

sublista:
numero de sucursal(1) total(1) sigu(4)

Estrategia:
Abro archivos e inicializo estructuras.
Leo archivo y por cada registro busco en el vector.
Sino esta, lo inserto ordenado por nombre, caso contrario utilizo el indice de posición del vector para recorrer esa cantidad de nodos de la lista y recorro la sublista hasta dar con la sucursal o crearla. En todos los casos incremento lo vendido en cada estructura.
Luego imprimo leyendo el vector y accediendo a la nodo de la lista correspondiente, liberando luego de utilizar la info.

Espero te sirva y entiendas esta opción.

Saludos!
y es mas trabajoso, no esta mal.

Tenes 90 listas, uno de los registros de esa lista es el numero de modelo. Usas busquedas en listas y listo..Osea usas el puntero Vec[n]^ìnfo^modelo osea re facil.

Lees un registro, buscas si es la primera vez que lo tenes que meter a la lista y actualizas o agregas. Para ordenar dps es facil tambien
Lagrange, gracias por la opcion pasa que generalmente pones listas en paralelo o vecto y lista en paralelo y no les gusta ...Igual la veo Valida pero bueno!



(23-02-2012 12:55)CarooLina escribió: [ -> ]y es mas trabajoso, no esta mal.

Tenes 90 listas, uno de los registros de esa lista es el numero de modelo. Usas busquedas en listas y listo..Osea usas el puntero Vec[n]^ìnfo^modelo osea re facil.

Lees un registro, buscas si es la primera vez que lo tenes que meter a la lista y actualizas o agregas. Para ordenar dps es facil tambien

Estoy medio embotado despues de varios finales este es sencillo pero no entiendo o siguiente:

Tengo un vecto de 90 posiciones con 2 campos, uno es un puntero a un lista y otro es un campo de totales. Hasta ahi barbaro...lo que no logro ver es por ejemplo leo el primer registro y no va estar en el vector en que posicion del vector lo cuelgo ?Es eso lo que no veo como relacionar el vector con la lista entiendo que la lista vaa ser de ventas de un modelo especifico y voy a tener 90 como max....pero la pregunta es al leer una venta ponele como se en qe posicion ponerla del vector ?


Estoy mas que bloqueado y agradezco la ayuda!!
A listo, entendi tu duda.

Vos tenes un unico archivo, asique la unica solucion para empezar es leerlo.
Asig..blabla
Abris el while, not eof arch
Lees un registro: ese registro consta de un numero de modelo + numero de sucursal + cantidad vendida.

Algunas observaciones:
- La misma sucursal para el mismo modelo puede aparecer mas de una vez
- El archivo se encuentra en orden natural

Orden natural: se ingresaron los datos al archivo asi como fueron sucediendo, sin orden alguno.

Bueno, lo leimos POR PRIMERA VEZ. Nuesto vector esta con sus dos campos uno con "nil" y otro con "0" (lista y contador s/ corresponda) lees un numero de modelo por ser el primero te garantizas que no hay nada escrito y que va a ser el primero en tu vector.
Entonces armas un registro auxiliar para el nodo de la sucursal y todos los datos que te puse.
Termina de operar con el primer registro del archivo y VOLVES a leer.

Observaciones:
Entre las tres cosas que lees, una es el numero de modelo. Este nro puede ser igual al anterior o distinto. Entonces.. ¿Como sabes que es igual al anterior? Buscas en el vector, tu vector sea la posicion que sea el primer nodo SIEMPRE va a tener el nro de modelo.. entonces podes usar Vector[x].Lista^.info.nro de modelo! x=pos del vector (antes no puse Lista pq me olvide que tenia dos registros el vector sino seria directamente Vector[x]^.info.nro). Entonces, si lo encontras tenes que ACTUALIZAR... pero ahora acordate que vos tenias dos campos mas en el registro cantidad comprada y sucursal. Dentro de esa posicion del vector(osea la lista correspondiente) buscas si esta ese nro de sucursal si esta actualizas el nro vendido sino agregas otro nodo. OJO: los nodos se agregan ordenados de men a may por nro de sucursal( asi dps los mostras y lo necesitas para buscar dps!)
Si ese nro de modelo es diferente haces lo mismo que hiciste cuando leiste el primer registro.

Lo sè, es un poco heavy capas pero es la unica idea que se me ocurre y se hacerlo! La idea central de este algoritmo es que vos leeas, te fijes si este: si esta actualizas sino agregas. Trate de que eso se entendiera

saludos=)
URLs de referencia