Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) fórmulas no Delphi 7 alguém ajuda?


somricardo

Pergunta

sou professor de matemática e técnico em eletrônica, estou lendo muito aqui no fórum sobre o Delphi, mas de início gostaria da ajuda dos mais experts para fazer um simples programinha para meus alunos:

preciso resolver algumas fórmulas em delphi, da seguinte forma: o programa terá alguns Edits (com campo somente numérico), um Button e um Edit para apresentar o resultado.

Ex.1 o teorema de pitágoras:

Edit1 Edit2 Edit3 button1 Edit4

Edit 1 a 3 serão numéricos (positivos ou negativos se possível também poderiam ser raízes)

Button1 resolverá da seguinte forma: edit1(elevado ao quadrado) = edit2(elevado ao quadrado) + edit3(elevado ao quadrado)

Edit4 será a resposta (apresenta o resultado)

com isto creio que poderei aprimorar para outras fórmulas.

obrigado desde já.

Ricardo Silva

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0

lista de funções matematicas do delphi

http://www.efg2.com/Lab/Library/Delphi/Mat...ons/General.htm

http://www.ayton.id.au/gary/it/Delphi/D_maths.htm

exemplos:

uses Math;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // sqr(x) = x2;
  Edit4.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
end;

outros exemplos

http://delphi.about.com/library/rtl/blrtlUmath.htm

http://www.efg2.com/Lab/Library/Delphi/Mat...ons/Parsers.htm

http://www.delphicorner.f9.co.uk/articles/op7.htm

http://www.shokhirev.com/nikolai/programs/samplecode.html

e muitos outros na net .... pesquise pela palavra Math Delphi

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

obrigado amigo, fiz uma pequena mudança no code que me passou e deu certo, ficando assim:

uses Math;

procedure TForm1.Button1Click(Sender: TObject);

begin

// sqr(x) = x2;

// sqrt(x) = raiz quadrada de x;

Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));

end;

Link para o comentário
Compartilhar em outros sites

  • 0

na verdade não é bem uma calculadora que estou tentando desenvolver, mas um programa para cada tipo de cálculo, o primeiro exemplo é um pequeno programa que resolve o teorema de pitágoras, basta inserir os valores. pode ver abaixo como está ficando... (faltam alguns complementos mas está indo, não sou programador, apenas professor, por isso estou recorrendo tanto ao fórum...)

link

Teorema

ps os campos "catetos" deviam ser somente numéricos, mas não achei como fazer ainda, e as caixas abaixo de cada cateto, devem ser marcadas caso o valor que estejam inserindo no campo cateto acima, seja um valor dentro de uma raiz, (ex. quero escrever raíz de 10, então escrevo apenas o 10 e marco a caixa abaixo) mas no caso da caixinha aí deve ter uma alteração para na fórmula ele não calcular sqr de X (quando a caixa estiver marcada apenas)

Link para o comentário
Compartilhar em outros sites

  • 0
os campos "catetos" deviam ser somente numéricos, mas não achei como fazer ainda
o TEdit só aceitará números de 0 a 9 e o BackSpace (Chr(8)). Se você quiser a vírgula também, coloque dentro do colchete DecimalSeparator

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

   if not (Key in['0'..'9',Chr(8)]) then Key:= #0;

end;

mas no caso da caixinha aí deve ter uma alteração para na fórmula ele não calcular sqr de X (quando a caixa estiver marcada apenas)

basta fazer um if antes do calculo ( se voce postar o código fica mais facil te ajudar )

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

ok, obrigado pelas informações, abaixo segue o código como está até o momento:

unit pitagoras;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Label3: TLabel;
    Edit3: TEdit;
    Image1: TImage;
    Edit4: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Image2: TImage;
    Label6: TLabel;
    procedure Button1Click(Sender: TObject);
      private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Math;



procedure TForm1.Button1Click(Sender: TObject);
begin
  // sqr(x) = x2;
  // sqrt(x) = raiz quadrada de x;
  Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
  Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));
end;

end.

veja que coloquei 2 linhas, uma com o Edit3.text e outra com o Edit4.text, onde uma mostra o resultado sem calcular a raiz, (para o caso de raízes não exatas) e o segundo mostra o valor da raiz, com decimal ou exata quando for o caso.

no caso dos campos de catetos gostaria sim que ficassem apenas números com possibilidade de uso da vírgula para separador de decimais (creio que 2 casas decimais é suficiente ou pode deixar infinitas também)

