برمجة وبرامج


أهلا وسهلا بك زائرنا الكريم, أنت لم تقم بتسجيل الدخول بعد! يشرفنا أن تقوم بالدخول أو التسجيل إذا رغبت بالمشاركة في المنتدى

منتدى هواة البرامج » المنتدى التقني » نصوص برمجية بلغة الدلفي » حل جملة معادلات من الدرجة الأولى ذات متغيرين باستعمال ObjectPascal

حل جملة معادلات من الدرجة الأولى ذات متغيرين باستعمال ObjectPascal

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل  رسالة [صفحة 1 من اصل 1]

هذا البرنامج يقوم بحل جملة معادلات ذات متغييرين اثنين ، الجملة من الشكل التالي :
الكود:
A1.X +B1.Y=C1;
A2.X+B2.Y=C2
طريقة إدخال قيم العوامل :
نكتب المعادلتين في عنصر TMemo على شكل سطرين متتاليين طريقة المثال التالي:
الكود:
2*X+3*Y=7
5*X+4*Y=9
نقوم باستخراج المعاملات ثم نحسب المحدد وبالتالي نحسب قيم X و Y

الكود يحتوي بعض الشروط ليتمكن البرنامج من حل المعادلة وهناك حالات أخرى غير مذكورة لأن الهدف  الفكرة يمكن اعتبارها كنقطة انطلاق لتصميم برنامج محترف. وهذا نص الكود مكتوب بلغة الباسكال.

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

معاينة صفحة البيانات الشخصي للعضو

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة  رسالة [صفحة 1 من اصل 1]

صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى