UTNianos

Versión completa: [Ayuda] Final 23-07-2011
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola,

Alguien que haya podido resolver este final me puede dar una mano? O si hay una resolución por algún lado mejor...

Saludos
Para empezar, fijate que en ambos archivos se repite un campo, que es el número de licencia. Parece algo tonto, pero lo vas a tener que tomar como referencia a lo largo del programa.

Por una parte, para solucionar el punto 2, de acuerdo a lo que vayas leyendo de Infracciones.dat, vas a tener que armar un vector con las infracciones, donde cada índice tenga un registro que contenga:
V1. Descripción de la infracción (string[20]: 21)
V2. Cantidad de hombres infractores (longint: 4)
V3. Cantidad de mujeres infractores (longint: 4)
Por cada registro, tenes 29 bytes, justo lo que te alcanza para cada una de las cien infracciones (omitimos el código de infracción ya que, siendo 1..100, podemos obviarlo y suponer que el codigo es su indice en el vector. Total memoria: 2900 bytes
A medida que vas leyendo el archivo de infracciones, vas verificando en el vector si no fue agregado antes, y metes la descripción, y segun el sexo del infractor (que lo vas a ver en Conductores.dat cuando lo leas), incrementas el valor del campo correspondiente en uno. Finalmente, ordenando por campo de mujeres u hombres infractores, vas a poder emitir las tres infracciones más frecuentes.

Para el punto 1, vas a usar listas. Mientras resolviendo el punto anterior metías algunas cosas en vectores, también metés cosas en la estructura dinámica para luego resolver.
Por un lado, lees Conductores.dat, y metés en una lista lo siguiente:
L1. Numero de licencia (longint: 4)
L2. Sexo (char: 1)
L3. Cantidad de infracciones (longint: 4)
En cada nodo hay 9 bytes, también justo. A medida que leas Infractores.dat, vas a buscar el nodo en la lista (buscando según licencia), e incrementás en 1 la cantidad de infracciones. Y así con todos los casos, simultáneamente con el punto 2 como te lo pide el examen (1 recorrido secuencial por archivo).

Luego vas sacando los nodos de la lista, y vas incrementando según la situacion, en cada una de la siguientes variables: Contador total de conductores, contador de conductores masculinos, contador de conductores femeninos, contador total de infractores, contador total de infractores masculinos, contador de infractores femeninos. En una función desarrollás los porcentajes, y te quedan cuatro variables que serían las del...

Procedure MostrarMujeresAlVolante (PorcentajeMujeresConductoras, PorcentajeMujeresInfractoras, PorcentajeHombresConductores, PorcentajeHombresInfractores: single);


Si no se entendió algo, preguntá. Es más o menos lo que se me ocurrió a mí, pude haberle pifiado asi como también pegarle.
Buensiima tu solucion rob, yo lo hice de otra forma mega complicadisima jajajajaja pero muy buena la tuya=)

igual aca

"Para el punto 1, vas a usar listas. Mientras resolviendo el punto anterior metías algunas cosas en vectores, también metés cosas en la estructura dinámica para luego resolver.
Por un lado, lees Conductores.dat, y metés en una lista lo siguiente:
L1. Numero de licencia (longint: 4)
L2. Sexo (char: 1)
L3. Cantidad de infracciones (longint: 4)
En cada nodo hay 9 bytes, también justo. A medida que leas Infractores.dat, vas a buscar el nodo en la lista (buscando según licencia), e incrementás en 1 la cantidad de infracciones. Y así con todos los casos, simultáneamente con el punto 2 como te lo pide el examen (1 recorrido secuencial por archivo)."

no se si armaria asi la lista, por que no necesitas la cantidad de infracciones sino discriminarla por tipo de infraccion

Mejorando un poco:

Tomando la primera parte que cuando lees "infracciones.dat" que metes descripcion, cant de mujeres y hombres.. todo bien ! Pero mientras tambien en tu lista y guardo : nro licencia(4) tipo(1...100) sigu(4) =9bytes. Ya que sabemos que puede tener las 100 infracciones, 20 o 40. Me aseguro que no se repitan.. asique debo fijarme tanto la licencia como el nro de infraccion, puee haber la misma licencia para distintas infracciones.

Ahora toca la leida secuencial al segundo archivo, leo el registro.. y busco en la lista la licencia. Me traigo el nodo, incremento segun corresponda en el vector y elimino ESE nodo. Busco tantas veces hasta que el nodo que me traigo es igual a nil... eso quiere decir que no lo encontro, por que puede ser que la misma licencia tenga hasta 100 infracciones.

