Fórum Iniciante - não consigo utilizar IF THEN ELSE - Ajude-me #316228
16/03/2006
0
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);
else
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.Ciro_cj
Curtir tópico
+ 0Posts
16/03/2006
Renato.pavan
Correto
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) else begin ConsEx.Text:=´Não Tributado; tf:=ce*2; end; 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.
Bem acho q é isso, testa la, qq coisa volte a postar.
[]´s
Renato
Gostei + 0
16/03/2006
_rodfaria_
if ce >100 then ConsEx.Text:=FloatToStr(ce); else ConsEx.Text:=´Não Tributado
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
Gostei + 0
16/03/2006
_rodfaria_
if ce >100 then ConsEx.Text:=FloatToStr(ce); else ConsEx.Text:=´Não Tributado
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
Gostei + 0
16/03/2006
Cristianojedi
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)
else
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.Você tem que tirar os ( ; ) antes do else.
Cristiano
Gostei + 0
16/03/2006
Paullsoftware
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:
if condição then
comando;
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.
if Button2.Enabled = False then Button2.Enabled = True;
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!’); else 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:
procedure TForm1.Button1Click(Sender: TObject); var Dividendo, Divisor, Resultado: Real; begin Dividendo := StrToFloat(Edit1.Text); Divisor := StrToFloat(Edit2.Text); if Divisor = 0 then begin Color := clRed; ShowMessage(´Divisor inválido´); end else begin Color := clSilver; Resultado := Dividendo/Divisor; ShowMessage(´Resultado = ´ + FloatToStr(Resultado)); end; end;
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:
procedure TForm1.Button1Click(Sender: TObject); var Nota: Real; begin Nota := StrToFloat(Edit1.Text); if nota < 5.0 then ShowMessage(´Reprovado por média´) else if (Nota >= 5.0) and (Nota < 7.0) then ShowMessage(´Aprovado na final´) else if Nota > 8.5 then ShowMessage(´Aprovado com excelência´) else ShowMessage(´Aprovado simplesmente´) end;
[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.
Atual,Anterior,Resultado,Ce,tf:Real;
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.
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); //Tire esse ponto e virgula else ConsEx.Text:=´Não Tributado // essa linha contém um erro, está faltando finalizar ASPAS simpes --> ´ e o ponto e vírgula ; tf:=ce*2 if tf >0 then Totalfatura.Text:=FloatToStr(tf); else totalfatura.Text:=´Sem Valor Comercial´ end;
espero ter ajudado! :wink:
Gostei + 0
16/03/2006
Vinicius2k
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)
else
ConsEx.Text := ´Não Tributado´;
{ Segundo teste }
tf := ce * 2
if tf > 0 then
Totalfatura.Text := FloatToStr(tf)
else
totalfatura.Text := ´Sem Valor Comercial´;Se o segundo teste estiver atrelado ao primeiro, seria:
{ Primeiro teste }
if ce > 100 then
ConsEx.Text := FloatToStr(ce)
else
begin
ConsEx.Text := ´Não Tributado´;
{ Segundo teste }
tf := ce * 2
if tf > 0 then
Totalfatura.Text := FloatToStr(tf)
else
totalfatura.Text := ´Sem Valor Comercial´;
end;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).
if condicao then
<instrução>;
{ **** }
if <condição> then
<instrução>
else
<instrução>;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
begin
<instrução>;
<instrução>;
end
else
<instrução>;
{ **** }
if <condicao> then
<instrução>
else
begin
<instrução>;
<instrução>;
end;Gostei + 0
16/03/2006
Ciro_cj
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)