Ir ao conteúdo
  • Cadastre-se
Zukhe

Pascal Problema com pascal simples (principiante)

Recommended Posts

Program Pzim ;
var x,y:integer;

Begin
   y:= 30;
    x := y;
    repeat
      begin
        readkey;
        if readkey = #65 then
        begin
          x := x -1;
        end
        else
        if readkey = #68 then
        begin
          x := x +1;
        end
        else
        if readkey = #83 then
        begin
          y := y +1;
        end
        else
        if readkey = #87 then
        begin
          y := y -1;
        end;
        write ('X');
        gotoxy (x,y);
      end;
End.

O programa aponta que o ultimo "END" não deveria existir, é um código tão curto e não consigo enxergar o problema, alguém ai consegue?

"Erro sintático na linha 32..."

" 'END' não esperado!"

adicionado 1 minuto depois

faltou o until

adicionado 1 minuto depois

filha da *****

adicionado 1 minuto depois

sou um *****

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Zukhe.

 

Foi apenas um detalhe na sintaxe... repeat  não precisa de begin/end. Apenas o seu until.

 

Segue seu código original indentado:

Program Pzim ;
var 
  x,y:integer;
Begin
y:= 30;
x := y;
repeat
  begin
  readkey;
  if readkey = #65 then
    begin
    x := x -1;
    end
  else
    if readkey = #68 then
      begin
      x := x +1;
      end
    else
      if readkey = #83 then
        begin
        y := y +1;
        end
    else
      if readkey = #87 then
        begin
        y := y -1;
        end;
    write ('X');
    gotoxy (x,y);
  end;
End.

Obs.: esses if não precisam de begin/end. Basta apagá-los. Lembrando que antes do else não teme tirar o ";".

 

 

Por favor, posta o seu código final para analisarmos.

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Program Pzim ;
var x,y,xt1,xt2,xt3,yt,h,C,del:integer;

Begin
  y:= 30;
  x := 75;
  repeat
      readkey;
      begin  //movimentação FODELASTICA da nave espacial
        if readkey = #65 then
        begin
          x := x -1;
        end
        else
        if readkey = #68 then
        begin
          x := x +1;
        end
        else
        if readkey = #83 then
        begin
          y := y +1;
        end
        else
        if readkey = #87 then
        begin
          y := y -1;
        end;
        
        clrscr;                     // clear screeen
        gotoxy(x,y -5);
        writeln ( '    /\     ' );                  // nave espacial em ascii
        gotoxy(x,y -4);
        writeln ( '   (  )    ' );
        gotoxy(x,y -3);
        writeln	( '   (  )    ' );
        gotoxy(x,y -2);
        writeln ( '  /|/\|\   ' );
        gotoxy(x,y -1);
        writeln ( ' /_||||_\  ' );
      end;
  until readkey = #27;
  
	del := 200;
  repeat        // formação de destroços fodelastica tb
      yt:= 0;
      C:= 0;
      xt1:= random(50);         // posição do primeiro obstaculo
      xt2:= 50 + random(50);              //do segundo
      xt3:= 95 + random(50);                      // do terceiro
      repeat
        c := c +1;
          begin
            gotoxy(xt1,yt + c);
            writeln (#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219,'               ',#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219);      // primeiro obstaculo
          end;
          begin
            gotoxy(xt2,yt + c);
            writeln (#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219);    // segundo
          end;
          begin
            gotoxy(xt3,yt + c);
            writeln (#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219,'               ',#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219+#219);      // terceiro
            delay (del);           // definição da dificuldade
          end;
          clrscr;
      until C = 45;
    
  until 7 = 1;             // GOOOOOOLLLL DA ALEMANHA
End.

Consegui fazer os dois sistemas funcionarem.....em paralelo.....agora falta fazer funcionar simultaneamente, alguma coisa com procedure ou function me ajudaria? Obrigado pela ajuda!  ps.: Sim, eles estão descaradamente separados, embora, no mesmo programa, mas ainda não tive nenhuma ideia pra deixar simultâneo, por isso deixei assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Zukhe.

 

 

Em 11/11/2017 às 20:25, Simon Viegas disse:

Obs.: esses if não precisam de begin/end. Basta apagá-los. Lembrando que antes do else não teme tirar o ";".

Nenhum comentário?

 

 

 

22 horas atrás, Zukhe disse:

Consegui fazer os dois sistemas funcionarem.....em paralelo.....agora falta fazer funcionar simultaneamente, alguma coisa com procedure ou function me ajudaria?

Então, creio que paralelo e simultaneamente sejam a mesma coisa. Mas no caso, o Pascal executa as instrução de modo sequencial mesmo. Pelo menos no nível atual de programação... (existe a possibilidade de uso de threads, mas acho que não vem ao caso).

 

 

 

22 horas atrás, Zukhe disse:

Sim, eles estão descaradamente separados, embora, no mesmo programa, mas ainda não tive nenhuma ideia pra deixar simultâneo, por isso deixei assim.

Analisando o código e fazendo alguns testes, acho que já consegui entender como mais ou menos deve funcionar o programa. Acho que dá para fazer de modo sequencial mesmo. Abaixo tento explicar.

 

 

 

Mas vamos lá. Alguns pontos:

 

1) IDENTIFICAÇÃO DA TECLA PRESSIONADA

Ao invocar a function ReadKey, o programa trava e fica aguardando a tecla ser pressionada. No caso, do jeito que você fez, ficará aguardando uma tecla para cada if... mas o que provavelmente você precisa é que leia apenas uma tecla e depois analise ela. Use algo assim:

var
  tecla:char;
...
tecla:=ReadKey;

E usa a variável tecla nos if... e no until. Dessa forma, lerá a tecla apenas uma vez para cada loop.

 

 

 

2) ESTRUTURA DE PROGRAMAÇÃO

A estrutura atual está dividida em duas partes: a nave e a sua movimentação; e os destroços e sua movimentação.

 

Pelo que eu vi, dá para fazer as duas estruturas funcionarem "de modo alternado", ou seja, deixar os destroço caindo, e se pressionar uma tecla, movimenta a nave, e volta novamente para os destroços até que nova tecla seja pressionada... no caso, a "simultaneidade" será simulada.

 

Antes de entrar na tentativa de como fazer alternar entre uma parte e outra, sugiro antes reorganizar cada umas delas.

 

 

***

 

Resumidamente:

Pegue apenas uma das estruturas e deixe funcionando certinho. Depois partimos para outra, e após juntamos as duas. É melhor fazer assim por que seria complicado tentar fazer as 3 coisas ao mesmo tempo (nave, destroços e juntar).

 

No aguardo.

  • Curtir 1

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

×