Array
(
)

Iniciante - não consigo utilizar IF THEN ELSE - Ajude-me

Ciro_cj
   - 16 mar 2006

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.



#Código

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.



Renato.pavan
   - 16 mar 2006


Citação:
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.


Correto#Código


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


_rodfaria_
   - 16 mar 2006

#Código


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


_rodfaria_
   - 16 mar 2006

#Código


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


Cristianojedi
   - 16 mar 2006

#Código

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


Paullsoftware
   - 16 mar 2006

Extrutura de Condição: If-then-else
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.
#Código

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´:
#Código
if x > limite then
ShowMessage(‘Limite ultrapassado!’);
else
ShowMessage(‘Sem problemas.’);

Usando blocos com o comando if
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:
#Código
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;
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.
Aninhando comandos if
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:
#Código
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;
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).
NOTA: 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.

#Código
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:
#Código
Atual        := 0;
Anterior := 0;
Resultado := 0;
CE := 0;
TF := 0;

Outro detalhe, sempre que poder use Double no lugar de Real já que possuem o mesmo efeito e podem assumir valores do tipo Data e Time, além dos valores numericos.

#Código
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:


Vinicius2k
   - 16 mar 2006

Colega,

A identação facilitaria o entendimento da lógica que você quer seguir.
Se os dois testes forem independentes, seria algo como:
#Código

{ 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:
#Código
{ 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).
#Código
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´
#Código
if <condicao> then
begin
<instrução>;
<instrução>;
end
else
<instrução>;
{ **** }
if <condicao> then
<instrução>
else
begin
<instrução>;
<instrução>;
end;



Ciro_cj
   - 16 mar 2006

TIVE UMA VERDADEIRA AULA CONSEGUI FAZER O QUE ESTAVA TENTANDO MUITO OBRIGADO PELA AJUDA DE VCS. CONTINUEM ASSIM AJUDANDO QUEM ESTA COMEÇANDO