Program Pzim;
 
     Uses crt;
 
const tam=30;
 
type cad = record
nome: string;
mat: integer;
n1,n2,media: real;
end;
 
var
aluno: array [1..tam] of cad;
i,X:integer;
op: real;
 
procedure Enter;
   begin
writeln; writeln;
write('Pressione [ENTER] Para Voltar Pro Menu.');
readln;
   end;
 
procedure cadastro;
var i: integer;
begin
i:=0;
op:=1;
while (i <= tam) and (op=1) do
begin
 
   i:= i + 1;
 
write('Nome: ');
readln(aluno.nome);
 
write('Matricula: ');
readln(aluno.mat);
 
write('Nota 1: ');
readln(aluno.n1);
 
write('Nota 2: ');
readln(aluno.n2);
 
aluno.media:= (aluno.n1 + aluno.n2)/2;
write('Deseja cadastrar outro aluno? Aperte 1 para sim');
 
readln(op);
 
  end;
  Enter;
  end;
 
  procedure troca(p1,p2:integer);
  var aux:cad;
begin
          aux := aluno[p1];
              aluno[p1] := aluno[p2];
                aluno[p2] := aux;
  end;
 
    procedure ordenar;
   var i, j: integer; aux: real;
   begin
 
   for i:= 1 to tam-1 do
       for j:= 1 to tam-i do
         if ( aluno[j].mat > aluno[j+1].mat ) then
     troca(j,j+1);
 
   end;
 
   procedure ObtemX;
   begin
     clrscr;
writeln('Informe o numero a ser pesquisado.');
write('X : ');
readln(X);
   end;
 
procedure sequencial;
     var encontrou:boolean;
begin
 
    ObtemX;
encontrou:= false;
i:=1;
while (i<=tam) and (not(encontrou)) do
begin
  if (aluno.mat = X) then
  begin
  encontrou:= true;
  end
  else
  i:= i+1;
  end;
  if (encontrou = true) then
  begin
  writeln('O elemento ',X,'foi encontrado na posição',i);
  end
  else
     writeln('O elemento ',X,'não foi encontrado na lista.');
    Enter;
end;
 
procedure binaria;
   var Meio, Inicio, Fim: integer;
                  Achou: boolean;
   begin
     ordenar;
     ObtemX;
     Achou := false; Inicio := 1; Fim := tam;
     while (Inicio <= Fim) and (not(Achou)) do
     begin
       Meio := (Inicio + Fim) div 2;
       if aluno[Meio].mat = X then
Achou := true
       else
if aluno[Meio].mat > X then
Fim := Meio - 1
            else
Inicio := Meio + 1;
     end;
     writeln;
     if Achou then
   writeln('Este elemento existe no conjunto na posicao ', Meio)
     else
   writeln('Este elemento não existe no conjunto !');
Enter;
   end;  
 
procedure busca;
    var op2:integer;
    begin
    clrscr;
    writeln('1.  Busca Binária');
    writeln('2. Busca Sequencial');
    write('Selecione uma opção: ');
    readln(op2);
    case op2 of
    1: binaria;
    2: sequencial;
    else
    writeln('outro');
    readkey;
    end;
    end; 
 
     procedure imprimir;
     begin
 
        for i := 1 to tam do
        begin
                writeln('====================');
                writeln('Nome: ',aluno.nome);
                writeln('Matrícula: ', aluno.mat);
                writeln('Nota 1: ', aluno.n1);
                writeln('Nota 2: ', aluno.n2);
                writeln('Média: ', aluno.media);
        end;
 
        Enter;
     end;
 
    procedure menu_principal;
    var op1:integer;
begin
 repeat
    clrscr;
writeln('1. Cadastrar alunos');
writeln('2. Ordenar dados dos alunos');
    writeln('3. Buscar alunos');
    writeln('4. Imprimir dados de todos os alunos');
    writeln('5. Sair');
    write('Selecione uma opção: ');
 
    readln(op1);
      case op1 of
      1: cadastro;
          2:ordenar;
          3:busca;
          4:imprimir;
 
end;
       until op1=5;
       writeln('FIM DO PROGRAMA');
       for i := 1 to tam do
        begin
                writeln('====================');
                writeln('Nome: ',aluno.nome);
                writeln('Matrícula: ', aluno.mat);
                writeln('Nota 1: ', aluno.n1);
                writeln('Nota 2: ', aluno.n2);
                writeln('Média: ', aluno.media);
        end;
 
        Enter;
end;
 Begin
  menu_principal;
 End.
 
 
 
 
não imprimiu certo o que eu escrevi, alguém pode me ajudar... sou iniciante... muito obrigado...