Ir ao conteúdo
  • Cadastre-se

Função de trecho do código


Posts recomendados

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!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...