Program TN03testes;
uses crt, modulos;
var vett10:vetor;
vet1t10:vet1;
arqi:file of regis;
ctv,ctp,es,a,poc,PAG,tv:integer;
reg:regis;
aux:cc;
PROCEDURE CABECA(ord:string[32]);{MODULO ESPECIFICO PARA ESTE PROGRAMA}
BEGIN
CLRSCR ;
PAG:=PAG+1;
WRITELN(' RELATORIO GERAL - ORDEM ',ord,' PAGINA:',PAG:3);
WRITELN;
write(' ORD NUM N O M E ===C P F=== NASCIMENTO CS N1');
WRITELN(' N2 N3 N4 SO CG CC CV');
begin
clrscr;
CABECA(ord);
poc:=ctv;
for ctp:=1 to poc do
begin
seek(arqi,vett10[ctp].pf);
read(arqi,reg);
begin
tv:=tv+1;
writeln(tv:5,reg.num:5,' ',reg.NOME,' ',reg.cpf,' ',copy(reg.data,7,2),'/',copy(reg
.data,5,2),'/',copy(reg.data,1,4),reg.car:3,reg.n1:4,reg.n2:4,reg.N3:4
,reg.N4:4,reg.so:4,reg.clg:4,reg.clc:3,reg.ccl:3 );
if(tv MOD 40 = 0)THEN
BEGIN
readln;
CABECA(ord);
END;
end;
close(arqi);
writeln('Registros Lidos: ',tv:5);
end;
end;
end;
procedure ordenanum(onum:string[32]);
BEGIN
//Monta o vetor usando o campo chave como número!!!
assign(arqi,'CAND.ind');
reset(arqi);
readln(arqi,reg);
while not(eof(arqi)) do
begin
begin
ctv:=1;
vett10[a].pf:=ctv;
seek(arqi,vett10[a].pf);
Str(reg.num:4,vett10[a].c_chave);
ctv:=ctv+1;
end;
end;
//Chama ordenacao
ordem(vett10,ctv);
//Apresenta na tela o resultado conforme o arquivo LEDIR
CABECA(onum);
end;
procedure ordenanome(onum:string[32]);
BEGIN
//Monta o vetor usando o campo chave como número!!!
assign(arqi,'CAND.ind');
reset(arqi);
read(arqi,reg);
while not(eof(arqi)) do
begin
ctv:=ctv+1;
vett10[a].pf:=ctv;
vett10[a].c_chave:=reg.nome;
seek(arqi,vett10[a].pf);
read(arqi,reg);
end;
//Chama ordenacao
ordem(vett10,ctv);
//Apresenta na tela o resultado conforme o arquivo LEDIR
CABECA(onum);
end;
procedure ordenacpf(onum:string[32]);
BEGIN
//Monta o vetor usando o campo chave como número!!!
assign(arqi,'CAND.ind');
reset(arqi);
read(arqi,reg);
while not(eof(arqi)) do
begin
ctv:=ctv+1;
vett10[a].pf:=ctv;
vett10[a].c_chave:=reg.cpf;
seek(arqi,vett10[a].pf);
read(arqi,reg);
end;
//Chama ordenacao
ordem(vett10,ctv);
//Apresenta na tela o resultado conforme o arquivo LEDIR
CABECA(onum);
end;
procedure ordenadata(onum:string[32]);
BEGIN
//Monta o vetor usando o campo chave como número!!!
assign(arqi,'CAND.ind');
reset(arqi);
read(arqi,reg);
while not(eof(arqi)) do
begin
ctv:=ctv+1;
vett10[a].pf:=ctv;
vett10[a].c_chave:=reg.data;
seek(arqi,vett10[a].pf);
read(arqi,reg);
end;
//Chama ordenacao
ordem(vett10,ctv);
//Apresenta na tela o resultado conforme o arquivo LEDIR
CABECA(onum);
end;
procedure ordenacar(onum:string[32]);
BEGIN
//Monta o vetor usando o campo chave como número!!!
assign(arqi,'CAND.ind');
reset(arqi);
read(arqi,reg);
while not(eof(arqi)) do
begin
ctv:=ctv+1;
vett10[a].pf:=ctv;
Str(reg.car:1,vett10[a].c_chave);
seek(arqi,vett10[a].pf);
read(arqi,reg);
end;
//Chama ordenacao
ordem(vett10,ctv);
//Apresenta na tela o resultado conforme o arquivo LEDIR
CABECA(onum);
end;
//Comeca o Programa
BEGIN
WRITELN('+++++++++++++++++++++++++++++++++++++++++++++++');
WRITELN(' BEM VINDO A PESQUISA ');
WRITELN('+++++++++++++++++++++++++++++++++++++++++++++++');
WRITELN('DIGITE O NÚMERO DO TIPO DE ORDENACAO DESEJADA:');
WRITELN('1)Por Número de inscrição');
WRITELN('2)Por Nome');
WRITELN('3)Por CPF');
WRITELN('4)Por Data de Nascimento');
WRITELN('5)Por Cargo');
WRITE('R: ');
read(es);
if (es=1) or (es=01) then
ordenanum('ORDENA POR NUMERO DE INSCRICAO');
if (es=2) or (es=02) then
ordenanome('ORDENA POR NOME DE CANDIDATO');
if (es=3) or (es=03) then
ordenacpf('ORDENA POR CPF');
if (es=4) or (es=04) then
ordenadata('ORDENA POR DATA DE NASCIMENTO');
if (es=5) or (es=05) then
ordenacar('ORDENA POR CARGO');
End.
esse é o 'MODULOS UNIT':
unit modulos;
interface
type
a36=string[36];
regis=record
num:integer;
nome:a36;
cpf:string[11];
data:string[8];
car,n1,n2,n3,n4,so,clg,clc,ccl:integer
end;
cc=record
pf:integer;
c_chave:a36;
end;
vetor=array[1..2000] of cc;
vet1=array[1..2000] of a36;
PROCEDURE pebin1(vet:vetor;ext:a36;t:integer;VAR CC:INTEGER);
function valdat(d,m,a:integer):boolean;
function vercpf(num:string[11]):boolean;
procedure ordea(var vet:vet1; t:integer);
procedure ordem(var vet:vetor; t:integer);
implementation
//-----ordena vetor contento em cada posicao a estrutura registro PF+CAMPO CHAVE
procedure ordem(var vet:vetor; t:integer);
var aux:cc;
tot,a,jt:integer;
tro:boolean;
begin
tot:=t;
jt:=1;
repeat
tro:=true;
tot:=tot-jt;
for a:=1 to tot do
if(vet[a].c_chave > vet[a+1].c_chave) then
begin
aux:=vet[a];
vet[a]:=vet[a+1];
vet[a+1]:=aux;
tro:=false;
jt:=1;
end
else
jt:=jt+1;
until tro;
end;
//-----ordena um vetor contendo em cada posicao um STRING[36]
procedure ordea(var vet:vet1; t:integer);
var aux:a36;
tot,a,jt:integer;
tro:boolean;
begin
tot:=t;
jt:=1;
repeat
tro:=true;
tot:=tot-jt;
for a:=1 to tot do
if(vet[a] > vet[a+1]) then
begin
aux:=vet[a];
vet[a]:=vet[a+1];
vet[a+1]:=aux;
tro:=false;
jt:=1;
end
else
jt:=jt+1;
until tro;
end;
//------valida uma data
function valdat(d,m,a:integer):boolean;
var dm:integer;
DAT:BOOLEAN;
BEGIN
DAT:=TRUE;
IF(A<1900)THEN //ano
DAT:=FALSE
ELSE
IF(M<1) OR (M>12) THEN //mes
DAT:=FALSE
ELSE
BEGIN //dia
DM:=31;
IF(M=4) OR (M=6) OR (M=9) OR (M=11) THEN //meses com 30 dias
DM:=30;
IF(M=2) THEN //fevereiro
BEGIN
DM:=28;
IF(A MOD 4) = 0 THEN //bissesto
DM:=29;
end;
IF(D<1) OR (D>DM) THEN
DAT:=FALSE
END;
valdat:=dat;
END;
//-----pequisa binaria
PROCEDURE pebin1(vet:vetor;ext:a36;t:integer;VAR CC:INTEGER);
var ii,i9,meio:integer;
achou:boolean;
begin
achou:=false;
ii:=1;
i9:=t;
repeat
meio:=(ii+i9) div 2;
if(ext = vet[meio].c_chave)then
achou:=true
else
if(ext > vet[meio].c_chave)then
ii:=meio+1
else
i9:=meio-1;
until ((achou) OR (ii > i9));
if( achou ) then
CC := meio
else
CC := 0;
end;
//-----valida CPF
function vercpf(num:string[11]):boolean;
var vet:array[1..11] of integer;
dvs:array[1..2] of integer;
som,a,b,e,f,m,r:integer;
aux:boolean;
begin
aux:=true;
for a:=1 to 11 do
val(num[a],vet[a],e);{o string "num" já vem validado}
f:=8;
m:=10;
a:=0;
repeat
som:=0;
a:=a+1;
f:=f+1;
m:=m+1;
for b:=1 to f do
som:=som+vet[b]*(m-b);
r:=som mod 11;
dvs[a]:=11-r;
if(r<2)then
dvs[a]:=0;
if(vet[m-1] <> dvs[a])then
aux:=false;
until ((a=2) or (not aux));
vercpf:=aux;
end;
end.
trabalho da faculdade.
Quando tento executar o primeiro code ele me diz "A posição 0 esta fora dos limites do vetor!",alguém pode me ajudar? (tudo foi compilado no pascalzim).
Essa é minha primeira vez postando,desculpe se cometi algum erro.