A medida que leo tambien este segundo archivo, tengo que tener un contador para conductores hombres y mujeres... para dps sacar el porcentaje. Una vez terminado con este segundo archivo voy a tener el vector con las descripciones y los contadores en cero o un nro mayor, la lista vacia y la cantidad de conductores varones y mujeres distinto de cero.

Para el pto1) armo los procentajes y los mando al procedimiento
para el 2) una idea... aunque van a ser 6 corridas busco el max de mujeres y muestro, lo pongo en cero eso (sino me va a aparecer denuevo como el maximo y la idea es buscar al segundo "maximo") y lo mismo hago con los hombres.
Cita:"Luego vas sacando los nodos de la lista, y vas incrementando según la situacion, en cada una de la siguientes variables: Contador total de conductores, contador de conductores masculinos, contador de conductores femeninos, contador total de infractores, contador total de infractores masculinos, contador de infractores femeninos. En una función desarrollás los porcentajes, y te quedan cuatro variables que serían las del..."


Cito eso para justificar porqué hice lo que hice, aunque debo admitir que releyéndola si, puede resultar un tanto confusa. Así que voy "de nuevo":

Por un lado, hay que discriminar por tipo de infracción para sacar los tres mejores de cada sexo, y eso es lo que va a hacer el vector (luego pensarás si lo hacés mediante un par de burbujeos o un procedimiento aparte). Y por el otro usás la lista, para ir acumulando la cantidad de infracciones de cada conductor, y finalmente extraer todo una vez terminado, así sacando los contadores de:
1) Hombres/mujeres al volante
2) Hombres/mujeres infractores (si usamos simplemente variables como contadores, voy a contar infracciones en lugar de infractores)

Luego con esas variables sacamos los porcentajes en otras variables, que las usara el Procedure MostrarMujeresAlVolante (PorcentajeMujeresConductoras, PorcentajeMujeresInfractoras, PorcentajeHombresConductores, PorcentajeHombresInfractores: single);.



Ooops, salió algo nuevo:


(16-09-2012 21:37)CarooLina escribió: [ -> ]Tomando la primera parte que cuando lees "infracciones.dat" que metes descripcion, cant de mujeres y hombres.. todo bien ! Pero mientras tambien en tu lista y guardo : nro licencia(4) tipo(1...100) sigu(4) =9bytes. Ya que sabemos que puede tener las 100 infracciones, 20 o 40. Me aseguro que no se repitan.. asique debo fijarme tanto la licencia como el nro de infraccion, puee haber la misma licencia para distintas infracciones.



Off-topic:
Metí la pata, y menos mal que no te avivaste, lo estaría lamentando! (?)


Un error en mi resuelto es que olvidé el puntero! por lo que corrijo: en mi listado tendría que poner sólo...
LI1. Numero de licencia (longint: 4) <-- ORDENADO EN ESTE CAMPO
LI2. Sexo (char: 1)
(Luego viene el puntero al siguiente, de 4 bytes por ser entero largo)

Luego, al sacar de la lista sí tengo que usar contadores para sacar la cantidad de infractores p/sexo (y no de infracciones p/sexo) evitando que se repitan (una lista ordenada evita eso).
Ahora sí todo debería estar bien.
pero no dice en ningun lado que necesites la cantidad de infracciones de cada conductor(osea de cada licencia) solo necesitas cantidad infracciones por sexo y cantidad de conductores por sexo.. nada mas
(16-09-2012 23:12)CarooLina escribió: [ -> ]pero no dice en ningun lado que necesites la cantidad de infracciones de cada conductor(osea de cada licencia) solo necesitas cantidad infracciones por sexo y cantidad de conductores por sexo.. nada mas

No te confundas, leé bien el procedimiento:
Procedure MostrarMujeresAlVolante (PorcentajeMujeresConductoras, PorcentajeMujeresInfractoras, PorcentajeHombresConductores, PorcentajeHombresInfractores: single);

Lo de conductores por sexo está bien, pero no pide infracciones por sexo, pide cantidad de personas infractoras por sexo (o sea, de todas las personas, cuales cometieron infracciones, no las infracciones cometidas por sexo).

Entonces, pongo las licencias para que, cuando vas sacando cada licencia de la lista (no importa de donde a donde), mientras la licencia no se repita, sume 1, caso contrario que siga de largo sin cambiar. Así permito contar a las personas infractoras, y no las infracciones.
leo bien y es a lo que me refiero.. infracciones por sexo quise decir las personas. Si antes lo aclare en el grande.. esta sobreentendido.

Off-topic:
Después se los chusmeo y les digo qué onda.
La verdad ando cortísima de tiempos
URLs de referencia