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
Ej 11 Modulo 2 ¿Como lo resolverian?
Autor Mensaje
Zeva Sin conexión
Militante

***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 78
Agradecimientos dados: 6
Agradecimientos: 101 en 8 posts
Registro en: Oct 2012
Mensaje: #1
Ej 11 Modulo 2 ¿Como lo resolverian? Ejercicios y 1 más Algoritmos y Estructuras de Datos
Me puse a hacer los ejercicios de los módulos para practicar pa' el final que lo debería a ver rendido ya hace un año y me tope con el Ej 11 del modulo 2 (archivos y arrays) que dice así:

Ej. MII-11: Dado el archivo generado en el ejercicio MII-7, desarrolle un programa que genere un archivo ordenado por número de legajo (cada registro debe tener los campos legajo y apellido y nombre) para todos los alumnos que se inscribieron una o más veces. Cada legajo debe ocupar una posición única y predecible en el archivo. El intervalo de los legajos es 80001 a 110000, pueden no presentarse todos los legajos.

Esta es la estructura del archivo Ej 7:

a.1 Nro. de legajo (8 dígitos) a.2 Código de materia (6 dígitos)
a.3 Día del examen (1..31) a.4 Mes del examen (1..12)
a.5 Año del examen (4 dígitos) a.6 Nombre-Apellido (25caract)

Se supone que todavía no vi arrays, métodos de ordenamiento y estructuras dinámicas. Entonces como lo ordeno? Se me ocurrió lo siguiente:

1-> Recorro el archivo y determino el legajo más grande.
2-> Vuelvo a recorre el archivo y guardo en otro nuevo archivo los campos que me piden del registro si el campo legajo coincide con el legajo grande. (Puede estar más de una vez por eso vuelvo a recorre)
3-> Recorro el archivo y determino el legajo que le sigue al legajo mas grande, es más pequeño que legajo grande pero más grande que todo los demás. Reemplazo el legajo más grande por el valor que determine recién.
4 -> Vuelvo a 2
5-> Termino cuando ya no hay legajos que sean más chicos que legajo grande.

Como ven no es una manera muy linda de ordenar un archivo, pero en principio debería funcionar. Por eso me pregunto no me estaré olvidando de algo que vi en la cursada. ¿Cómo lo resolverían?

thumbup3
Otros adjuntos en este tema
.png  DF.png ( 15,53 KB / 446) por Zeva

(Este mensaje fue modificado por última vez en: 03-01-2013 18:19 por Aye.)
15-12-2012 11:38
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Zeva Sin conexión
Militante

***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 78
Agradecimientos dados: 6
Agradecimientos: 101 en 8 posts
Registro en: Oct 2012
Mensaje: #2
RE: Ej 11 Modulo 2 ¿Como lo resolverian?
Acabo de leer en la primer hoja que como tema entra busqueda binaria, asi que se me ocurrio, hacer un for de 110000 a 80001 (en ese orden o el inverso, el ejercicio no lo indica), invocando la funcion de busqueda binaria sobre el archivo, tendiendo en cuenta que un alumno puede estar inscipto mas de una ves. Esta funcion me devolveria true (ademas de la posicion), si el legajo se encuentra o false en caso contrario, luego uso seek(arch,pos) para posicionarme y listo leo el registro y lo guardo en otro archivo.


Editado:

Me olvide que pa' usar busqueda binaria el array o archivo debe estar ordenado... que gil que soy, bueno otra cosa mas que para el ejercicio no se puede usar.

(Este mensaje fue modificado por última vez en: 15-12-2012 14:03 por Zeva.)
15-12-2012 13:46
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanuiit Ausente
♫ I'm Blue ...
... Da ba dee, da ba da ♫
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 8.871
Agradecimientos dados: 216
Agradecimientos: 626 en 210 posts
Registro en: Aug 2010
Mensaje: #3
RE: Ej 11 Modulo 2 ¿Como lo resolverian?
El problema de eso es que estás leyendo como mucho 30000 veces un archivo.
En serio no está ordenado por ninguna clave?

ALGORITMOS

Apuntes: Mem. Dinámica - Mem. Estática - Proc. y Funciones || Guías: Módulos + 83 Ejercicios || Finales: 2004-2013


[Imagen: digitalizartransparent.png]

[Imagen: firmananiv2.png]
15-12-2012 14:36
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Zeva Sin conexión
Militante

***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 78
Agradecimientos dados: 6
Agradecimientos: 101 en 8 posts
Registro en: Oct 2012
Mensaje: #4
RE: Ej 11 Modulo 2 ¿Como lo resolverian?
(15-12-2012 14:36)nanuiit escribió:  El problema de eso es que estás leyendo como mucho 30000 veces un archivo.
En serio no está ordenado por ninguna clave?

Si ya se, si hago eso en un final me meten una patada en el tuj....

Dice asi:

