UTNianos

Versión completa: [Algoritmos] Problema con examen final ( 23 sep 2011 )
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
buenas, no se si alguien ah visto el final del 23 - 09 -11, me lo ah dado en mi cursada como practica de arrays antes del parcialito con la prof San Roman.

me eh trabado en una parte y me gustaria saber si alguien me ayudaria a poder continuar ya que quiero terminarlo por mi cuenta asi pregunto el miercoles si esta bien echo o en que me eh equibocado ( para prepararme para los parciales y finales )

Bueno mi problema: tengo un archivo con legajo, nombre, nota, especialidad, fecha, etc etc, ordenado por legajo. me pide mostrar los 2 mayores promedios por especialidad. armo un sistema para acumular las notas y las cantidades de materias dadas, si es mayor igual a 20 ( requisito) debo compararlos con otros alumnos que tengan los mismos requisitos, ahora me queda algo asi por ejemplo ( como ejemplo de prueva de escritorio )

[Imagen: promedio.png]

mi gran interrogatorio es como llevar a esos datos que voy acumulando a un array si en la teoria me dice que deben ser del mismo tipo ( byte, strig, etc ) estoy segurisimo que es un error conceptual que tengo, y como restriccion debe ser en array si no, hubiese guardado todo en un archivo pero me dan 0 byts de espacio fisico.

no se si me eh expresado bien, si alguien me entiende, me gustaria una pequeña mano para poder seguir.

Muchas gracias
Un array puede contener datos de distinto tipo si armas un array de registros, es decir, vas a tener un array [1..n] en el cual cada elemento va a tener una Especialidad, un N° de legajo y un promedio.

Si no se entiende, preguntá y lo explico mejor jaja.

pd: Yo rendi ese final =)
Claro como dijo sentey, el mismo tipo, registro.
Y el registro tiene lo que vos necesitas, yo rendi tmb ese final, cualquier cosa chifla


type
alumno = record
nombre: string[20];
legajo: longint;
promedio: real;
{todos los demas campos}
end;

vecAlumnos = array[1..n] of alumno {n = cantidad de alumnos}



fundamental, saber la cantidad de alumnos de antemano. sino no podes armar el array.

si sabes de antemano la cantidad, entonces tenes que hacer como te dijeron, un array de registros
(17-10-2011 22:29)el pibe escribió: [ -> ]fundamental, saber la cantidad de alumnos de antemano. sino no podes armar el array.

si sabes de antemano la cantidad, entonces tenes que hacer como te dijeron, un array de registros

Yo lo dí el final, y mucho no me acuerdo asique capaz que la estoy flashando, pero me parece que no te daban la cantidad de alumnos, porque la resolución venía mas o menos así

Spoiler: Mostrar
Era un archivo de registros, en donde cada registro tenía los datos de un final de una determinada materia de un determinado alumno. Entonces te daban un espacio cortito para la memoria estática, porque la idea era que recorrieras el archivo con corte de control por legajo (estaba ordenado por nº de legajo) y cuando cambiaba el legajo calculabas el promedio, y lo comparabas con los promedios que ya habías puesto en la matriz. Si era mayor, los sobreescribías y seguías recorriendo el archivo.
(17-10-2011 23:28)H3rnst escribió: [ -> ]
(17-10-2011 22:29)el pibe escribió: [ -> ]fundamental, saber la cantidad de alumnos de antemano. sino no podes armar el array.

si sabes de antemano la cantidad, entonces tenes que hacer como te dijeron, un array de registros

Yo lo dí el final, y mucho no me acuerdo asique capaz que la estoy flashando, pero me parece que no te daban la cantidad de alumnos, porque la resolución venía mas o menos así

Spoiler: Mostrar
Era un archivo de registros, en donde cada registro tenía los datos de un final de una determinada materia de un determinado alumno. Entonces te daban un espacio cortito para la memoria estática, porque la idea era que recorrieras el archivo con corte de control por legajo (estaba ordenado por nº de legajo) y cuando cambiaba el legajo calculabas el promedio, y lo comparabas con los promedios que ya habías puesto en la matriz. Si era mayor, los sobreescribías y seguías recorriendo el archivo.

exacto, el unico problema ahora es que no sabes la cantidad de alumnos que hay hasta haber terminado de recorrer todo el archivo, mi idea se basa en armar un array acuulativo ( no se si se puede ) que se vallan guardando todos los alumnos aprovados, para luego al final comparar y mostrar los 2 mejores promedios
En realidad lo que tendrías que hacer es un registro del siguiente tipo:


TRegVec=Record
especialidad:char;
priProm,segProm:Single;
priLeg,segLeg:LongInte;
end;
vecAlum = array[1..110] of TRegVec



