buenas,
lo primero que las declaraciones de los arrays deberían estar fuera del bucle porque de lo contrario en cada ciclo se declara un nuevo array.
segundo, la referencia al formulario esta mal porque
form no es una propiedad declarada de
document. tengo duda de si tienes varios formularios o si es uno solo. si es uno solo, entonces no tiene sentido considerar la propiedad como un array indicando un índice variable. específicamente me refiero a esto
form[a]. para obtener la referencia de un formulario hay múltiples formas como por ID o por la colección
forms -nótese el plural-, entre otras. si vas a usar la colección
forms, puedes indicar el nombre del formulario o el índice en caso de ser múltiples formularios.
Código:
document.forms['nombre'];
// referencia a un formulario en particular
document.forms[index];
// referencia a varios formularios, asumiendo que la variable index es un número que cambia en ciclo
tercero, la referencia al select Materia esta mal compuesta. lo que tu intentas hacer es componer el nombre del select con un número, pero en el código actual tiene un significado totalmente distinto. cuando quieras componer dinámicamente el nombre de una propiedad, debes cambiar la sintaxis de punto por corchetes y dentro de este componer un string.
Código:
object["property" + variable];
// aqui se concatena el string "property" con el valor de variable
// asumiendo que el valor es 0, el resultado es object["property0"] o lo mismo que object.property0
object.property[variable];
// notese que esto es totalmente distinto. aqui se considera la propiedad property como un posible objeto o array
// seria lo mismo que object.property.variable, en caso de ser un objeto
y cuarto, no hace falta obtener el índice del Option seleccionado para luego obtener su valor. simplemente puedes tomar el valor del select direcamente accesando la propiedad
value del select.