Iniciante - não consigo utilizar IF THEN ELSE - Ajude-me
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
Posts
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
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
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
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
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:
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;
16/03/2006
Ciro_cj
Clique aqui para fazer login e interagir na Comunidade :)