Ir ao conteúdo
  • Cadastre-se
Kingflare

Função de trecho do código

Recommended Posts

Olá pesssoal! Boa tarde, tudo bem? Galera, to com uma dúvida no seguinte trecho do código, eu sei a função dele, que apaga os pontos menores que zero, mas não entendi o funcionamento, alguém pode me explicar ?

while not eof(myPts) do         begin            read(myPts, pt);            if ((pt.x<0) or (pt.y<0)) or ((pt.x=0) or (pt.y=0))then                    write('(',pt.x,' ,',pt.y,')');                     begin                     pos:= filePos(myPts)-1;                       for i:= pos+1 to filesize(myPts)-1 do                        begin                           seek(myPts, i);                           read(myPts, pt);                           seek(myPts, i-1);                           write(myPts, pt);                        end;                     seek(myPts, filesize(myPts)-1);                     truncate(myPts);                     seek(myPts, pos);                  end;         end;      close(mypts);   readkey;end.

Eu não consigo entender a partir do "pos:= filePos(myPts)-1;" pra lá, se alguém puder me explicar passo a passo, ficaria  muito agradecido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar responder comendando o código... vamos lá:
 

while not eof(myPts) do //enquanto não for o fim do arquivo  begin  read(myPts, pt); //ler dado na linha atual  if ((pt.x<0) or (pt.y<0)) or ((pt.x=0) or (pt.y=0)) then //verifica se uma das coordenadas é menor ou igual a zero    write('(',pt.x,' ,',pt.y,')'); //escreve coordenada na tela  begin  //TEM ALGUMA COISA ERRADA AQUI... ESSE BEGIN NÃO PODE FICAR "SOLTO" (SEM NADA VINCULADO)  //ESSE TRECHO ABAIXO ESTÁ "APAGANDO A POSIÇÃO ATUAL" ("PUXANDO" DO PRÓXIMO EM DIANTE PARA TRÁS)    pos:= filePos(myPts)-1; //pos=posição atual -1 (pois ao dar o read, o cursor já aponta para o próximo)  for i:= pos+1 to filesize(myPts)-1 do //DA PRÓXIMA POSIÇÃO ATÉ A ÚLTIMA    begin    seek(myPts, i); //POSICIONA NA POSIÇÃO I (COMENÇANDO NA PRÓXIMA DEPOIS DE POS ("POS+1"))    read(myPts, pt); //COPIA OS DADOS DE LÁ    seek(myPts, i-1); //POSICIONA NA POSIÇÃO ANTERIOR A PRÓXIMA (pos+1-1 = "POS")    write(myPts, pt); //ESCREVE OS DADOS    end; //NO PRÓXIMO LOOP, I:=I+1  seek(myPts, filesize(myPts)-1); //POSICIONA NA ÚLTIMA POSIÇÃO  truncate(myPts); //CREIO QUE APAGA O QUE VEM DEPOIS DA POSIÇÃO ATUAL  seek(myPts, pos); //RE POSICIONA NA POSIÇÃO POS  end;  end;close(mypts); //FECHA O ARQUIVOreadkey;end.

Obs1:

if ((pt.x<0) or (pt.y<0)) or ((pt.x=0) or (pt.y=0)) then

Creio que dá para simplificar:

if  (pt.x<=0) or (pt.y<=0) then

Ob2.: Creio que o write deve ficar dentro do begin... mas é apenas uma suposição.

if ((pt.x<0) or (pt.y<0)) or ((pt.x=0) or (pt.y=0))then  begin  write('(',pt.x,' ,',pt.y,')');  pos:= filePos(myPts)-1;  ...

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×