![]() |
|
Anagram - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : Anagram (/showthread.php?tid=1613) |
Anagram - Goblin - 05-02-2010 [COLOR="RoyalBlue"]السلام عليكم و رحمة الله و بركاته كنت اعمل علي برنامج "لاعادة ترتيب الحروف الغير مرتبة" من خلال قائمة "Wordlist". مثال: - لدي هذه الحروف "4ibADealprh", ما حاول عمله هو اعادة ترتيبها لتصبح "Delphi4Arab". - المشكلة هي بطء البرنامج لتنفيذ هذه العملية. هذا هو ال Source:[/COLOR] كود : Function CheckList(CheckWord : String):Boolean;
var F : TextFile;
Temp : String;
begin
Result := False;
AssignFile(F,'wordlist.txt');
Reset(F);
While Not Eof(F) do
begin
Readln(F,Temp);
If Temp = CheckWord then
begin
Result := True;
Break;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var FRand, MRand, RandedWord : String;
RandIndex : Integer;
begin
FRand := Edit1.Text;
While CheckList(RandedWord) = False do
begin
MRand := FRand;
RandedWord := '';
Repeat
Application.ProcessMessages;
[COLOR="Red"]Randomize;
RandIndex := RandomRange(1,Length(MRand));
RandedWord := RandedWord + MRand[RandIndex];
Delete(MRand,RandIndex,1);[/COLOR]
Until MRand = '';
end;
Edit2.Text := RandedWord;
end;
end.يبدو ان المشكلة فى المبتدأ و الفكرة, هل من بدائل ؟ Anagram - TF6M - 05-02-2010 و عليكم السلام و رحمة الله و بركاته 1- لمذا إستعملت أصلا CheckList ؟؟ ماذا لو كان الملف يحتوي على أكثر من سطر أو حروف متباعدة أو غير نصي . 2- كتبت CheckList داخل While إظافة إلى Repeat و هي بدورها Loop ؟؟ سيتجمد التنفيذ حتى لو إستدعينا ProcessMessages . 3- فكرة البرنامج "إعادة ترتيب الحروف" .... بالنسبة لأي مرجع ؟ . Anagram - Goblin - 05-02-2010 [COLOR="RoyalBlue"] 1- استخدمت "Check list" حتي اتاكد ان الكلمة التي تم توليدها موجودة في القاموس . 2- كتب "Check list" داخل While حتي يبدأ من جديد فى حالة عدم وجود الكلمة في القاموس . 3- مثال: لديك كلمة "pnehoix", يقوم البرنامج يبديل اماكن الحروف (من خلال Repeat Loop) حتي تصل الي كلمة موجودة في القاموس (التي هي "phoenix"). القاموس فى المرفقات.[/COLOR] Anagram - TF6M - 05-02-2010 إستخدم الـ [COLOR="Red"]THreads بديل قوي و فعال ![/COLOR] Anagram - kachwahed - 05-02-2010 وعليكم السلام ورحمة الله وبركاته مرحبا بالـ Goblin أين كنت ؟- عطل عرض المكونات ثم فعّله عند النهاية (BeginUpdate/EndUpdate) - إذا كنت تستخدم نسخة دلفي 2006 فما فوق، إجعل الدوال التي تناديها باستمرار (Check list) بتوجيه inline - ربما يمكن بطريقة ما تحميل قائمة الكلمات إلى الذاكرة (TStringList كبديل) لأجل زيادة سرعة الفحص بالتوفيق. Anagram - Goblin - 05-02-2010 kachwahed كتب :مرحبا بالـ Goblin أين كنتاعذرني اخي العزيز, منشغل بالدراسة. kachwahed كتب :- عطل عرض المكونات ثم فعّله عند النهاية (BeginUpdate/EndUpdate)[COLOR="RoyalBlue"] - كلام جميل, لكن حتي بهذه التعديلات, لايزال البرنامج - فى اغلب الاحيان - غير فعال. - بينما كنت ابحث فى "Google" وجد برنامج مكتوب بال"Python" يؤدي العلمية فى اقل من ثانية ! لذلك اعتقد ان هناك طريقة اخري لصياغة البرنامج, طريقة افضل و منهجية اسرع, بعيدة عن التكرار. هذا هو ال"Source" الذي كنت اتكلم عنه:[/COLOR] PHP كود : MIN_WORD_SIZE = 4 # min size of a word in the outputAnagram - TF6M - 05-02-2010 يعني و كأنك تجاوزت الحل المقترح (THread) و ذهبت بعيدا ؟؟ (بحث غوغل) شوف لما نستعمل Thread بسيط .. حلت المشكلة تماما . ![]() لكن : طريقتك بها بعض الأخطاء مثل أنه يبحث عن التعديل حتى و إن كانت صحيحة ؟؟ و لا يعدل بطريقة مدروسة بل عشوائية ؟ لهذا النتيجة تأتي بعد طول إنتظار !!! . بالتوفيق ,, Anagram - Goblin - 05-02-2010 TF6M كتب :لكن : احسنت اخي tf6m هذا ما اعنيه, اذا ماذا افعل لمعالجة هذا ؟ Anagram - TF6M - 05-02-2010 أنا فقط قمت بوضع إقتراح (توجيه) ... 1- حللنا مشكل التوقف (البرنامج يتجمد) بإستخدام THread يعالج تعليمات البرنامج . 2- الأن يجب عليك وضع خوارزمية بحث & مقارنة سريعة و مختصرة . بالتوفيق ,, Anagram - Goblin - 05-02-2010 TF6M كتب :2- الأن يجب عليك وضع خوارزمية بحث & مقارنة سريعة و مختصرة . :rtfm3: [COLOR="RoyalBlue"]حسنا, لدي بعض الافكار اود تطبيقها:- 1- ان يتم تحميل القاموس فى البرنامج "دفعة واحدة" حتي اتجنب تكرار فتح القاموس لاجراء المقارنة. 2- ان ابتعد عن منهجية ال"Random" و ابدأ فى منهجية اخري تبتعد عن تكرار الناتج. 3- ؟؟؟؟؟؟ ستسعدي اقتراحتكم.[/COLOR] |