Ir ao conteúdo
  • Cadastre-se

Lucas Pelepek

Membro Pleno
  • Posts

    56
  • Cadastrado em

  • Última visita

posts postados por Lucas Pelepek

  1. Opa,obrigado pela ajuda :).

    acabei fazendo esse código de teste: 

    Program ordenasonumero ;
    
    uses modulos;
    
    var
    
    arqi:file of regis;
    regi:regis;
    c,a,tot:integer;
    vet:vetor;
    
    Begin
      
      assign(arqi,'cand.ind');
      reset(arqi);
      
      repeat
        read(arqi,regi);
        c:=c+1;
        vet[c].pf:=c-1; //c=indice do vetor; c-1=posicao fisica no arquivo
        str(regi.num:4,vet[c].c_chave);
      until (eof(arqi));
      tot:=c; //total de elementos do vetor
      ordem(vet,tot);
      
      for a:=1 to tot do //mostra na tela o ordenado
      begin
        writeln(vet[a].pf:5,' ',vet[a].c_chave);
        if(a mod 40) = 0 then
        readln;
      end;
      
      write(arqi,regi);
      close(arqi);
      
    End.

    Ele organiza pelo numero,como eu queria,mas agora não sei porque ele não está gravando isso no Cand.IND.
    Quando olho o Cand ele continua igual ,não organizado por NUM.

    Percebi que no cand.ind ele repetiu o ultimo numero executando esse programinha.

    • Curtir 1
  2. 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.

    • Curtir 2

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!