Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Erro: Estrutura Condicional Composta


Posts recomendados

Recentemente, quando cheguei a parte de estruturas condicionais compostas, aprendi que antes do else não havia ponto e vírgula (;). Estava construindo meus algoritmos sem problema algum, porém este programa que fiz só funciona se colocar ponto e vírgula (;) antes do else (exceto o end). Segue o código:

 

program NovoSalario;

uses CRT;

var
  nome :string;
  salario_atual, novo_salario :real;

begin
    textbackground(yellow);
    textcolor(white);
    clrscr();
    
    writeln(' ',#201,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#187);
    writeln(' ',#186,' NOVO SALÁRIO ',#186);
    writeln(' ',#200,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#188);
    writeln();
    
	write(' - Nome: ');
	readln(nome);
		
	write(' - Salário Atual: ');
	readln(salario_atual);
		
	writeln();
		
		if (salario_atual < 0) then
		  begin
		    writeln(' * Salário Inválido!')
		  end
		else
        
		  if (salario_atual <= 400) then
		    begin
		      novo_salario := ((salario_atual * 15) / 100 + salario_atual);
		      
		      writeln(' * Nome do Funcionário: ', nome);
		      writeln(' * Salário Atual: ', salario_atual:0:2);
		      writeln(' * Aumento de 15%');
		      writeln(' * Novo Salário: ', novo_salario:0:2);
		    end
		else
        
		  if (salario_atual > 400) and (salario_atual <= 700) then
		    begin
		      novo_salario := ((salario_atual * 12) / 100 + salario_atual);
		      
		      writeln(' * Nome do Funcionário: ', nome);
		      writeln(' * Salário Atual: ', salario_atual:0:2);
		      writeln(' * Aumento de 12%');
		      writeln(' * Novo Salário: ', novo_salario:0:2);
		    end
		else
        
		  if (salario_atual > 700) and (salario_atual <= 1000) then
		    begin
		      novo_salario := ((salario_atual * 10) / 100 + salario_atual);
		      
		      writeln(' * Nome do Funcionário: ', nome);
		      writeln(' * Salário Atual: ', salario_atual:0:2);
		      writeln(' * Aumento de 10%');
		      writeln(' * Novo Salário: ', novo_salario:0:2);
		    end
		else
        
		  if (salario_atual > 1000) and (salario_atual <= 1800) then
		    begin
		      novo_salario := ((salario_atual * 7) / 100 + salario_atual);
		      
		      writeln(' * Nome do Funcionário: ', nome);
		      writeln(' * Salário Atual: ', salario_atual:0:2);
		      writeln(' * Aumento de 7%');
		      writeln(' * Novo Salário: ', novo_salario:0:2);
		    end
		else
        
		  if (salario_atual > 1800) and (salario_atual <= 2500) then
		    begin
		      novo_salario := ((salario_atual * 4) / 100 + salario_atual);
		      
		      writeln(' * Nome do Funcionário: ', nome);
		      writeln(' * Salário Atual: ', salario_atual:0:2);
		      writeln(' * Aumento de 4%');
		      writeln(' * Novo Salário: ', novo_salario:0:2);
		    end
		else
        
		  if (salario_atual > 2500) then
		    begin
		      novo_salario := salario_atual;
		      
		      writeln(' * Nome do Funcionário: ', nome);
		      writeln(' * Salário Atual: ', salario_atual:0:2);
		      writeln(' * Sem Aumento');
		      writeln(' * Novo Salário: ', novo_salario:0:2);
		    end;

    write(' ');
    readkey();
end.

Somente com o ponto e vírgula funciona, saberiam me dizer o porquê? Estou usando o Pascal Zim!

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

  • Membro VIP
15 horas atrás, Lucas Da Silva Aleixo disse:

Recentemente, quando cheguei a parte de estruturas condicionais compostas, aprendi que antes do else não havia ponto e vírgula (;). Estava construindo meus algoritmos sem problema algum, porém este programa que fiz só funciona se colocar ponto e vírgula (;) antes do else (exceto o end). Segue o código:

 

Veja: só não deve colocar ; no comando imediatamente ao else. Se for um end, então ele não terá ; antes de end. O restante continua normal.

 

Em qual linha está com erro?

 

 

obs.: antes dos end os ; são facultativos, mas como recomendação é melhor sempre usar, ou seja, nesse sentido, faltou um ; depois do comando que está no primeiro if.

 

No aguardo.

adicionado 4 minutos depois

Adendo:

Cuidado com a indentação. Sempre mantenha o código indentado... um dica importante é também tomar cuidado com o tab (tabução), ou seja, ou você só usa tab ou só usa espaço.

 

Como exemplo, reindentei o código:

program NovoSalario;
uses
  CRT;

var
  nome :string;
  salario_atual, novo_salario :real;

begin
textbackground(yellow);
textcolor(white);
clrscr();
writeln(' ',#201,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#187);
writeln(' ',#186,' NOVO SALÁRIO ',#186);
writeln(' ',#200,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#188);
writeln();
write  (' - Nome         : '); readln(nome);
write  (' - Salário Atual: '); readln(salario_atual);
writeln();
if (salario_atual < 0) then
  begin
  writeln(' * Salário Inválido!') //aqui faltou ;
  end
else
  if (salario_atual <= 400) then
    begin
    novo_salario := ((salario_atual * 15) / 100 + salario_atual);
    writeln(' * Nome do Funcionário: ', nome);
    writeln(' * Salário Atual: ', salario_atual:0:2);
    writeln(' * Aumento de 15%');
    writeln(' * Novo Salário: ', novo_salario:0:2);
    end
  else
    if (salario_atual > 400) and (salario_atual <= 700) then
      begin
      novo_salario := ((salario_atual * 12) / 100 + salario_atual);
      writeln(' * Nome do Funcionário: ', nome);
      writeln(' * Salário Atual: ', salario_atual:0:2);
      writeln(' * Aumento de 12%');
      writeln(' * Novo Salário: ', novo_salario:0:2);
      end
    else
      if (salario_atual > 700) and (salario_atual <= 1000) then
        begin
        novo_salario := ((salario_atual * 10) / 100 + salario_atual);
        writeln(' * Nome do Funcionário: ', nome);
        writeln(' * Salário Atual: ', salario_atual:0:2);
        writeln(' * Aumento de 10%');
        writeln(' * Novo Salário: ', novo_salario:0:2);
        end
      else
        if (salario_atual > 1000) and (salario_atual <= 1800) then
          begin
          novo_salario := ((salario_atual * 7) / 100 + salario_atual);
          writeln(' * Nome do Funcionário: ', nome);
          writeln(' * Salário Atual: ', salario_atual:0:2);
          writeln(' * Aumento de 7%');
          writeln(' * Novo Salário: ', novo_salario:0:2);
          end
        else
          if (salario_atual > 1800) and (salario_atual <= 2500) then
            begin
            novo_salario := ((salario_atual * 4) / 100 + salario_atual);
            writeln(' * Nome do Funcionário: ', nome);
            writeln(' * Salário Atual: ', salario_atual:0:2);
            writeln(' * Aumento de 4%');
            writeln(' * Novo Salário: ', novo_salario:0:2);
            end
          else
            if (salario_atual > 2500) then
              begin
              novo_salario := salario_atual;
              writeln(' * Nome do Funcionário: ', nome);
              writeln(' * Salário Atual: ', salario_atual:0:2);
              writeln(' * Sem Aumento');
              writeln(' * Novo Salário: ', novo_salario:0:2);
              end;
write(' ');
ReadKey();
end.

 

 

Outro detalhe:

O begin/end só é necessário quando tem mais de um comando dentro da estrutura, logo para o primeiro if não necessitaria. Ex.:

if (salario_atual < 0) then
  writeln(' * Salário Inválido!') //obs.: agora não tem ; pois está antes do else!
else
  if (salario_atual <= 400) then
    begin
    novo_salario := ((salario_atual * 15) / 100 + salario_atual);
    writeln(' * Nome do Funcionário: ', nome);
    ...

 

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

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!