Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Bruno Galote

Pascal Programa não compila, erro de sintaxe

Recommended Posts

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.

Editado por DiF

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    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.

    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






    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

    ×