• 0
مراد23

كيفية التفريق بين العدد وقوته في حقل ق ب نوعه حزمة string

سؤال

السلام عليكم ورحمة الله وبركاته

من لا يشكر الناس لا يشكر الله

سؤالي هو لديا حقل في ق ب أود أن أعرف كيفية ادراج فيه

حزمة حرفية على شكل عدد وقوته ومن ثما القدرة على قراءة قيمة هذا الحقل

والتفريق بين العدد وقوته وشكرا

والله الموفق والمستعان

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

  • 0

السلام عليكم...

 

ربما أسهل طريقة لتخزينه و معالجته في البرنامج هي استعمال رمز الأس ^ للفصل بين العدد و القوة (الأس). مثلاً:

1234^3

و عند قراءته في البرنامج يمكنك استخلاص الجزأين. في المثال التالي:

 

1. ضع على الـ Form ثلاث مكونات Label و Edit واحدة و Button واحد.

2. أضف اسم الوحدة Math إلى جملة uses.

3. تحت القسم implementation اكتب الدالة التالية:

// دالة لفصل العدد و الأس و إعادة نتيجة رفع العدد إلى الأسfunction GetPoweredNumber(ANumber: string; var ABase: Real; var AExponent: Real): Real;    // دالة داخلية للتأكد من أن النص الممرر يمثل عدداً حقيقياً    function IsFloat(AText: string): Boolean;    begin        try            StrToFloat(AText);            Result := True;        except            Result := False;        end;    end;var    ExpPos: Integer;    TempBase, TempExp: string;begin    Result := 0.0;    ABase := 0.0;    AExponent := 1.0;    ANumber := Trim(ANumber);    if ANumber = '' then        Result := 0    else begin        ExpPos := Pos('^', ANumber);        if ExpPos = 0 then begin            TempBase := ANumber;            if IsFloat(TempBase) then begin                ABase := StrToFloat(TempBase);                Result := ABase;            end;            end        else begin            TempBase := Copy(ANumber, 1, ExpPos - 1);            TempExp := Copy(ANumber, ExpPos + 1, Length(ANumber) - ExpPos);            if IsFloat(TempBase) then begin                ABase := StrToFloat(TempBase);                if IsFloat(TempExp) then begin                    AExponent := StrToFloat(TempExp);                    Result := Power(ABase, AExponent);                    end                else                    Result := ABase;                end            else if IsFloat(TempExp) then                AExponent := StrToFloat(TempExp);        end;    end;end;

4. انقر نقراً مزدوجاً على الزر و اكتب الكود التالي:

procedure TForm1.Button1Click(Sender: TObject);var    MyNumber: string;    ABase, AExp: Real;    AResult: Real;begin    MyNumber := Edit1.Text;    if MyNumber <> '' then begin        AResult := GetPoweredNumber(MyNumber, ABase, AExp);        Label1.Caption := FloatToStr(ABase);        Label2.Caption := FloatToStr(AExp);        Label3.Caption := FloatToStr(AResult);    end;end;

5. شغل البرنامج و اكتب عدداً و أسه (أو قوته) بحيث تفصل بينهما بالعلامة ^ دون فراغات، ثم انقر الزر. سيحتوي الـ Label1 على العدد، و الـ Label2 على الأس، و الـ Label3 على نتيجة رفع العدد إلى ذلك الأس.

 

* لاستخدامها مع قيم مخزنة في قاعدة بيانات بتلك الطريقة يمكنك استعمال السطر التالي بدل السطر MyNumber := Edit1.Text:

MyNumber := ADOTable1.FieldByName('MyField').AsString;

حيث ADOTable1 اسم مكون ADOTable (أو غيره مثل TTable أو TQuery... إلخ) و MyField اسم الحقل الذي به الأرقام في قاعدة البيانات.

 

* إضافة أخيرة: يمكنك طبعاً نقل الدالة الداخلية IsFloat لتكون دالة مستقلة من أجل استعمالها في أماكن أخرى.

 

نرجو الاستفادة و السلام.

تم تعديل بواسطه najy_zl
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .