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 y Estructuras de Datos]Ayuda con ejercicio 29 de la guía de los 83 ejs.
Autor Mensaje
oreo_dorada Sin conexión
Militante
Con estado :)
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 51
Agradecimientos dados: 33
Agradecimientos: 12 en 6 posts
Registro en: Mar 2012
Mensaje: #1
[Algoritmos y Estructuras de Datos]Ayuda con ejercicio 29 de la guía de los 83 ejs. Ejercicios Algoritmos y Estructuras de Datos
Hola a todos!
Tengo dudas con la resolución del siguiente ejercicio:

Ejercicio Nro. 29:

Dado el archivo ALUMNOS.DAT con los datos personales de alumnos ordenado por legajo, donde cada registro contiene:
a) Nro. de legajo (7 dígitos) b) Apellido y nombres (30 caracteres) c) Domicilio (30 caracteres)
d) Código postal (4 dígitos) e) Teléfono (10 caracteres) f) Año de ingreso (4 dígitos)
y otro con el mismo orden que el mencionado llamado NOVEDAD.DAT, con las actualizaciones (altas, bajas y modificaciones) a ser aplicadas, donde cada registro contiene además de todos los campos de ALUMNOS.DAT un código de operación ('A'= Alta, 'B'= Baja, 'M'= Modificación).
Desarrollar el programa que actualice el archivo ALUMNOS.DAT con los registros de NOVEDAD.DAT y obtenga el archivo actualizado ALUMACTU.DAT.


Mi problema es que no sé con qué criterios realizar el apareo de los dos archivos. Espero puedan ayudarme =) Muchas Gracias!
12-02-2013 22:14
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rob. Sin conexión
Presidente del CEIT
Smile!
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.145
Agradecimientos dados: 126
Agradecimientos: 83 en 66 posts
Registro en: Dec 2010
Mensaje: #2
RE: [Algoritmos y Estructuras de Datos]Ayuda con ejercicio 29 de la guía de los 83 e
Es que en realidad no vendría a ser un apareo propiamente dicho, vendría a ser algo más complejo que eso; dado que no estás combinando dos archivos en uno, sino que estás leyendo uno y comparando con otro vas subiendo una nueva versión del que ya tenías.

La forma de laburar con esto vendría a ser leer un registro de cada uno, y ver si coinciden. De no coincidir, en caso de que el registro de NOVEDAD tenga una "A", moverlo a ALUMACTU; caso contrario se mueve el registro de ALUMNOS a ALUMACTU. Pero si coinciden (seguramente ya tendría el alta, por lo que solo analizás si lo modifica o lo vuela) y tiene una "M", subis el de NOVEDAD a ALUMACTU, si tiene una "B", seguis de largo y lees los próximos registros de los dos archivos.

Cualquier cosa seguí preguntando, en lo preliminar calculo que esto te puede ayudar.
Éxitos!

wake me up when september ends!
(Este mensaje fue modificado por última vez en: 13-02-2013 01:04 por rob..)
13-02-2013 01:04
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
oreo_dorada Sin conexión
Militante
Con estado :)
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 51
Agradecimientos dados: 33
Agradecimientos: 12 en 6 posts
Registro en: Mar 2012
Mensaje: #3
RE: [Algoritmos y Estructuras de Datos]Ayuda con ejercicio 29 de la guía de los 83 e
No lo entiendo muy bien, este es el código en Pascal:



while (leoAlumnos = 'si') and (leoNovedad = 'si') do
begin
if ra.nl = rn.nl then
begin
if rn.codigo = 'm' then
begin
raux.nl := rn.nl;
raux.nya := rn.nya;

write(archivoActualizado, raux)
end;

leerAlumnos(archivoAlumnos, ra, leoAlumnos);
leerNovedad(archivoNovedad, rn, leoNovedad);
end
else
begin
if rn.codigo = 'a' then
begin
raux.nl := rn.nl;
raux.nya := rn.nya;

write(archivoActualizado, raux)
end

else write(archivoActualizado, ra);

end;
end;



Lo resolví! No sé si es la forma más eficiente, pero creo que probé todos los casos posibles que se me ocurrieron y funcionó...
Ahí va el código:


leoAlumnos := 'si';
leoNovedad := 'si';
leerAlumnos(archivoAlumnos, ra, leoAlumnos);
leerNovedad(archivoNovedad, rn, leoNovedad);



while (leoAlumnos = 'si') and (leoNovedad = 'si') do
begin
writeln('entre');
if ra.nl = rn.nl then
begin
if rn.codigo = 'm' then
begin
raux.nl := rn.nl;
raux.nya := rn.nya;


write(archivoActualizado, raux)
end;

leerAlumnos(archivoAlumnos, ra, leoAlumnos);
leerNovedad(archivoNovedad, rn, leoNovedad);
end
else
begin
if rn.codigo = 'a' then
begin
if rn.nl > ra.nl then
begin
write(archivoActualizado, ra);
leerAlumnos(archivoAlumnos, ra, leoAlumnos)
end;

raux.nl := rn.nl;
raux.nya := rn.nya;

