oi.. precisava da ajuda de alguem neste programa PASCAL. é um trabalho para a escola que estou a desenvolver mas ta mau

. ele nao funciona

se alguem me ajudar agradeço.. toda a ajuda é bem vinda.. tambem estou aberto a sugestoes.. valeu.
unit Alunos1;
interface
uses crt;
type disciplina=record
mat:string[15];
port:string[15];
ing:string[15];
fq:string[15];
psi:string[15];
ac:string[15];
ai:string[15];
rc:string[15];
tic:string[15];
ef:string[15];end;
type aluno=record
num:integer;
nome:string[20];
d:disciplina;end;
type alunos=array[1..30] of aluno;
function menu:byte;
function inserir(var alu:alunos;n:integer):integer;
procedure modificar(var alu:alunos;n:byte);
procedure eliminar(var alu:alunos);
function media_curso(var alu:alunos;n:byte):real;
function media_aluno(var alu:alunos):real;
procedure mostrar_todos(alu:alunos;n:byte);
function media_maluno(var alu:alunos;n:byte):real;
procedure mostrar_msup(var alu:alunos;n:byte);
procedure mostrar_minf(var alu:alunos;n:byte);
implementation
function menu:byte;
var op:integer;
begin
clrscr;
writeln('---MENU---');
writeln('1->Mntroduzir Aluno');
writeln('2->Modificar Notas');
writeln('3->Eliminar Aluno');
writeln('4->Calcular media do curso');
writeln('5->Calcular media de um Aluno');
writeln('6->Mostrar todos os Alunos');
writeln('7->Mostrar o melhor Aluno');
writeln('8->Mostrar os Alunos com uma media superior a um valor introduzido pelo utilizador');
writeln('9->Mostrar os Alunos com uma media inferior a um valor introduzido pelo utilizador');
writeln('10->opcoes');
writeln('11->sair');readln(op);
if op<=11 then begin
menu:=op end else begin
writeln('Valor invalido, Escolha uma opcao entre 1 e 11');end;
end;
function inserir(var alu:alunos;n:integer):integer;
{inserir um novo aluno e as respectivas notas}
var qa,i:integer;
begin
clrscr;
write('quantos Alunos deseja inserir?');readln(qa);
for i:=1 to qa do begin
writeln('insira os dados do Aluno');
with alunos[n+i] do begin
num:=n+i;
write('nome');readln(nome);
writeln('insira a nota para a disciplina de..');
writeln('matematica');readln(d.mat);
writeln('portugues');readln(d.port);
writeln('ingles');readln(d.ing);
writeln('Fisico Quimica');readln(d.fq);
writeln('PSI');readln(d.psi);
writeln('Arquitectura de Computadores');readln(d.ac);
writeln('Area deIntegracao');readln(d.ai);
writeln('Redes de Computadores');readln(d.rc);
writeln('TIC');readln(d.tic);
writeln('Educacao Fisica');readln(d.ef);end;end;
inserir:=n+qa;
end;
procedure modificar(var alu:alunos;n:byte);
{alterar a nota de um aluno}
var nu:integer;yn:string;
begin
writeln('Modificacao das Notas');
writeln('Numero do Aluno?');readln(nu);
writeln('Tem a certeza que pretende eliminar este Aluno?(n.',num,')');
writeln('(y/n)');readln(yn);upcase(yn);
if yn:='Y' then begin
if nu<n then begin
writeln('Aluno nao Existente');end else
writeln(alunos[nu].nome);
writeln(alunos[nu].d);
writeln('insira a nota para a disciplina de..');
writeln('matematica');readln(d.mat);
writeln('portugues');readln(d.port);
writeln('ingles');readln(d.ing);
writeln('Fisico Quimica');readln(d.fq);
writeln('PSI');readln(d.psi);
writeln('Arquitectura de Computadores');readln(d.ac);
writeln('Area deIntegracao');readln(d.ai);
writeln('Redes de Computadores');readln(d.rc);
writeln('TIC');readln(d.tic);
writeln('Educacao Fisica');readln(d.ef);end else
Writeln(' Volte sempre');
end;
procedure eliminar(var alu:alunos);
{eliminar um aluno}
var nu:integer;yn:string;
begin
writeln('---Eliminar Aluno---');
writeln('Numero do Aluno a eliminar?');readln(nu);
writeln('Tem a certeza que deseja eliminar este Aluno?');
writeln('(y/n)');readln(yn);upcase(yn);
if yn='Y' then begin
alunos[nu].nome:='ELIMINADO';
with alunos[nu] do begin
{quando eliminado, as notas ficam a 0}
d.mat:=0;
d.port:=0;
d.ing:=0;
d.psi:=0;
d.ac:=0;
d.ai:=0;
d.rc:=0;
d.tic:=0;
d.ef:=0;end;end else
writeln('Fica para a proxima');end;
end;
function media_curso(var alu:alunos;n:byte):real;
{media do curso}
var cont:integer;
md,md1:real;
begin
cont:=0;
writeln('media do curso');;
for i:=1 to n do begin
if aluno[i].d <>0 then begin
{nao quero calcular os alunos eliminados, isto é, com notas de 0}
with aluno[i] do begin
with d do begin
md:=(mat+port+ing+fq+psi+ac+ai+rc+tic+ef)/10;
cont:=cont+1
md1:=md1+md;end;end;end;
md1:=md1/cont;
writeln('Media do curso e de: ',md1);
media_curso:=md1;end;
function media_aluno(var alu:alunos):real;
{calcular a media de um aluno escolhido pelo utilizador}
var md:real; nu:integer;
begin
writeln('media de um aluno');
writeln('insira o numero do aluno');readln(nu);
with aluno[nu] do begin
with d do begin
md:=(mat+port+ing+fq+psi+ac+ai+rc+tic+ef)/10;
writeln('A media do aluno e: ',md);end;
media_aluno:=md;end;
procedure mostrar_todos(alu:alunos;n:byte);
{listar todos os alunos}
var i:integer;
begin
wrriteln('Lista de todos os alunos');
for i:=1 to n do begin
with vect[i] do begin
writeln(num);
writeln(nome);
writeln('disciplinas');
with d do begin
writeln('Matematica ',mat);
writeln('Portugues ',port);
writeln('Ingles ',ing);
writeln('Fisico Quimica ',fq);
writeln('PSI ',psi);
writeln('Arquitectura de Computadores ',ac);
writeln('Area de Integracao ',ai);
writeln('Redes de Computadores ',rc);
writeln('TIC ',tic);
writeln('Educacao Fisica ',ef);
writeln;end;end;end;end;
function media_maluno(var alu:alunos;n:byte):real;
{media do melhor aluno}
var md,md1:real;
i:integer;
begin
writeln('Media do melhor Aluno');
md1:=0;
for i:=1 to n do begin
if aluno[i].d <>0 then begin
{nao quero calcular os alunos eliminados, isto é, com notas de 0}
with aluno[i] do begin
with d do begin
md:=(mat+port+ing+fq+psi+ac+ai+rc+tic+ef)/10;
if md<md1>mu do begin
with aluno[i] do begin
writeln(num);
writeln(nome);
writeln('disciplinas');
with d do begin
writeln('Matematica ',mat);
writeln('Portugues ',port);
writeln('Ingles ',ing);
writeln('Fisico Quimica ',fq);
writeln('PSI ',psi);
writeln('Arquitectura de Computadores ',ac);
writeln('Area de Integracao ',ai);
writeln('Redes de Computadores ',rc);
writeln('TIC ',tic);
writeln('Educacao Fisica ',ef);
writeln('media:',md);
writeln;end;end;end;end;end;end;
procedure mostrar_minf(var alu:alunos;n:byte);
{apresentar todos os alunos com uma media inferior a um valor introduzido pelo utilizador}
var i:integer;
md,mu:real;
begin
writeln('insira a media a compara');readln(mu);
writeln('Lista dos alunos com uma media superior a: ',mu);
for i:=1 to n do begin
with aluno[i] do begin
with d do begin
md:=(mat+port+ing+fq+psi+ac+ai+rc+tic+ef)/10;
if md<mu do begin
with aluno[i] do begin
writeln(num);
writeln(nome);
writeln('disciplinas');
with d do begin
writeln('Matematica ',mat);
writeln('Portugues ',port);
writeln('Ingles ',ing);
writeln('Fisico Quimica ',fq);
writeln('PSI ',psi);
writeln('Arquitectura de Computadores ',ac);
writeln('Area de Integracao ',ai);
writeln('Redes de Computadores ',rc);
writeln('TIC ',tic);
writeln('Educacao Fisica ',ef);
writeln('media:',md);
writeln;end;end;end;end;end;end;