Ir ao conteúdo

Posts recomendados

Postado

No programa abaixo toda vez que clico em compilar programa fica aparecendo

=> Erro sintático na linha 27 'A' não esperado!

Program Pzim ;
{Este programa lê dois números inteiros, calcula e imprime: 
- a soma dos dois números; 
- a subtração do primeiro pelo segundo; 
- a subtração do segundo pelo primeiro; 
- a multiplicação dos dois números; 
- o cociente inteiro da divisão do primeiro pelo segundo; 
- o cociente inteiro da divisão do segundo pelo primeiro; 
- o resto da divisão do primeiro pelo segundo; 
- o resto da divisão do segundo pelo primeiro. }
{Progamador:}
{data:}
var
a,b,c,d,e,f,g,h,i,j:integer;
Begin
write('digite dois números:');
readln(a,b);
c:= a+b;
d:= a-b;
e:= b-a;
f:= a*b;
g:= (a)div(b);
h:= (b)div(a);
i:= (a)mod(b);
j:= (b)mod(a);
Writeln ('A soma dos dois números é:',c,');
Writeln ('A subtração do primeiro pelo segundo é :',d,');
Writeln ('A subtração do segundo pelo primeiro é :',e,');
Writeln ('A multiplicação dos dois números é :',f');
writeln ('O cociente inteiro da divisão do primeiro pelo segundo é :',g,'); 
writeln ('O cociente inteiro da divisão do segundo pelo primeiro é: ',h'); 
writeln ('O resto da divisão do primeiro pelo segundo é: ',i'); 
writeln (O resto da divisão do segundo pelo primeiro é: ',j');

End.

 

  • Amei 1
Postado

@Klbrrs    qual o resultado esperado ?   ,  e o compilador só entende os comando que foram programados nele , e que precisam estar de acordo como  foram construídos ,  e assim para escrever na tela foi criado o comando writeln  :  

writeln('qq coisa');  // escreve essa msg e pula para a linha de baixo
                      // precisa ter essa palavra "writeln" , seguida dos dois parenteses
                      // com os delimitadores do texto formados por Aspas simples

e então para quê você colocou essa vírgula e uma aspa simples dentro dos parênteses ?  , bastaria remover essas aspas e vírguLas , oU de outra forma até pode deixa-las lá quietinha no mesmo lugar , e acrescentar mais algumas , para que tenham pares , e seu código poderia ser assim  :

Program Pzim ;
var
  a,b,c,d,e,f,g,h,i,j:integer;
Begin
  write('digite dois números:');
  readln(a,b);
  c:= a+b;
  d:= a-b;
  e:= b-a;
  f:= a*b;
  g:= (a)div(b);
  h:= (b)div(a);
  i:= (a)mod(b);
  j:= (b)mod(a);
  Writeln ('A soma dos dois números é:',c);
  Writeln ('A subtração do primeiro pelo segundo é :',d,'');
  Writeln ('A subtração do segundo pelo primeiro é :',e,'');
  Writeln ('A multiplicação dos dois números é :',f,'');
  writeln ('O cociente inteiro da divisão do primeiro pelo segundo é :',g,''); 
  writeln ('O cociente inteiro da divisão do segundo pelo primeiro é: ',h,''); 
  writeln ('O resto da divisão do primeiro pelo segundo é: ',i,''); 
  writeln ('O resto da divisão do segundo pelo primeiro é: ',j,'');

End.

 

Postado


Uma cadeia de caracteres é escrita com um caractere delimitador inicial e um caractere delimitador final. Esse delimitador é o caractere aspa simples ('). Por exemplo, uma cadeia de caracteres que representa o maior valor na face de um dado é 'seis'. O primeiro caractere ' é o delimitador inicial. O segundo caractere ' é o delimitador final. 

 

Já sabemos que existem dois delimitadores para cada cadeia de caracteres. Agora, considere o caso de existência de uma ou mais de uma cadeia de caracteres entre ( e ) na instrução writeln ( ). Nesse caso, a contagem de caracteres aspa simples escritos entre ( e ) em writeln ( ) deve ser par. Em seu programa, essa contagem não é par. Esse fato causa o erro sintático que relatou. 

 

A regra acima vale mesmo em um caso extremo: quando quiser expressar uma cadeia de caracteres que contenha o caractere aspa simples. O'Reilly é um exemplo de cadeia de caracteres que possui um caractere aspa simples. A convenção do Delphi para expressar o caractere aspa simples que pertence a uma cadeia de caracteres é escrever dois caracteres aspa simples consecutivos. Assim, para expressar a cadeia do exemplo devemos escrever 'O''Reilly'. O primeiro caractere ' é um delimitador inicial. O segundo e o terceiro caracteres ' representam um único caractere '. O quarto caractere ' é um delimitador final.

 

Para tornar par a contagem de caracteres aspa simples entre ( e ) na instrução  writeln ( ) poderá:

 

[1]
remover 
,'
de
Writeln ('A soma dos dois números é:',c,');

 

[2]
remover 
,'
de
Writeln ('A subtração do primeiro pelo segundo é :',d,');

 

[3]
trocar
f'
por 
f
em
Writeln ('A multiplicação dos dois números é :',f');

 

[4]
remover 
,'
de
writeln ('O cociente inteiro da divisão do primeiro pelo segundo é :',g,'); 

 

[5]
trocar 
h'
por 
h
em
writeln ('O cociente inteiro da divisão do segundo pelo primeiro é: ',h'); 

 

[6]
trocar
i'
por 

em
writeln ('O resto da divisão do primeiro pelo segundo é: ',i'); 

 

[7]
trocar 
j'
por 
j
em
writeln (O resto da divisão do segundo pelo primeiro é: ',j');

 

[8] 
trocar 
O resto 
por 
'O resto
em
writeln (O resto da divisão do segundo pelo primeiro é: ',j');

  • Amei 1
  • Membro VIP
Postado
Em 15/05/2022 às 01:30, joseph_conrad disse:

para expressar a cadeia do exemplo devemos escrever 'O''Reilly'. O primeiro caractere ' é um delimitador inicial.


Interessante. Não sabia que esse "escape" funciona no Pascal.


@Klbrrs, assim como no nosso português, é interessante dar um espaço após as ",". De um modo geral, segue um exemplo de código corrigido.

 

program Exibir_Diversos_Calculos_Entre_Dois_Numeros;
{$CODEPAGE UTF8} //para permitir acentos nas string em alguns compiladores [Não necessário no PascalZim, mas pode deixar]
{
Este programa lê dois números inteiros, calcula e imprime: 
- a soma dos dois números; 
- a subtração do primeiro pelo segundo; 
- a subtração do segundo pelo primeiro; 
- a multiplicação dos dois números; 
- o cociente inteiro da divisão do primeiro pelo segundo; 
- o cociente inteiro da divisão do segundo pelo primeiro; 
- o resto da divisão do primeiro pelo segundo; 
- o resto da divisão do segundo pelo primeiro.
}
{Progamador: Klbrrs}
{Data: 17/05/2022}
var
  a, b, c, d, e, f, g, h, i, j :integer;
begin
write  ('Digite dois números: ');
readln(a,b);
c := a+b;
d := a-b;
e := b-a;
f := a*b;
g := a div b;
h := b div a;
i := a mod b;
j := b mod a;
writeln('A soma dos dois números é: ', c);
writeln('A subtração do primeiro pelo segundo é: ', d);
writeln('A subtração do segundo pelo primeiro é: ', e);
writeln('A multiplicação dos dois números é: ', f);
writeln('O cociente inteiro da divisão do primeiro pelo segundo é: ', g); 
writeln('O cociente inteiro da divisão do segundo pelo primeiro é: ', h); 
writeln('O resto da divisão do primeiro pelo segundo é: ', i); 
writeln('O resto da divisão do segundo pelo primeiro é: ', j);
readln()
end.

 

 

Só para complementar:
image.png


Por que erro na linha 27, e não na 26? E por que "'A' não esperado!"?


É simples. Por que o delimitador de referência no Pascal é o ";", daí, é como se a linha 26 não tivesse terminado. O compilador entendo algo como:

image.png

 

Após o c, tem um "aspas simples", correto? O que está fazendo iniciar uma novo bloco de texto... O ")" e o ";" estão sendo entendido como parte lá do novo bloco de texto, em vez de comandos no Pascal. Aí, após a próximo aspas simples, fecha o bloco e o Pascal entende que o A ali seria uma vaiável... só que, dentro do writeln(), precisaria de uma vírgula antes para separa o texto da tal variável.

O que também ocorre é que o PascalZim está meio bugado. ("Não está preparado para tratar a situação", daí não está deixando as cores corretas quando a linha está quebrada. Tinha que aparecer em amarelo e verde como na imagem acima.)

 

Para ficar mais claro a questão do delimitador. Eu posso fazer isso aqui de boa:
 

c := a+b; d := a-b; e := b-a; f := a*b;
g := a div b; h := b div a; i := a mod b; j := b mod a;


Na primeira linha 4 instruções! (O que delimita é o ";".)

 

Adendo: no VisualG (filho do Pascal), isso não funciona. É preciso separar as instruções por linha mesmo. (Lá não tem ";" ou algo para delimitar.)

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!