unit MainForm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls; type { TFormMain } TFormMain = class(TForm) ButtonVypocet: TButton; GroupBoxA: TGroupBox; GroupBoxB: TGroupBox; GroupBoxVysledek: TGroupBox; LabeledEditAx: TLabeledEdit; LabeledEditBx: TLabeledEdit; LabeledEditAy: TLabeledEdit; LabeledEditVysledekx: TLabeledEdit; LabeledEditBy: TLabeledEdit; LabeledEditVysledeky: TLabeledEdit; RadioGroupOperace: TRadioGroup; RadioGroupA: TRadioGroup; RadioGroupB: TRadioGroup; RadioGroupVysledek: TRadioGroup; procedure ButtonVypocetClick(Sender: TObject); procedure NactiCisla(sender:TObject); procedure Vypocitej(sender:TObject); procedure VypisVysledek(sender:TObject); procedure PrevodTvaru(Sender:TObject); function Float2Str(Value:Double):String; private ARe,AIm,BRe,BIm,VyslRe,VyslIm: Real; end; var FormMain: TFormMain; implementation uses unit_funkce; function TFormMain.Float2Str(Value:Double):String; begin result := FloatToStrF(Value,ffFixed,5,7); end; procedure TFormMain.NactiCisla(sender:TObject); var Ax,Ay,Bx,By:real; Aktivni:TLabeledEdit; begin {načtu data} try Aktivni:=LabeledEditAx; Ax:=StrToFloat(LabeledEditAx.Text); Aktivni:=LabeledEditAy; Ay:=StrToFloat(LabeledEditAy.Text); Aktivni:=LabeledEditBx; Bx:=StrToFloat(LabeledEditBx.Text); Aktivni:=LabeledEditBy; By:=StrToFloat(LabeledEditBy.Text); except ShowMessage('Zadej korektní číselnou hodnotu'); Aktivni.SetFocus; Aktivni.SelectAll; end; {převedu data do složkového tvaru} if RadioGroupA.ItemIndex = 0 then begin ARe:= Ax; AIm:= Ay; end else begin exp2slo(Ax,Ay,ARe,AIm); end; if RadioGroupB.ItemIndex = 0 then begin BRe:= Bx; BIm:= By; end else begin exp2slo(Bx,By,BRe,BIm); end; end; procedure TFormMain.Vypocitej(sender:TObject); begin NactiCisla(Sender); case RadioGroupOperace.ItemIndex of 0: begin // + VyslRe:=ARe+BRe; VyslIm:=AIm+BIm; end; 1: begin // - VyslRe:=ARe-BRe; VyslIm:=AIm-BIm; end; 2: begin // * VyslRe:=ARe*BRe - AIm*BIm; VyslIm:=AIm*BRe + ARe*BIm; end; 3: begin // / VyslRe:=( ARe*BRe + AIm*BIm ) / ( BRe*BRe + BIm*BIm ); VyslIm:=( AIm*BRe - ARe*BIm ) / ( BRe*BRe + BIm*BIm ); end; end; end; procedure TFormMain.VypisVysledek(sender:TObject); var abs,uhel:real; begin if RadioGroupVysledek.ItemIndex = 0 then begin LabeledEditVysledekx.Caption:= Float2Str(VyslRe); LabeledEditVysledeky.Caption:= Float2Str(VyslIm); end else begin slo2exp(VyslRe,VyslIm,abs,uhel); LabeledEditVysledekx.Caption:= Float2Str(abs); LabeledEditVysledeky.Caption:= Float2Str(uhel); end; end; procedure TFormMain.PrevodTvaru(Sender:TObject); var protejsekX,protejsekY,aktivni:TLabeledEdit; zadanoX,zadanoY,prevedenoX,prevedenoY:real; begin {spojeni prepinace tvaru a zobrazeni cisla} if Sender=RadioGroupA then begin protejsekX:=LabeledEditAx; protejsekY:=LabeledEditAy; end; if Sender=RadioGroupB then begin protejsekX:=LabeledEditBx; protejsekY:=LabeledEditBy; end; if Sender=RadioGroupVysledek then begin protejsekX:=LabeledEditVysledekx; protejsekY:=LabeledEditVysledeky; end; {převod} if (Sender as TRadioGroup).ItemIndex = 0 then begin protejsekX.EditLabel.Caption:='Re'; protejsekY.EditLabel.Caption:='Im'; end else begin protejsekX.EditLabel.Caption:='Abs'; protejsekY.EditLabel.Caption:='Uhel'; end; try aktivni:=protejsekX; zadanoX:=StrToFloat(protejsekX.Text); aktivni:=protejsekY; zadanoY:=StrToFloat(protejsekY.Text); case (Sender as TRadioGroup).ItemIndex of 0:exp2slo(zadanoX,zadanoY,prevedenoX,prevedenoY); 1:slo2exp(zadanoX,zadanoY,prevedenoX,prevedenoY); end; protejsekX.Text:= Float2Str(prevedenoX); protejsekY.Text:= Float2Str(prevedenoY); except aktivni.SetFocus; aktivni.SelectAll; end; end; procedure TFormMain.ButtonVypocetClick(Sender: TObject); begin Vypocitej(Sender); VypisVysledek(Sender); end; initialization {$I mainform.lrs} end.