هذا البرنامج يقوم بحل جملة معادلات ذات متغييرين اثنين ، الجملة من الشكل التالي :
نكتب المعادلتين في عنصر TMemo على شكل سطرين متتاليين طريقة المثال التالي:
الكود يحتوي بعض الشروط ليتمكن البرنامج من حل المعادلة وهناك حالات أخرى غير مذكورة لأن الهدف الفكرة يمكن اعتبارها كنقطة انطلاق لتصميم برنامج محترف. وهذا نص الكود مكتوب بلغة الباسكال.
العناصر المستعملة يمكن ملاحظتها بعد الأمر
- الكود:
A1.X +B1.Y=C1;
A2.X+B2.Y=C2
نكتب المعادلتين في عنصر TMemo على شكل سطرين متتاليين طريقة المثال التالي:
- الكود:
2*X+3*Y=7
5*X+4*Y=9
الكود يحتوي بعض الشروط ليتمكن البرنامج من حل المعادلة وهناك حالات أخرى غير مذكورة لأن الهدف الفكرة يمكن اعتبارها كنقطة انطلاق لتصميم برنامج محترف. وهذا نص الكود مكتوب بلغة الباسكال.
unit SysEq1U;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
Buttons;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Memo1: TMemo;
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
procedure ResSytEq(var Px, Py: double);
end;
var
Form1: TForm1;
T1, T2: string;
implementation
uses StrUtils;
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
x, y: double;
begin
ResSytEq(x, y);
Label1.Caption := Format('X=%f', [X]);
Label2.Caption := Format('Y=%f', [Y]);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
T1 := '1*X+1*Y=2';
T2 := '1*X+3*Y=4';
memo1.Hint := T1 + #13 + T2;
end;
procedure TForm1.ResSytEq(var Px, Py: double);
var
L1, L2: string;
A1, B1, A2, B2, C1, C2, det: double;
PA1, PB1, PA2, PB2, PE, PP: integer;
SA1, SB1, SA2, SB2, SC1, SC2: string;
begin
L1 := Memo1.Lines[0];
L2 := Memo1.Lines[1];
if (Length(L1) = 0) or (Length(L1) = 0) then
begin
Memo1.Clear;
memo1.Lines.add(T1);
memo1.Lines.add(T2);
exit;
end
else
begin
PX := 0;
PY := 0;
L1 := UpperCase(L1);
L2 := UpperCase(L2);
PA1 := Npos('*', L1, 1);
PB1 := Npos('*', L1, 2);
PP := NPos('+', L1, 1);
if PP < 0 then
PP := NPos('-', L1, 1);
PE := NPos('=', L1, 1);
///---------------------------
SA1 := Copy(L1, 0, PA1 - 1);
SB1 := Copy(L1, PP + 1, PB1 - PP - 1);
SC1 := Copy(L1, PE + 1, Length(L1));
PA2 := Npos('*', L2, 1);
PB2 := Npos('*', L2, 2);
PP := NPos('+', L2, 1);
if pp < 0 then
PP := NPos('-', L2, 1);
memo1.Hint := IntToStr(pp);
PE := NPos('=', L2, 1);
///---------------------------
SA2 := Copy(L2, 0, PA2 - 1);
SB2 := Copy(L2, PP + 1, PB2 - PP - 1);
SC2 := Copy(L2, PE + 1, Length(L2));
if TryStrToFloat(SA1, A1) then
if TryStrToFloat(SA2, A2) then
if TryStrToFloat(SB1, B1) then
if TryStrToFloat(SB2, B2) then
if TryStrToFloat(SC1, C1) then
if TryStrToFloat(SC2, C2) then
begin
det := (B2 * A1 - B1 * A2);
if det <> 0 then
begin
PX := (B2 * C1 - B1 * C2) / det;
PY := (A1 * C2 - A2 * C1) / det;
end;
end;
end;
Memo1.Clear;
Memo1.Clear;
Memo1.Lines.add(Format('%f*X+%f*Y=%f', [A1, B1, C1]));
Memo1.Lines.add(Format('%f*X+%f*Y=%f', [A2, B2, C2]));
end;
end.
العناصر المستعملة يمكن ملاحظتها بعد الأمر
- الكود:
Type