Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Algoritmos][Final] 29 de Octubre de 2009
Autor Mensaje
rocio_utn Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Jan 2011
Mensaje: #1
[Algoritmos][Final] 29 de Octubre de 2009 Finales Algoritmos y Estructuras de Datos
Hola! Alguien resolvio este final?


Archivo(s) adjuntos Imagen(es)
   
01-02-2011 14:27
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Anirus Sin conexión
Super Moderador
Sin estado :)
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.163
Agradecimientos dados: 81
Agradecimientos: 232 en 78 posts
Registro en: Nov 2009
Mensaje: #2
RE: [Algoritmos][Final] 29 de Octubre de 2009
Yo lo hice hace tiempo, creo que era así:

Vos sabés que son 20 tipos de tramites en total, y en las restricciones te dice que tenés 20 nodos de 15bytes, así que es un nodo por trámite. Cada nodo tiene que tener los suficientes datos para poder hacer el listado con los porcentajes de cada medio, para sacar un porcentaje necesitas dos cosas, una cantidad y la cantidad total, el total es la suma de las tres cantidades, así que no necesitas guardarlo en un campo, simplemente sumas cuando es necesario, lo mismo con los porcentajes generales, se van acumulando mientras imprimis la tabla.
La estructura por ahora sería así:
Código de trámite (3caracteres = 4b) | Personal |Telefono| Web| Siguiente

En Personal, Telefono y Web vas sumando la cantidad de veces que aparece en el archivo el código de trámite, ¿Cuantos bytes ocupan? 2, porque te dice que los archivos no posen más de 1000 registros, así que si por ejemplo en teléfono todos los registros fueran de un solo trámite, la suma no pasaría el nro 1000, así que basta con que sean variables de tipo Word.

En la tabla te piden además que imprimas la descripcion del trámite, pesa demasiado como para guardarlos en un nodo. En las restricciones dice que se tiene un acceso directo a cada registro del archivo de trámites además del secuencial, así que podés guardar la posicion en la que está la descripcion, la estructura queda así:

Posicion(1b pues no son más de 20 registros ya que es uno por tramite)
Código de trámite (4b)
Personal (2b)
Teléfono(2b)
Web (2b)
Siguiente(4b)


1+4+2+2+2+4 = 15b justito.

La estrategia es la siguiente, primero leer el archivo de trámites para cargar las posiciones y códigos de trámite en la lista, además de poner en 0 los contadores.

Después ir leyendo cada archivo de medio, por cada lectura buscar el codigo de tramite en la lista y sumar 1 al contador correspondiente. Es igual para los tres archivos, por eso te pide que uses un procedimiento. Le envias como parámetro el archivo que vas a leer, la lista, y la señal que es la que le va a indicar a tu método en cual de los campos sumar 1.
Eso se hace con case o ifs anidados, sería así:


abrir archivo
while (not Eof(archivo))
leer (archivo,registro)
nodo <- BuscarNodo( lista, registro.nroDeTramite)
Si la señal es 'P' : nodo^.info.personal = nodo^.info.personal +1;
Si la señal es 'T' : nodo^.info.telefono = nodo^.info.telefono +1;
Si la señal es 'W' : nodo^.info.web = nodo^.info.web +1;
fin
cerrar archivo


Una vez cargadas todas las cantidades, se reordena la lista según la suma de los tres campos, para eso usas un InsertaNodo y vas pasando los nodos a otra lista para que queden ordenados, entonces para el listado irías sacando el primer nodo. Otra opción que quizá te guste más es ir recorriendo la lista secuencialmente y buscando el máximo, una vez encontrado lo eliminas de la lista y procesas ese nodo para el listado y seguis así hasta que la lista esté vacía.

Para imprimir el listado sólo tenés que imprimir el código de trámite, buscar la descripcion leyendo el archivo tramites.dat en la posición que guardaste, y calcular cada porcentaje usando regla de tres usando como total la suma de las 3 cantidades. Mientras tanto vas acumulando el totalWeb, totalTelefono y totalPersonal para calcular los porcentajes generales al final.

Cualquier duda o si querés que te desarrolle alguna parte en diagrama o pascal para entenderla mejor avisá.
05-02-2011 15:10
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rocio_utn Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Jan 2011
Mensaje: #3
RE: [Algoritmos][Final] 29 de Octubre de 2009
Hola! Graciass! Me habia perdido con el tCadena y Senial del procedimiento que te dan en el primer punto pero ahora eso lo entendi perfectamente.

Me pierdo con reordenar la lista de una y de la otra manera que me dijiste, si podes desarrollarlo en diagrama estaria barbaro!

Muchas gracias! No conteste antes porque estaba de vacas
15-02-2011 22:07
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Anirus Sin conexión
Super Moderador
Sin estado :)
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.163
Agradecimientos dados: 81
Agradecimientos: 232 en 78 posts
Registro en: Nov 2009
Mensaje: #4
RE: [Algoritmos][Final] 29 de Octubre de 2009
Ahh , no noté el tCadena. Cadena es String, así que en lugar de enviarle el archivo, vas a enviar el nombre del archivo (ahora tiene sentido que se llame NombreArchivoMedios rofl ), así que dentro del procedure se va a hacer el asign(NombreArchivoMedios,arch) y el reset(arch) ademas del close(arch) al final.
En un rato si puedo te hago los diagramas, sino los posteo mañana.
(Este mensaje fue modificado por última vez en: 16-02-2011 00:47 por Anirus.)
16-02-2011 00:25
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rocio_utn Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Jan 2011
Mensaje: #5
RE: [Algoritmos][Final] 29 de Octubre de 2009
Muchas Gracias! Los diagramas me ayudarian un montonn!
16-02-2011 10:07
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Anirus Sin conexión
Super Moderador
Sin estado :)
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.163
Agradecimientos dados: 81
Agradecimientos: 232 en 78 posts
Registro en: Nov 2009
Mensaje: #6
RE: [Algoritmos][Final] 29 de Octubre de 2009
Acá hice la parte de imprimir el listado, lo hice buscando el minimo porque me acordé que cuando no dicen si el listado debe ser ordenado decrecientemente o crecientemente es creciente.

Spoiler: Mostrar
[Imagen: finaltramites.gif]
http://img248.imageshack.us/img248/1609/...amites.gif

Si ves algo raro preguntá porque seguro me equivoqué, estoy por salir y por ahi no revisé bien.

Lo que dije de ordenarlo pasando los nodos a otra lista no lo diagramo porque no es necesario para este final, igual te pongo la version más fácil:

while(listaNoOrdenada <> NIL) do begin
info<- eliminarPrimerNodo(listaNoOrdenada)
insertarOrdenado(listaOrdenada,info)
end

Y ahi te queda la listaNoOrdenada vacía y todo ordenadito en listaOrdenada
ahi ya vi que cuando arreglé algo borré el ultimo renglón, después del dispose viene BuscaMin<-info
(Este mensaje fue modificado por última vez en: 16-02-2011 19:29 por Anirus.)
16-02-2011 18:51
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)