Ej. MII-7: Se dispone de un conjunto de boletas de inscripción de alumnos a examen en el mes de mayo.
Cada boleta tiene los siguientes datos: nombre y apellido, número de legajo, código de materia, día, mes y año del examen. Los datos finalizan con un nombre y apellido nulo.
Dada la siguiente representación gráfica del algoritmo realice los pasos restantes para desarrollar un programa que a partir del ingreso de las boletas mencionadas, por teclado, genere un archivo binario de inscripción de alumnos a exámenes finales DIAFINALES.DAT, según el siguiente diseño:

a.1 Nro. de legajo (8 dígitos) a.2 Código de materia (6 dígitos)
a.3 Día del examen (1..31) a.4 Mes del examen (1..12)
a.5 Año del examen (4 dígitos) a.6 Nombre-Apellido (25caract)

Te adjunto el diagrama de flujo que viene en el ejercicio.

Como ves no esta ordenado ni de cuasualidad por ninguna clave. No le encuentro la forma de resolverlo bien.


Archivo(s) adjuntos Imagen(es)
   

15-12-2012 17:05
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanuiit Ausente
♫ I'm Blue ...
... Da ba dee, da ba da ♫
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 8.871
Agradecimientos dados: 216
Agradecimientos: 626 en 210 posts
Registro en: Aug 2010
Mensaje: #5
RE: Ej 11 Modulo 2 ¿Como lo resolverian?
Okay.

1- Eso no es un diagrama de flujo =P. El de flujo es el que tiene rombitos con la condición, y bla bla bla
2- Emm, en realidad no te especifica nada, si está ordenado, lo más lógico es que no lo esté, como vos decís. Es decir, que tenga orden natural.

Una cosa que podrías hacer, valiéndote de la posición única predecible:


var
posic: word;

Begin
ASSIGN (ARCHOUT, 'ArchivoNuevo.dat')
REWRITE (ARCHOUT)
ASSIGN (ARCHIN, 'DiasFinales.dat')
RESET (ARCHIN)

While not eof (archin) /* ojo, podés hacer una lectura booleana, pero estoy apurada) */
readln(archin);
posic := rarchin.legajo - 80000
seek (archout, posic)

/* y acá grabás */

...

end;

end.


Deberías controlar que si ya lo insertaste, no volver a insertarlo. Ahí sí podrías hacer una búsqueda binaria en el ARCHOUT

De esa manera te ahorrás las 30000 lecturas, y las búsquedas secuenciales

Chiflá si no se entendió

Off-topic:
Ah, no lo compiles porque no anda, le faltan los puntos y comas, el nombre de programa, entre otros =P

ALGORITMOS

Apuntes: Mem. Dinámica - Mem. Estática - Proc. y Funciones || Guías: Módulos + 83 Ejercicios || Finales: 2004-2013


[Imagen: digitalizartransparent.png]

[Imagen: firmananiv2.png]
(Este mensaje fue modificado por última vez en: 15-12-2012 17:53 por nanuiit.)
15-12-2012 17:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] nanuiit recibio 1 Gracias por este post
Zeva (15-12-2012)
Zeva Sin conexión
Militante

***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 78
Agradecimientos dados: 6
Agradecimientos: 101 en 8 posts
Registro en: Oct 2012
Mensaje: #6
RE: Ej 11 Modulo 2 ¿Como lo resolverian?
Me parece bastante correcta tu forma de resolverla, comparada con la mia que es un desastre... El unico inconveniente que le encuentro, es que vas a tener algunos sectores del archivo en blanco. pero bue.... es menor Gracias. doble thumbup3thumbup3

15-12-2012 19:33
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanuiit Ausente
♫ I'm Blue ...
... Da ba dee, da ba da ♫
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 8.871
Agradecimientos dados: 216
Agradecimientos: 626 en 210 posts
Registro en: Aug 2010
Mensaje: #7
RE: Ej 11 Modulo 2 ¿Como lo resolverian?
El tema es que ese ejercicio debería ser resuelto con arrays. Creo que arrays arranca por el ej. 10.
Sé que el ejercicio lo tengo resuelto.
Lo que no tengo son los apuntes donde lo tenía. Lo presté y todavía no volvió

Lo resolví así porque:

"Cada legajo debe ocupar una posición única y predecible en el archivo. El intervalo de los legajos es 80001 a 110000, pueden no presentarse todos los legajos"

Eso me obliga a dejar "en blanco" algunos registros.
Podrías hacerle una segunda pasada al archivo y meterle ceros y blancos a quienes no se anotaron.
No podés comprimir el archivo porque se te va la P.U.P

No podés leer 30000 veces el archivo.

Así que me parece lo más feliz.

Insisto, con arrays eso no pasaba. En los finales olvídalo que te den algo así.

ALGORITMOS

Apuntes: Mem. Dinámica - Mem. Estática - Proc. y Funciones || Guías: Módulos + 83 Ejercicios || Finales: 2004-2013


[Imagen: digitalizartransparent.png]

[Imagen: firmananiv2.png]
16-12-2012 12: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)