Jump to content
Fórum Script Brasil
  • 0

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


somricardo

Question

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 to comment
Share on other sites

16 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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.

Edited by somricardo
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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.

Edited by somricardo
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...