Calcular media por curso en un archivo secuencial

Mi consulta se basa en que tengo que hacer un algoritmo que procese los registros de un archivo secuencial de un colegio para obtener:
Nota más alta y numero identificación del alumno
Nota media por curso
Nota media del colegio
Mi desarrollo lega hasta:
Algoritmo Colegio
Tipo
Registro: Colegio
real : nro_id
Cadena: nombre
Real : nota
Cadena: curso
Fin registro
Archivo_s de Colegio : arch
var
Arch: f
Colegio: alumno
real: nota_alta
real: media_curso
Real: id
Entero: a
Inicio
Abrir(f, l,'Colegio'
Leer(f, alumno)
Mientras no EOF (f) hacer
Si nota > nota_alta entonces
nota_alta = nota
id = nro_id
fin si
media_curso = media_curso + nota
a = a + 1
Pero no se como hacer para poder calcular la media por curso, ya que no se como interpretar cuando ha terminado de leer las notas de un curso y comenzó con otro.
¿O tengo que colocar un si es igual a un determinado curso antes de evaluar la nota?
Alguien me puede echar una mano.

1 Respuesta

Respuesta
1
Esta interesante tu problema, ya que la media no es otra cosa más que el promedio. Pero para poder ayudarte, necesito unas 5 lineas de tu archivo secuencial para entender como es que vamos a sacar la media por curso.
Hola gracias por contestar, este es un problema de fundamento de la programación, don de yo he hecho:
Algoritmo Colegio
Tipo
Registro: Colegio //declaro archivo Colegio
real : nro_id
cadena: nombre
real : nota
cadena: curso
Fin registro
archivo_s de Colegio : arch
var //declaro variables
arch: f
colegio: alumno
real: nota_alta
real: media_curso
real: id
entero: a
inicio
abrir(f,l,'Colegio') //abro el archivo
leer(f,alumno) // leo registro
mientras no EOF (f) hacer
si nota > nota_alta entonces
nota_alta = nota
id = nro_id
fin si
media_curso = media_curso + nota
a = a + 1
Entonces recorro el registro y voy guardando las notas, pero no se como hacer para determinar que ha terminado con un curso y comenzado con otro. Por eso no entiendo que líneas necesitas si mi algoritmo hasta el momento es el que he expuesto, no tengo nada más. Nuevamente gracias por tu respuesta, saludos!
Disculpa, yo entendí otra cosa diferente o tal vez me confundí con otra pregunta similar je je.
Se a donde quieres llegar, te has olvidado de algo fundamental. El FOR (recorrido del archivo) cuando registras, registras lineas, cierto, simplificate la vida e ingresa en una sola linea cada registro en vez de ingresar en varias lineas un solo registro no se si me entiendes.
Por si no me entiendes es mejor tener una sola linea para tu registro de tu nota, a tener 4 o 5 lineas para tu registro de tu nota. Entonces si cada registro se guarda en una linea y tienes 20 alumnos registrados tendrías 20 lineas en tu archivo en vez de tener 80.
Ahora, te voy a decir algo bien interesante, tu debes saber de alguna manera los nombres de todos los cursos antes de abrir el archivo, entonces, mientras vas haciendo los registros, vas guardando los nombres de los cursos (si se repite el nombre lo descaras) en una lista, y esa lista la guardas en otro archivo junto a tu archivo primero, de tal manera que para empezar a leer tu archivo de tus 20 regstros primero guardas en una lista los archivos de tus cursos para luego comprar la si el curso que estas leyendo de tu registro esta contenido en esa lista y para guardar la nota tendrías que tener una lista por curso donde almacenar las notas para luego tener, si tienes 20 cursos, tienes 20 listas con las notas de ese cada curso, de esa manera trabajas con cada lista y tienes el promedio de la lista y la nota más alta, estas listas van a estar guardadas en otra lista, o sea tendrás una lista de listas.
En pseudocodigo, el algoritmo de lo que te he dicho seria así.
Inicio
Crear archivo COLEGIO
Variables: nro_id, nombre, nota, curso, lista_cursos.
Si curso no esta dentro de lista_cursos >>>> añadir curso en lista cursos.
Escribir línea(nro_id – nota – curso)//esta vendría a ser una línea en el archivo.
Crear archivo CURSOS.
Por cada elemento lista_cursos {
Escribir línea (elemento lista_cursos)
}
Fin
///////////
Inicio
Variable: lista_cursos
Abrir archivo CURSOS.
Crear lista(nombre_curso)
Desde la primera línea { //con esto recorro todas las líneas del archivo.
Var curso;
curso =Leer línea().
Guardar curso en lista_curso.
Aumentar línea. //subir el índice a leer.
}
Var LISTA_GENERAL.
Para cada elemento de lista_curso {//recorro la lista y creo nuevas listas por curso
Var elemento =Leer elemento;
Crear lista_elemento. //aquí creo la lista por curso
Guardar lista_elemento en LISTA_GENERAL
Aumentar elemento. //subir el índice a leer
}
Abrir archivo COLEGIO.
Desde la primera línea {//con esto recorro todas las líneas del archivo
Var cadena= Leer línea()
Var curso=obtener_curso(cadena)// saco el curso de la linea
Var nota=obtener nota(cadena)//saco la nota de la línea.
Guardar_nota(curso,nota)//me guarda la nota del curso en su correspondiente lista.
Aumentar línea
}
//Aquí tendrás 20 listas (1 lista por curso) guardadas en una lsta principal y llenas cada una con notas de su correspondiente curso. Solo queda recorrer cada lista y sacar la nota más alta y la media.
Var cont=0
Var suma=0
Var nota_alta.
Por cada elemento de LISTA_GENERAL { //para cada una de las listas de cursos
Por cada elemento de la lista_elemento { //para cada elemento de la lista.
Cont=cont+1
Var elemento=elemento(lista_elemento)//vendría a ser una nota.
si nota > nota_alta entonces
nota_alta = nota
suma=suma+nota.
} //una vez que recorrio la primera lista muestro los resultados de la misma.
Mostrar: "Para el curso: "+nombre_curso(lista_elemento) +
"La nota mas alta es: "+nota_alta +
"La media es: "+(suma/cont); cont=0,suma=0,nota_alta=0 //volver a 0 par el siguiente curso.
}
Leelo tranquila, se que parece una marcianada, pero es la forma correcta de que sepas lo que hace, si no lo puedes abstraer, usa un papel y un lápiz y sigue el algoritmo, te darás cuenta que es sencillo, y así es como se debe hacer.
Espero haberte ayudado. Cualquier inquietud no dudes en hacérmelo saber.
Hola, antes que nada te agradezco mucho el tiempo que me brindas al ayudarme en este tema de ficheros, mi consulta se basa en lo siguiente:
Estoy tratando de estructurar el pseudocódigo que has realizado de la manera que me lo exige la referencia que me han dado, con esto me refiero a:
Algoritmo Colegio
Tipo
Registro: Colegio
entero: nro_id
Cadena: nombre
Real: nota
array [1...M] de cadena: lista_curso
Fin registro
archivo_s de Colegio: arch
var
arch: f
Colegio: persona
Entero : i
Y tendría que colocar como registro del archivo lista_cursos, ¿lo declaro como array? Cadena [1..M] de lista_curso
¿Tengo qué declarar un archivo cursos e introducirle como registro nombre_curso y nota y lo declaro como secuencial s?
Disculpa que te pregunte todo esto pero resulta que se me ha complicado traspasar el pseudocodigo a la estructura con la que he resuelto todos estos algoritmos que se refieren a archivos.
Si no me he hecho entender, dímelo y te envío un ejemplo de un ejercicio que me han pedido y resuelto con la estructura que me han prefijado.
Disculpa lo molestosa y te doy nuevamente las gracias ya que más ayudado y brindado tiempo valioso, que te encuentres bien saludos!
Me he tomado mucho tiempo para crear un pseudocodigo que sea bien bonito y fácil de entender, me apena un poco que no lo hagas.
Yo particularmente no entiendo nada la estructura prefijada que te han dado, no le veo ninguna secuencia de resolución, a mi parecer, para ser fundamentos de programación están yendo por el camino equivocado.
Yo trabaje con listas, como no has especificado si lo programaras en algún lenguaje, lo hice en listas porque las listas son muy fáciles de trabajar en java, pero como tu lo estas pasando a vectores, es lo mismo.
Lista cursos vendría a ser un archivo secuencial, para mejor captura de datos al recorrido de sus lineas, cada linea es un curso, y el array de cadenas que debes crear para capturar esos cursos va a llenarse en cada intentar con un curso al recorrer las lineas del archivo de lista cursos.
A ver como te va ahora, en general por si no me has entendido esta bien tu array de strings y el archivo vendría a ser de tipo secuencial.
Cualquier cosita me preguntas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas