Iniciante - não consigo utilizar IF THEN ELSE - Ajude-me - Fórum DevMedia
Iniciante - não consigo utilizar IF THEN ELSE - Ajude-me
Estou tentando fazer com que o edit receba um valor se satisfazer uma condição efetua o calculo caso contrario receba um texto quando eu clicar no botão. sem os if then else funciona normal o cálculo.
olhem o código e me digam o que esta errado.
unit Energia_pas;
LeituraAnterior: TEdit;
LeituraAtual: TEdit;
Consumo: TEdit;
BtnCalcula: TButton;
BtnLimpa: TButton;
BtnFechar: TButton;
TotalFatura: TEdit;
ConsEx: TEdit;
procedure BtnCalculaClick(Sender: TObject);
procedure BtnLimpaClick(Sender: TObject);
Atual,Anterior,Resultado,Ce,tf:Real;
procedure TForm1.BtnCalculaClick(Sender: TObject);
Atual:=StrToFloat(LeituraAtual.text);
Anterior:=StrToFloat(LeituraAnterior.text);
Resultado:=Atual-Anterior;
Consumo.Text:=FloatToStr(resultado);
ce:=Atual-anterior-(100);
if ce >100 then
ConsEx.Text:=FloatToStr(ce);
ConsEx.Text:=´Não Tributado
tf:=ce*2
if tf >0 then
Totalfatura.Text:=FloatToStr(tf);
totalfatura.Text:=´Sem Valor Comercial´
procedure TForm1.BtnFecharClick(Sender: TObject);
procedure TForm1.BtnLimpaClick(Sender: TObject);
Leituraanterior.Text:=´´;
LeituraAtual.Text:=´´;
Consumo.Text:=´´;
LeituraAnterior.SetFocus;
olhem o código e me digam o que esta errado. unit Energia_pas; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) LeituraAnterior: TEdit; LeituraAtual: TEdit; Consumo: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; BtnCalcula: TButton; BtnLimpa: TButton; BtnFechar: TButton; Label5: TLabel; TotalFatura: TEdit; Label6: TLabel; ConsEx: TEdit; Label4: TLabel; Label7: TLabel; procedure BtnCalculaClick(Sender: TObject); procedure BtnFecharClick(Sender: TObject); procedure BtnLimpaClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Atual,Anterior,Resultado,Ce,tf:Real; implementation {$R *.dfm} procedure TForm1.BtnCalculaClick(Sender: TObject); begin Atual:=StrToFloat(LeituraAtual.text); Anterior:=StrToFloat(LeituraAnterior.text); Resultado:=Atual-Anterior; Consumo.Text:=FloatToStr(resultado); ce:=Atual-anterior-(100); if ce >100 then ConsEx.Text:=FloatToStr(ce); //Antes do else não tem ´;´ else //neste else falta o BEGIN - END ConsEx.Text:=´Não Tributado tf:=ce*2 if tf >0 then Totalfatura.Text:=FloatToStr(tf); else totalfatura.Text:=´Sem Valor Comercial´ end; procedure TForm1.BtnFecharClick(Sender: TObject); begin close; end; procedure TForm1.BtnLimpaClick(Sender: TObject); begin Leituraanterior.Text:=´´; LeituraAtual.Text:=´´; Consumo.Text:=´´; LeituraAnterior.SetFocus; end; end.
ConsEx.Text:=FloatToStr(ce)
ConsEx.Text:=´Não Tributado;
tf:=ce*2;
Totalfatura.Text:=FloatToStr(tf)
totalfatura.Text:=´Sem Valor Comercial´;
Bem acho q é isso, testa la, qq coisa volte a postar.
_rodfaria_
Tire o ponto-e-vírgula que está antes do else.
Falta fechar a apóstrofe do else.
http://www.delphibasics.co.uk/RTL.asp?Name=If
Você tem que tirar os ( ; ) antes do else.
[b:6e2873bfe3]Extrutura de Condição: If-then-else[/b:6e2873bfe3]
O comando mais usado para fazer decisões simples é o comando if. O comando if verifica uma condição e executa um comando ou bloco de comandos somente se a condição for verdadeira. O comando if é sempre usado com a palavra-chave then. Há várias maneiras de usar o comando if. Veja a mais simples a seguir:
Aqui a condição é qualquer expressão que tenha valor booleano (True ou False). Condições são geralmente comparações, como a > b, x = 1, total <= 1000, etc. Pode-se também usar o valor de uma propriedade como condição. O exemplo abaixo, ativa um botão (chamado ´Button2´) somente se ele estiver desativado (com Enabled=False). Caso contrário, nada acontece.
Há também várias funções predefinidas que retornam valores booleanos e que também podem ser usadas como condições.
Usando else
Um comando if pode também apresentar uma segunda parte, delimitada pela palavra-chave else. O comando da segunda parte (depois de else) é executado quando a condição é falsa. O exemplo a seguir mostra uma mensagem diferente dependendo do valor da variável ´x´:
if x > limite then
ShowMessage('Limite ultrapassado!');
ShowMessage('Sem problemas.');
[b:6e2873bfe3]Usando blocos com o comando if[/b:6e2873bfe3]
A versão simples do comando if usada nos exemplos acima tem uso muito limitado. Na maioria das vezes, é necessário executar mais de um comando se uma certa condição for verdadeira. Para isso você deve usar blocos de comandos. Veja um exemplo completo:
Dividendo, Divisor, Resultado: Real;
Dividendo := StrToFloat(Edit1.Text);
Divisor := StrToFloat(Edit2.Text);
ShowMessage(´Divisor inválido´);
Resultado := Dividendo/Divisor;
ShowMessage(´Resultado = ´ + FloatToStr(Resultado));
Note os dois blocos de comandos: um para o if-then e outro para o else. O programa calcula a divisão de dois valores do tipo Real (lidos a partir de dois componente Edit). Se o divisor for zero, o primeiro bloco do if é executado: o formulário muda para vermelho e uma mensagem é exibida. Se o divisor não for zero, o segundo bloco (depois do else) é executado, mudando a cor do formulário para cinza.
As funções StrToFloat e FloatToStr convertem de Strings para números reais e de números reais para Strings, respectivamente.
Note como o end depois do primeiro bloco não é seguido de ponto-e-vírgula (;). Essa é uma regra obrigatória da linguagem Object Pascal: um end antes de um else nunca deve ser seguido por ´;´. Somente o último end do comando if deve terminar com ponto-e-vírgula.
[b:6e2873bfe3]Aninhando comandos if[/b:6e2873bfe3]
Muitas vezes, um programa deve decidir entre mais de duas opções. Para isso, pode-se usar comandos if aninhados (um if dentro de outro). Veja um exemplo:
Nota := StrToFloat(Edit1.Text);
if nota < 5.0 then
ShowMessage(´Reprovado por média´)
if (Nota >= 5.0) and (Nota < 7.0) then
ShowMessage(´Aprovado na final´)
if Nota > 8.5 then
ShowMessage(´Aprovado com excelência´)
ShowMessage(´Aprovado simplesmente´)
O exemplo lê uma nota digitada pelo usuário e mostra uma mensagem que varia de acordo com o valor da nota. Acompanhe o fluxo do programa: se a nota for menor que 5, a primeira mensagem é exibida; caso contrário (qualquer valor maior ou igual a 5), o programa checa a segunda condição: se a nota estiver entre 5 e 7, a segunda mensagem é exibida. Se não, o programa verifica se a nota é maior que 8.5 e, se for, mostra a terceira mensagem. A mensagem depois do último else só é exibida se nenhuma das condições anteriores for verdadeira (isso acontece se a nota estiver entre 7 e 8.5).
[b:6e2873bfe3]NOTA:[/b:6e2873bfe3] no programa acima foi usada a palavra chave and para criar uma condição mais complexa. Há mais duas palavras-chaves semelhantes: or e not. Pode-se usar qualquer combinação de not, and e or para criar novas condições. Lembre-se, entretanto de usar parênteses para agrupar as condições. Os parênteses usados no programa anterior, por exemplo, são todos obrigatórios.
primeiro não há a necessidade de declarar variáveis globais na unit a não ser que queira usá-las, em outros comandos. Sem contar que, quando vc cria variaveis globais deve zerar seus valores antes de usar novamente assim:
Atual        := 0;
Anterior    := 0;
Resultado := 0;
CE           := 0;
TF            := 0;
Outro detalhe, sempre que poder use [b:6e2873bfe3]Double[/b:6e2873bfe3] no lugar de Real já que possuem o mesmo efeito e podem assumir valores do tipo [i:6e2873bfe3]Data e Time[/i:6e2873bfe3], além dos valores numericos.
ConsEx.Text:=FloatToStr(ce); //Tire esse ponto e virgula
ConsEx.Text:=´Não Tributado // essa linha contém um erro, está faltando finalizar ASPAS simpes --> ´ e o ponto e vírgula ;
A identação facilitaria o entendimento da lógica que você quer seguir.
Se os dois testes forem independentes, seria algo como:
{ Primeiro teste }
if ce > 100 then
ConsEx.Text := FloatToStr(ce)
ConsEx.Text := ´Não Tributado´;
{ Segundo teste }
tf := ce * 2
if tf > 0 then
Totalfatura.Text := FloatToStr(tf)
totalfatura.Text := ´Sem Valor Comercial´;
Se o segundo teste estiver atrelado ao primeiro, seria:
Depende de qual a lógica dos testes... As regras que parece-me não estar claras para você são:
1. Não utiliza ´;´ antes de ELSE e sempre se utiliza ´;´ para finalizar uma instrução (a menos que ela esteja antes do ELSE).
2. Todo bloco de código com mais de uma linha deve estar entre ´begin...end´. E se o bloco estiver antes do ELSE o ´;´ é utilizado nas instruções mas não no ´END´
if <condicao> then
TIVE UMA VERDADEIRA AULA CONSEGUI FAZER O QUE ESTAVA TENTANDO MUITO OBRIGADO PELA AJUDA DE VCS. CONTINUEM ASSIM AJUDANDO QUEM ESTA COMEÇANDO