Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Programa não compila, erro de sintaxe


Posts recomendados

Bom dia pessoal. Tenho algumas dúvidas sobre um programa que estou estudando em um livro. O programa não consegue compilar porque dá erro erro sintático na linha 48, else não esperado. O código foi copiado exatamente como está no livro.


{Programa para efetuar uma pesquisa binária de nomes em uma referida matriz}
Program Pesquisa_binaria;
var
NOME: array[1..10] of string;
I,J: integer;
comeco,final,meio:integer;
pesq,resp,X: string;
acha: boolean;
Begin
  writeln ('Pesquisa binária de nomes');
  writeln;
  for I:=1 to 10 do
    begin
    write ('Digite o ', I:2, 'o. nome');
    readln (NOME[I]);
  {Ordenação}
  for I:=1 to 9 do
    for J:= I+1 to 10 do
      if (NOME[I]> NOME [J]) then
        begin
        X:= NOME [I];
        NOME [I]:= NOME[J];
        NOME[J]:= X;
        end;
  {Trecho de pesquisa}
  resp:= 'SIM';
  While (resp='Sim') or (resp='sim') do
    begin
    writeln;
    write('Entre com o nome a ser pesquisado:');
    comeco:= 1;
    final:= 10;
    acha:= false;
    while (comeco <=final) and (acha = false) do
      begin
      meio:= (comeco+final) div 2;
      if (pesq=nome[meio]) then
        acha:= true
        else
        if (pesq< nome[meio]) then
        final:= meio-1
        else
        comeco:=meio+1;
      end;
    if (acha=true) then;
      writeln(pesq, 'foi localizado na posição', meio:2)
      else
      writeln (pesq, 'Não foi localizado');
    write('Deseja continuar? Sim/Não:');
    readln (resp);
    readkey;  
End.

Link para o comentário
Compartilhar em outros sites

Achei um erro aqui que explica porque do else não ser esperado, tem um ; depois do then onde não deveria. Agora, corrigido esse erro, aparece que o . final de End. não é esperado. Eu resolvi da outra vez finalizando todos os begins que tinha começado e que estavam faltando, mas dessa vez não resolveu. Alguém pode dar uma luz?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Bruno Galote.

 

Você precisa copiar o texto do código com mais atenção, rs...

 

Vamos lá:

 

Para corrigir faça o seguinte... compile o código e veja qual erro dado. Nem sempre o erro apresentado é exatamente o que precisa, mas vai acostumando.. as correções estão baixo:

 

1-Faltou o end; do primeiro for  (como não fechou o for, ele acusou que está reutilizando o I)

2-Na linha 46, você colocou um ; depois do then

3-A depender do seu compilador, será necessário declarar a unit CRT (ou WinCRT) para reconhecer o ReadKey.

ex.:

{Programa para efetuar uma pesquisa binária de nomes em uma referida matriz}
Program Pesquisa_binaria;
uses
  CRT;

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Agora funcionou! Faltava o end depois do primeiro for mesmo. Obrigado simon. Mas mesmo assim o código não procura o nome, ele simplesmente pede 10 nomes e depois coloca que não foi encontrado, indo direto para a linha writeln (pesq, 'Não foi localizado'); será que faltou alguma coisa? Lembrando que estou apenas copiando o código de um livro. O livro diz para compilar em turbo pascal ou free pascal, mas eu estou compilando em pascalzim.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá. Desculpe pela demora...

 

 

Então, faltou o readln(pesq);... e mais alguns detalhes. Se o código está pronto, tente copiar com mais calma... :)

 

Como a postagem já tem alguns dias, fiz alguns comentários e inserir alguns conceitos novos. Espero que ajude.

 

{Programa para efetuar uma pesquisa binária de nomes em uma referida matriz}
Program Pesquisa_binaria;
const
  MAX=3; //número máximo de cadastros
var
  NOMES  :array[1..MAX] of string; //recomendo utilizar a nomenclatura de vetores no plural
  I,J    :byte;
  comeco,
	final,
	meio   :byte;
  pesq,
	resp,
	AUX    :string;
  acha   :boolean;
BEGIN
TextColor(LightGreen); //LightGreen = 10, que corresponde a cor Verde Claro (original do PascalZim)
writeln('Pesquisa binária de nomes');
writeln;
for I:=1 to MAX do
  begin
  write  ('Digite o ',I:2,'o nome: '); //
  readln(NOMES[I]);
  end; //faltou esse end; [Simon.Viegas]

{Ordenação}
for I:=1 to MAX-1 do
  for J:=I+1 to MAX do
    if (NOMES[I]>NOMES[J]) then
      begin
      AUX     :=NOMES[I];
      NOMES[I]:=NOMES[J];
      NOMES[J]:=aux;
      end;

{Trecho de pesquisa}
{resp:= 'SIM';} //O Pascal é "Sensitive Case". De acordo com o While, tem que ser "Sim" ou "Sim" ou usa o UpCase, como demonstrado abaixo [Simon.Viegas]
resp:='Sim';
While (UpCase(resp)='SIM') do //inserir um UpCase(), que retorna os caracteres em maiúculo... (obs.: com ele tanto faz como escrever, ele vai comparar em maiúsculo) [Simon.Viegas]
  begin
  writeln;
  write('Entre com o NOME a ser pesquisado: '); //pequeno ajuste na formatação [Simon.Viegas] 
  TextColor(White); //Yellow = 15, que corresponde a cor Branco
	readln(pesq); //faltou ler o pesq [Simon.Viegas]
  TextColor(LightGreen); //LightGreen = 10, que corresponde a cor Verde Claro (original do PascalZim)
  comeco:=1;
  final:=MAX;
  acha:=false;
  while (comeco<=final) and (acha=false) do
    begin
    meio:=(comeco+final) div 2;
    if (UpCase(pesq)=UpCase(NOMES[meio])) then
      acha:=true
    else
      if (pesq < UpCase(NOMES[meio])) then
        final:= meio-1
      else
        comeco:=meio+1;
    end;
  writeln;
  writeln;
  TextColor(Yellow); //Yellow = 14, que corresponde a cor Amarelo
  if (acha=true) then //tinha um ; aqui indevidamente [Simon.Viegas]
    writeln(pesq,' foi localizado na posição',meio:2) //pequeno ajuste na formatação [Simon.Viegas] 
  else
    writeln (pesq,' não foi localizado'); //pequeno ajuste na formatação [Simon.Viegas] 
	writeln;
  writeln;
  TextColor(10); //LightGreen = 10, que corresponde a cor Verde Claro (original do PascalZim)
  write('Deseja continuar? Sim/Não:');
  readln(resp);
  end; //faltou esse end; [Simon.Viegas]
ReadKey;  
End.

 

Teste:

tela.jpg

 

 

Qualquer coisa é só postar.

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