المشاركات : 198
المواضيع 17
:
: 24
الإنتساب : Nov 2009
19-08-2010, 01:46 PM
(آخر تعديل لهذه المشاركة: 19-08-2010, 01:46 PM بواسطة khiro.alg.)
[COLOR="DarkOrange"]السلام عليكم
أهلا إخواني - رمضان كريم
قبل فترة رأيت حلقة for في السي++ - حيث يمكنك زيدة المتغير في كل مرة بعدد معين
مثلا إن كان التنقل بعدد واحد نكتب ++i . وإن أدرنا أكثر نغيرها مثلا لـ i+2
جربت أنا تحويلها للدلفي - وعد عدة محاولات نجحت في ذلك - لكني الآن نسيت الطريقة 
لذا أرجـوا لمن عنده الطريقة أن يفيدنا بها وجزاه الله كل خير
------------
للفهم أكثر الطريقة التي جربتها أنا تشبه كالتالي
كود :
for i:=0 to 10 (i+2) do
لكن تلك خاطئة - وأيضا ما أقصده ليست طريقة الزيادة داخل أوامر الحلقة - بل في رأس الحلقة.
سلامي لكم...[/COLOR]
ومن يتهيب صعود الجبال يعش أبد الدهر بين التلال و الحفر
المشاركات : 2,293
المواضيع 157
:
: 81
الإنتساب : Dec 2008
وعليكم السلام ورحمة الله
PHP كود :
var
I: Integer;
begin
while I Condition do begin
Whatever...
Inc(I, 2);
end;
//Or
repeat
Whatever...
Inc(I, 2);
until
I Condition;
end;
ما الذي تود فعله؟
المشاركات : 9
المواضيع 1
:
: 0
الإنتساب : Aug 2010
19-08-2010, 07:12 PM
(آخر تعديل لهذه المشاركة: 19-08-2010, 07:14 PM بواسطة husseint.)
السلام عليكم
على حسب ما أعرف :
الحلقة for في السي++ هي مجرد عداد Counter مثل
PHP كود :
for (int icounter = x ; counter <= 10 ; counter++ ) {statement }
أي أنه يأخذ قيم من نوع Integer عدد صحيح ولكن المسألة مختلفة في دلفي فالحلقة for تقوم باللإنتقال
ضمن قيم من نوع ترتيبي وليس شرطاً أن تكون عدداً صحيحاً
PHP كود :
type
TDay = (Sun, Mon, Tues, Wed, thurs, Fri, Sat );
var
Week: array [Sun..Sat]of String;
Day: TDay;
begin
{ TODO -oUser -cConsole Main : Insert code here }
for Day:= Sun to Sat do
ReadLn(Week[Day]);
for Day:= Sun to Sat do
WriteLn(Week[Day]);
end.
لم نستخدم أعداداً أبداً لأن المسألة تتعلق بنمط ترتيبي وجب أن يكون متتاليا حصراً , **** التصحيح في حال وجود خطأ
المشاركات : 140
المواضيع 36
:
: 0
الإنتساب : Aug 2009
السلام عليكم و رحمة الله و بركاته
هذه حلقة for تقوم بكتابة كل الأعداد الزوجية من 0 حتى 100 في لغة الباسكال و يمكن ان تستفيد منها في الدلفي فهي مثلها تماما لاختلاف
readln و writeln
PHP كود :
var
c : integer;
A: integer;
begin
A:=0;
for c := 0 to 50 do
begin
writeln (A);
A:=A+2;
end;
end.
المشاركات : 198
المواضيع 17
:
: 24
الإنتساب : Nov 2009
ليس ذلك ما قصدته إخواني
مثلا الطريقة التي تحدثت عنها تكتب هكذا في VB
كود :
for i=1 to 10 stup2
...........
.......
في سي++ هكذا مثلا
كود :
for (int i=1;i<10;i+2 ){.........}
----------
أما في الدلفي فأقصد الأمر أن يكون في رأس الحلقة وليس مع كتلة الأوامر
ومن يتهيب صعود الجبال يعش أبد الدهر بين التلال و الحفر
المشاركات : 563
المواضيع 28
:
: 0
الإنتساب : Dec 2008
19-08-2010, 11:43 PM
(آخر تعديل لهذه المشاركة: 20-08-2010, 10:28 PM بواسطة TF6M.)
ألم تقنعك دلفي ؟
:
1- كل لغة برمجة لها Code Syntax يميزها و أن تشابهت .
2- يمكننا أن نفعل نفس الشيئ كالدالة iiF , تجد الشرح & التطبيق في المجلة رقم 2 لـ D4A
3- مثال :
PHP كود :
Procedure uFor(i:Integer;Const Max:Integer;Step:Byte;MyJob:Pointer);
Begin
If MyJob = Nil Then Exit;
i:= 0;
repeat
Asm
MOV EAX,MyJob
CALL EAX
End;
Inc(i, Step);
Sleep(100);
until i >= max;
End;
طريقة الإستدعاء :
PHP كود :
Procedure Job;
Begin
//do something
End;
//procedure TForm1.btnClick(Sender: TObject);
Var
i:Integer;
begin
uFor(i,10,2,@Job);
end;
بالتوفيق ,,
المشاركات : 378
المواضيع 44
:
: 6
الإنتساب : Feb 2008
السلام عليكم
اخى TF6M بما انك ذكرت الاسمبلى احببت ان انجز عدد معين من الحلقات كل حلقة ترسل MSG مثلا
لاكن بشرط عدم استعمال لا IF ولا THEN ...
... تقريبا وصلت للحل لاكن للاسف بعد الخروج من الحلقة يحدث مشكل يتسبب فى غلق البرنامج
لم اجد له حل سوى حل عشوائى pop ds
PHP كود :
var
S: string;
begin
S := 'D4A';
try
asm
mov eax, 0
mov ebx, 3 // 1..3 (Loop = 3)
@Localproc:
cmp ebx, eax
jl @Skipcall
call @_Localproc
@_Localproc:
mov eax, S
call ShowMessage
mov eax,1
dec ebx
jmp @Localproc
@Skipcall:
pop ds -----------> ???? :)
end;
except
Exit;
end;
end;
الذى لديه طريقة ... يرفقهة