as caixas de raízes, podem ser marcadas apenas uma (quando apenas um lado tiver dentro de raiz) ou ambas, neste caso creio que a edição terá mais complexidade sendo que posso marcar apenas a primeira, apenas a segunda ou ambas.

Link para o comentário
Compartilhar em outros sites

  • 0

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if not (Key in['0'..'9',',',Chr(8)]) then Key:= #0;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
   if not (Key in['0'..'9',',',Chr(8)]) then Key:= #0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // sqr(x) = x2;
  // sqrt(x) = raiz quadrada de x;

  Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
  Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));

end;

end.

voce não vai precisar as caixas de matrizes ... basta digitar no campo do cateto a raiz ou um numero inteiro

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

amigo não deu certo, não entendi bem o código como me passou mas não funcionou, vou tentar explicar melhor o que eu necessito:

em alguns calculos esses valores de catetos podem vir ou não dentro de raízes, por isso eu preciso da caixinha pra marcar se o número inserido acima, está ou não em uma raiz, se estiver o cálculo será feito sem o sqr (já que um número dentro da raíz elevado ao quadrado o resultado é ele mesmo, ex. Raiz de 3 elevado a 2 = ao próprio 3) então neste caso eu não preciso calcular nem raiz nem potencia, mas caso o número digitado na caixa não esteja em uma raiz, aí eu preciso que calcule o sqr. Por isso preciso que a caixa seja uma opção de marcar ou não.

como eu posso fazer para:

unit pitagoras;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Label3: TLabel;
    Edit3: TEdit;
    Image1: TImage;
    Edit4: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Image2: TImage;
    Label6: TLabel;
    procedure Button1Click(Sender: TObject);
      private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Math;

//AQUI eu preciso informar de alguma forma que SE a caixa 1 estiver marcada, as linhas abaixo (Edit3.Text... e Edit4.Text...) não terão o primeiro SQR, caso eu marque a caixa 2 as mesmas linhas (Edit3.Text... e Edit4.Text...)  não terão em sua fórmula o segundo SQR, caso nenhuma caixa esteja marcada o comando seguirá como já está escrito. (obs. o SQRT continua, a alteração ocorre somente com os SQR que somem se a caixa estiver marcada, o primeiro para a primeira caixa e o segundo para a segunda caixa.

procedure TForm1.Button1Click(Sender: TObject);
begin
  // sqr(x) = x2;
  // sqrt(x) = raiz quadrada de x;
  Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
  Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));
end;

end.

Editado por somricardo
Link para o comentário
Compartilhar em outros sites

  • 0

ok .. faça as mudanças necessárias nesse código

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);  //  evento OnKeyPress do Edit1
begin
   //  fazer o edit1 aceitar somente numeros e virgula  
   if not (Key in['0'..'9',',',Chr(8)]) then Key:= #0;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);   //  evento OnKeyPress do Edit2
begin
   //  fazer o edit2 aceitar somente numeros e virgula  
   if not (Key in['0'..'9',',',Chr(8)]) then Key:= #0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // sqr(x) = x2;
  // sqrt(x) = raiz quadrada de x;

  // caixa1
  if CheckBox1.Checked = true then
     begin  // marcado
        Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
        Edit4.Text := floattostr(sqr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));
     end
  else
     begin  // desmarcado
        Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
        Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));
     end;

  // caixa2
  if CheckBox2.Checked = true then  
     begin  // marcado
        Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
        Edit4.Text := floattostr(sqr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));
     end
  else
     begin  // desmarcado
        Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
        Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));
     end;
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

hoje tive tempo de testar e fiz as alterações que achei que era pra ser feita, veja como ficou o código agora:

ps. marcar ou desmarcar a caixa 1 não funcionou, a caixa 2 ficou 100%, pode me ajudar a ver onde errei?

procedure TForm1.Button1Click(Sender: TObject);
begin
  // sqr(x) = x2;
  // sqrt(x) = raiz quadrada de x;
  // caixa1

  if CheckBox1.Checked = true then
     begin  // marcado
        Edit3.Text := floattostr((strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
        Edit4.Text := floattostr(sqrt(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
     end
  else
     begin  // desmarcado
        Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
        Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text))) + sqr(strtofloat(Edit2.text)));
     end;
       // caixa2
  if CheckBox2.Checked = true then
     begin  // marcado
        Edit3.Text := floattostr((sqr(strtofloat(Edit1.text))) + (strtofloat(Edit2.text)));
        Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + (strtofloat(Edit2.text))));
     end
  else
     begin  // desmarcado
        Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
        Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));
     end;
  end;
end.

