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

برمجة وبرامج


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

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

اذهب الى الأسفل  رسالة [صفحة 1 من اصل 1]

Couade

Couade

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

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]

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