write(archivoActualizado, raux) ;
leerNovedad(archivoNovedad, rn, leoNovedad);

end

else
begin
write(archivoActualizado, ra);

leerAlumnos(archivoAlumnos, ra, leoAlumnos)
end;


end;
end;

writeln('leoAlumnos: ', leoAlumnos);
writeln('leoNovedad: ', leoNovedad);


while leoAlumnos = 'si' do
begin
write(archivoActualizado, ra);

leerAlumnos(archivoAlumnos, ra, leoAlumnos);
end;

while leoNovedad = 'si' do
begin
if rn.codigo = 'a' then
begin
raux.nl := rn.nl;
raux.nya := rn.nya;

write(archivoActualizado, raux)
end;
leerNovedad(archivoNovedad, rn, leoNovedad);
end;




El primer ciclo de repetición hace el apareo raro, y los otros dos agotan el archivo que todavía tenga registros (de estos últimos dos, sólo uno se ejecutará)
Saludos, y gracias rob. por darme la idea =)
(Este mensaje fue modificado por última vez en: 13-02-2013 02:35 por oreo_dorada.)
13-02-2013 01:41
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rob. Sin conexión
Presidente del CEIT
Smile!
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.145
Agradecimientos dados: 126
Agradecimientos: 83 en 66 posts
Registro en: Dec 2010
Mensaje: #4
RE: [Algoritmos y Estructuras de Datos]Ayuda con ejercicio 29 de la guía de los 83 e

Off-topic:
TIP: Salvo que algún profesor te haya pedido el código, hacelo en diagrama; es lo mismo y se toma como correcto. Además que te puede resultar más práctico de cara a efectuar todo rápido.


Ahí en el código separaste los que coinciden en legajo con el archivo ALUMNOS y NOVEDAD.
  • En el caso de que coincidan, hay que verificar si es una modificación (si no lo es, asumimos que es una baja): en el primer caso, se mueve lo de NOVEDAD al archivo actualizado y se leen nuevos registros de ALUMNOS y NOVEDAD; mientras que en el segundo caso (baja), como no hay nada que subir al actualizado directamente leemos los siguientes registros (pero no dejes al "else" sin nada!).
  • Y en el caso de que no coincidan, tiene que ser o un alta, o un alumno que no sufrió modificaciones. Ahí va otro IF verificando cual de los dos iría primero (o sea, RA.NL < RN.NL) y vamos cargando tranquilos en el actualizado, finalmente leemos nuevo registro de ALUMNOS solamente; pero si no es así es porque el RN.CODIGO es una alta, entonces cargamos el registro de NOVEDAD en el actualizado y luego leemos el siguiente registro de NOVEDAD.


¿Me explico? lo venías haciendo bien, pero te morfaste algunos grandes detalles =P


ADD: Luego de ese while, tenés que hacer otros dos más, uno para ALUMNOS y otro abajo aparte para NOVEDAD en donde vas cargando directamente en el actualizado, porque es seguro que los archivos no van a terminar simultáneamente. O sea,

while (leoAlumnos = 'si') do
...
while (leoNovedad = 'si') do
...

wake me up when september ends!
(Este mensaje fue modificado por última vez en: 13-02-2013 02:42 por rob..)
13-02-2013 02:35
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
oreo_dorada Sin conexión
Militante
Con estado :)
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 51
Agradecimientos dados: 33
Agradecimientos: 12 en 6 posts
Registro en: Mar 2012
Mensaje: #5
RE: [Algoritmos y Estructuras de Datos]Ayuda con ejercicio 29 de la guía de los 83 e
Dejé al else sin nada porque si coinciden, o es una baja o es una modificación, entonces si es una modificación actualizamos, pero si es una baja no hacemos nada, y como en los dos casos hay que leer de ambos archivos, puse las instrucciones de lectura directamente, sin la clausula else.
13-02-2013 02:45
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rob. Sin conexión
Presidente del CEIT
Smile!
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.145
Agradecimientos dados: 126
Agradecimientos: 83 en 66 posts
Registro en: Dec 2010
Mensaje: #6
RE: [Algoritmos y Estructuras de Datos]Ayuda con ejercicio 29 de la guía de los 83 e
(13-02-2013 02:45)oreo_dorada escribió:  Dejé al else sin nada porque si coinciden, o es una baja o es una modificación, entonces si es una modificación actualizamos, pero si es una baja no hacemos nada, y como en los dos casos hay que leer de ambos archivos, puse las instrucciones de lectura directamente, sin la clausula else.

Claro, lo que te comentaba era para el primer código, que era justamente lo que me decís vos ahora.

El segundo está correcto; y la eficiencia no creo que sea lo ideal empezar a verlo a esta altura (es en particular con los casos de memoria estática y dinámica, que lo ves después en arrays y estructuras enlazadas). Lo importante, si vas con archivos, es fundamentalmente entender, porque luego es fundamental para trabajar con lo que sigue.


Saludos! =D

wake me up when september ends!
(Este mensaje fue modificado por última vez en: 13-02-2013 15:33 por rob..)
13-02-2013 15:33
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)