Link para o comentário
Compartilhar em outros sites

  • 0
ps. marcar ou desmarcar a caixa 1 não funcionou, a caixa 2 ficou 100%, pode me ajudar a ver onde errei?

isso ocorre porque:

voce está usando o mesmo edit3 e edit4 para as 2 caixas ... exemplo:

se voce marcar a caixa1 e deixar a caixa2 desmarcada, o primeiro calculo será

Edit3.Text := floattostr((strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
Edit4.Text := floattostr(sqrt(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
entretanto como a caixa2 esta desmarcada, o segundo calculo será
Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));
como pode ver os valores serão sobrepostos .... para ter uma idéia mais precisa, coloque mais 2 edits e faça essa mudança no código, para poder entender melhor.
procedure TForm1.Button1Click(Sender: TObject);
begin
  // sqr(x) = x2;
  // sqrt(x) = raiz quadrada de x;
  // caixa1

  if CheckBox1.Checked = true then
     begin  // marcado
        Edit3.Text := floattostr((strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
        Edit4.Text := floattostr(sqrt(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
     end
  else
     begin  // desmarcado
        Edit3.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
        Edit4.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text))) + sqr(strtofloat(Edit2.text)));
     end;
       // caixa2
  if CheckBox2.Checked = true then
     begin  // marcado
        Edit5.Text := floattostr((sqr(strtofloat(Edit1.text))) + (strtofloat(Edit2.text)));
        Edit6.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + (strtofloat(Edit2.text))));
     end
  else
     begin  // desmarcado
        Edit5.Text := floattostr(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text)));
        Edit6.Text := floattostr(sqrt(sqr(strtofloat(Edit1.text)) + sqr(strtofloat(Edit2.text))));
     end;
  end;
end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

amigo com a sua resposta acima já entendi sem mesmo fazer o teste, no caso a primeira caixa faz a função só que a segunda (desmarcada) desfaz a função da primeira, e antes de ver sua resposta percebi que se eu inverter a ordem entre caixa 1 e caixa 2, o erro também inverte, a caixa 2 (acima) não faz nada porque a caixa 1 (que ficou abaixo) é quem faz a parte final e desfaz o que a primeira fez, neste caso para não haver esta coisa existe alguma forma? tipo assim:

o code começa com caixa 1:

se marcada

floattostr(strtofloat(Edit1.text))

floattostr(strtofloat(Edit1.text))

se desmarcada

floattostr(sqr(strtofloat(Edit1.text))

floattostr(sqr(strtofloat(Edit1.text))

depois caixa 2

se marcada

floattostr(strtofloat(Edit2.text))

floattostr(strtofloat(Edit2.text))

se desmarcada

floattostr(sqr(strtofloat(Edit2.text))

floattostr(sqr(strtofloat(Edit2.text))

finalmente faria a junção da primeira com a segunda observando a opção escolhida na caixa 1 (se marcada ou não) e na caixa 2 (se marcada ou não)

tipo uma soma entre a caixa1 + a caixa2...

não sei nada sobre a escrita nos códigos mas creio que deva se entender a ideia...

ps. ao Jhonas muito obrigado pela ajuda e pela paciência, sei que ajudar um totalmente leigo em programação não é algo facil, mas garanto que tentarei aprender rápido rsrsrs.

Editado por somricardo
Link para o comentário
Compartilhar em outros sites

  • 0

amigo, já que voce é leigo em programação, vou te passar algo que será mais util é pratico para voce ( exemplos prontos ) vai ficar mais facil o seu entendimento

nesse exemplo voce vai encontrar:

calculo de Bhaskara, Pitagoras, Area, Determinante, Regra 3, Tabuada, Relacao de Euler, Raiz,

Analise Combinatoria, Divizor Comun, Primos, Fibonacci, logaritmos, Potencia e Fatorial;

http://www.planetadelphi.com.br/delphi/exe...es/00004881.zip

Estude com calma os código e verá que não é um bicho de 7 cabeças ... rs

OBS: caso dê erro de Form2 não encontrado, basta retirar a Unit2 da Uses do projeto, ou pode ainda criar um form vazio com o nome de Form2 ( Unit2 )

exemplo: basta apagar da untPrincipal

uses Unit2, UntBhaskara, UntPitagoras, UntArea, UntDeterminate,

UntRegradetres, UntTabuada, UntRealacaodeEuler, UntRaiz,

UntAnaliseCombinatoria, UntDivizorComun, UntPrimos, UntFibonacci,

Untlogaritmos, UntPotencia, UntFatorial;

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...