Luego creas un array de tipo tregvec con 10 posiciones ,1 posicion para cada especialidad. Y los promedios y alumnos los sacas en el proceso, del archivo.
se entendio?.
Massi pero como te dijo "el pibe" por mas que quieras armar un array e irle poniendo todos y dps seleccionar, necesitas si o si un numero estimado de cantidad de registros, es una estructura "estatica" necesitas si o si saber cuantos.
Tampoco podes usar la cantidad de registros del archivo para usarlo como "cantidad" del vector eh seccion type esta antes que var
El vector no tiene que ser de alumnos, sino un vector que tenga dos entradas por especialidad para poner ahí los máximos, supongo que las especialidades son las de la facu o te las dan, así las contás y ya tenés el tamaño. El archivo lo tenés ordenado por número de legajo, así que tenes todas las notas de un alumno seguidas, hacés un corte de control para calcularle el promedio y si es mayor a lo que tenés guardado en su especialidad actualizás el vector, sino te olvidás de ese alumno.
(18-10-2011 19:16)Anirus escribió: [ -> ]El vector no tiene que ser de alumnos, sino un vector que tenga dos entradas por especialidad para poner ahí los máximos, supongo que las especialidades son las de la facu o te las dan, así las contás y ya tenés el tamaño. El archivo lo tenés ordenado por número de legajo, así que tenes todas las notas de un alumno seguidas, hacés un corte de control para calcularle el promedio y si es mayor a lo que tenés guardado en su especialidad actualizás el vector, sino te olvidás de ese alumno.

Claaaro, creo que la forma en que tenías que mostrar los resultados era:
Especialidad1 - Legajo1 - Promedio1 - Legajo2 - Promedio 2
Especialidad2 - Legajo1 - Promedio1 - Legajo2 - Promedio 2
Especialidad3 - Legajo1 - Promedio1 - Legajo2 - Promedio 2
...
Especialidad10 - Legajo1 - Promedio1 - Legajo2 - Promedio 2

No hace falta saber la cantidad de alumnos, porque el archivo está ordenado por número de legajo. Entonces recorrés con corte de control por legajo, te fijás a que especialidad corresponde (con ese dato te ubicás en la fila correspondiente en el array) y ahí comparas si el promedio que te dieron los registros que acabas de leer es mayor, menor o igual que lo que tenés en el array. Si es mayor, entonces lo reemplazás y si es menor no hacés nada, y seguís con el algoritmo leyendo el próximo legajo.

No hace falta comparar una matriz con otra ni nada de lo que leí más arriba. La comparación la hacés cada vez que terminás con un legajo.
(18-10-2011 23:44)H3rnst escribió: [ -> ]
(18-10-2011 19:16)Anirus escribió: [ -> ]El vector no tiene que ser de alumnos, sino un vector que tenga dos entradas por especialidad para poner ahí los máximos, supongo que las especialidades son las de la facu o te las dan, así las contás y ya tenés el tamaño. El archivo lo tenés ordenado por número de legajo, así que tenes todas las notas de un alumno seguidas, hacés un corte de control para calcularle el promedio y si es mayor a lo que tenés guardado en su especialidad actualizás el vector, sino te olvidás de ese alumno.

Claaaro, creo que la forma en que tenías que mostrar los resultados era:
Especialidad1 - Legajo1 - Promedio1 - Legajo2 - Promedio 2
Especialidad2 - Legajo1 - Promedio1 - Legajo2 - Promedio 2
Especialidad3 - Legajo1 - Promedio1 - Legajo2 - Promedio 2
...
Especialidad10 - Legajo1 - Promedio1 - Legajo2 - Promedio 2

No hace falta saber la cantidad de alumnos, porque el archivo está ordenado por número de legajo. Entonces recorrés con corte de control por legajo, te fijás a que especialidad corresponde (con ese dato te ubicás en la fila correspondiente en el array) y ahí comparas si el promedio que te dieron los registros que acabas de leer es mayor, menor o igual que lo que tenés en el array. Si es mayor, entonces lo reemplazás y si es menor no hacés nada, y seguís con el algoritmo leyendo el próximo legajo.

No hace falta comparar una matriz con otra ni nada de lo que leí más arriba. La comparación la hacés cada vez que terminás con un legajo.

Exacto, yo lo hice así y me saqué 7, supongo que los errores fueros pequeños o no era tan eficiente como podía ser...
(18-10-2011 23:44)H3rnst escribió: [ -> ]
(18-10-2011 19:16)Anirus escribió: [ -> ]El vector no tiene que ser de alumnos, sino un vector que tenga dos entradas por especialidad para poner ahí los máximos, supongo que las especialidades son las de la facu o te las dan, así las contás y ya tenés el tamaño. El archivo lo tenés ordenado por número de legajo, así que tenes todas las notas de un alumno seguidas, hacés un corte de control para calcularle el promedio y si es mayor a lo que tenés guardado en su especialidad actualizás el vector, sino te olvidás de ese alumno.

Claaaro, creo que la forma en que tenías que mostrar los resultados era:
Especialidad1 - Legajo1 - Promedio1 - Legajo2 - Promedio 2
Especialidad2 - Legajo1 - Promedio1 - Legajo2 - Promedio 2
Especialidad3 - Legajo1 - Promedio1 - Legajo2 - Promedio 2
...
Especialidad10 - Legajo1 - Promedio1 - Legajo2 - Promedio 2

No hace falta saber la cantidad de alumnos, porque el archivo está ordenado por número de legajo. Entonces recorrés con corte de control por legajo, te fijás a que especialidad corresponde (con ese dato te ubicás en la fila correspondiente en el array) y ahí comparas si el promedio que te dieron los registros que acabas de leer es mayor, menor o igual que lo que tenés en el array. Si es mayor, entonces lo reemplazás y si es menor no hacés nada, y seguís con el algoritmo leyendo el próximo legajo.

No hace falta comparar una matriz con otra ni nada de lo que leí más arriba. La comparación la hacés cada vez que terminás con un legajo.

Off-topic:
Perdón, no había visto tu spoiler =P
URLs de referencia