الاسمبلى صعبة لكنها ممتعة .
المشاركات : 563
المواضيع 28
:
: 0
الإنتساب : Dec 2008
و عليكم السلام و رحمة الله و بركاته
1- "لاكن بشرط عدم استعمال لا IF ولا THEN ... "
- يمكن أيضا إستخدام توجيهات المترجم {..... Define$}ا
2- "لم اجد له حل سوى حل عشوائى pop ds"
- ما الغرض من إسترجاع قيمة DS ؟
3- عند إستدعاء دالة & إجراء من الدي يظمن عدم تغير المسجلات ؟
بالطبع ستكون في حالة عمل , لذا وجب علينا حفظ القيم الإبتدائية و إسترجاعها
عند المقارنة :
PHP كود :
var
S: string;
begin
S := 'D4A';
try
Asm
PushAd
Xor al,al
@Loop:Cmp al,2//nLop
JE @ExitpRoc
PushAd
Push 0
Push 0
Push S
Push 0
Call MessageBoxA
PopAd
Inc al
Jmp @Loop
@ExitpRoc:PopAd
End;
except
Exit;
end;
end;
بالتوفيق,,
المشاركات : 378
المواضيع 44
:
: 6
الإنتساب : Feb 2008
اوووو اخى TF6M
رائعة ... ممتازة .
كود :
ما الغرض من إسترجاع قيمة DS ؟
هو فقط من كان يمنع البرنامج من غلق نفسه بعد حدوث المشكل
كود :
- عند إستدعاء دالة & إجراء من الدي يظمن عدم تغير المسجلات ؟
[COLOR="Red"]PushAd
PopAd[/COLOR]
... نعم هذا هو اهم شىء .
بارك الله فيك اخى TF6M ساراجع طريقتك جيدا وان لم افهم شىء ساراسلك
بالتوفيق .
المشاركات : 240
المواضيع 16
:
: 0
الإنتساب : Dec 2008
20-08-2010, 09:23 PM
(آخر تعديل لهذه المشاركة: 20-08-2010, 10:10 PM بواسطة TF6M.)
MessageBoxA هي API تحتاج PChar ليس Delphi's internal string
PHP كود :
var
S,_S: String;
begin
{*
MessageBoxA MessageBoxA is an API function
it uses PChar and not Delphi's internal string ...!
*}
S := 'D4A';
_s:='Test';
try
Asm
PushAd
Xor al,al
@Loop:Cmp al,2//nLop
JE @ExitpRoc
PushAd
//MessageBoxA (0,PAnsiChar(_s),PAnsiChar(s),0);
push dword ptr 0
push dword ptr _s // MessageBox Title
push dword ptr s // MessageBox Text
push dword ptr 0
Call MessageBoxA
PopAd
Inc al
Jmp @Loop
@ExitpRoc:PopAd
End;
except
Exit;
end;
الرد هو اظافة لكود اخي tf6m