UTNianos

Versión completa: [Algoritmos y Estructuras de datos][Pedido] Dudas sobre corte de control
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Estaba haciendo el ejercicio 19 del modulo 2 y me surgio una duda, el ejercicio es el siguiente:

Ej. MII-19: Dado el archivo ‘ALUMNOS.dat’ con los datos personales de alumnos ordenado por legajo, con el siguiente diseño:
a.1 Legajo (8 dígitos) a.2 Apellido y nombre ( 30 caracteres)
a.3 Domicilio (20 caracteres) a.4 Código postal (4 dígitos)
a.5 Teléfono (10 caracteres) a.6 Año de ingreso (4 dígitos)
Y otro archivo con el mismo orden que el mencionado llamado ‘NOVEDADES.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).
Se pide desarrollar todos los pasos necesarios para realizar un programa que genere un archivo actualizado ‘ALUMACTU.dat’ con el mismo diseño.

A mi lo que se me ocurrio fue utilizar corte de control pero no logro darme cuenta como hacer para que el archivo 'ALUMCTU.dat' quede ordenado. Lo unico que se me ocurrio fue como saber q datos poner:

Luego de las lecturas anticipadas para ver si es fin de archivo y dentro del ciclo while con la condicion de que no sea fin de archivo se me ocurrio lo siguiente:
si esta en el archivo Novedad y tmb en alumnos:

el campo "código de operación" solo puede ser 'M' o 'B'

entonces hago un ciclo while mientras no sea fin de archivo y los campos legajo de ambos registros sean iguales, por ultimo con un if pregunto si el campo "código de operación" es 'M'
si se cumple : a cada campo del registro actualizado le asigno los del registro novedad
si no se cumple : pregunto con otro if si código de operacion<> 'B' si es asi, a los campos del registro actualizado le asigno los del registro alumnos.

Ahora, si esta en novedad y no esta en alumnos entonces el campo código de operación figura una 'A' {fuera del ciclo while que hice antes con la condicion de que el campo legajo de ambos registros sean iguales}

Para esto hago un ciclo if operación='A'
si se cumple: al registro actualizado le pongo los datos del registro novedad
si no se cumple: al registro actualizado le pongo los datos del registro alumnos

Espero que se entienda algo de todo lo que escribi =P y si alguien me puede decir como hacer para que el archivo actualizado quede ordenado por numero de legajo se agradece =D
no creo que necesites corte de control, porque tenes todos los datos en un solo registro y cada registro contiene a un alumno distinto, deberias hacer una especie de apareo
suponiendo orden creciente
recorres ambos archivos (mientras no se vacie ninguno) y lees y preguntas por legajo, si son iguales, esa baja o modificacion (agregas o no al actualizado) si el legajo de novedades es menor que el de alumnos, es un alta (comprobar con el campo operacion) y lo agregas al actualizado, y si es mayor, agregas el registro sin modificar de alumnos, al actualizado.
tener en cuenta cual registro usas para saber de que archivo leer nuevamente
luego volcas lo que te quede en los archivos al actualizado (puede que se termine un archivo antes que el otro, tenes que seguir recorriendolos hasta el fin)
no entendi por que si el legajo de novedades es menor que el de alumnos, es un alta, me podrias explicar?
porque ambos estan ordenados por legajo, y alumnos tiene TODOS los alumnos existentes, si alumnos, supongamos que viene asi
legajo
1000
1003
1008

y novedades

legajo
1000
1001
1005
1010

los primeros son iguales, entonces es baja o modificacion, pero los segundos son distintos (1003 > 1001), y novedades es menor, como estan ordenados de menor a mayor, es un dato nuevo, que no existe en alumnos, por lo que debe ser un alta y debo agregarlo al actualizado
avanzo en novedades y tengo
1003 < 1005
o sea que 1003 no esta en novedades, por lo que no se modifica, ni se borra, agrego el 1003 al actualizado y avanza
y ocurre lo mismo con 1008 > 1005 es un alta!
Ah listo ahora entendi, gracias =D
URLs de referencia