ورود

View Full Version : تحلیل یک مسئله در دلفی | دستور Repeat |



M.D.L.w.k
دوشنبه 06 فروردین 1386, 00:40 صبح
سلام

امیداورم حال دوستان خوب باشه :لبخندساده:
ان شا... که همین طور هم هست

در مورد یک مثال و مسئله برای فهم حلقه تکرار Repeat در دلفی 7

مثال :

برنامه ای که مجموع جملات سری زیر را تا رسیدن به اولین جمله ای با مقدار بیش از عددی
که از ورودی دریافت می شود , رو نمایش دهد .



1 1 2 3 5 8 13 ......

1 - پروژه جدیدی ایجاد کنید .دو عنصر Label با کپشن sum Is , Last Is به فرم اضافه کنید
2- دو عنصر Edit ایجاد کرده و خاصیت Text ان ها رو حذف کنید و جلوی دو عنصر Label قرار
دهید.
3 -دو عنصر Button به نام های Start , Stop ایجاد کنید .
4 - یک عنصر به نام ListBox به فرم اضافه کنید .
5 - دکمه Start را کلیک مضاعف کرده و دستورات زیر را تایپ کنید .

http://i10.tinypic.com/4cavzpt.jpg





procedure TForm1.Button1Click(Sender: TObject);
var
last,Help,Current,Next,Sum :integer;
begin
Current:=1;
Next:=1;
last:=strtoint(Edit2.Text);
Listbox1.Items.Add(inttostr(Current));
listbox1.Items.add(inttostr(Next));
sum:=2;
repeat
Help:=Current+Next;
listBox1.items.Add(inttostr(Help));
Sum:=Sum + Help;
Current:=next;
Next:=Help;
until Help > Last;
Edit1.Text:=inttostr(sum);
end;

end.

در این مسئله last,Help,Current,Next,Sum این متغیر ها از نوع صحیح تعریف شده اند

ابتدا 1 در Current قرار می گیره
بعد 1 در Next قرار می گیره
بعد توسط تابع Strtoint مقادیری که در Edit2.text هست در last قرار می گیره
بعد مقادیر Current , Next در لیست باکس قرار می گیرند
بعد 2 در Sum قرار می گیره ...

حالا شروع حلقه Repeat :

که Current , Next جمع شده و در Help قرار گرفته ...
و بعد Help به عنوان مقادیر تکرار شوند به لیست باکس اضافه شده
من دستور Sum :=Sum + Help رو متوجه نشدم که چرا ... منظورش چی بوده ؟
و دستورات بعدی رو هم همچین ...

در Until هم که مشخصه اگه مقدار اعداد حلقه از مقدار عددی که در Edit2.text

هست بزرگتر بشه و شرط برقرار بشه ...حلقه به پایان میرسه و مجموع Sum در Edit1.text قرار می گیره ...

دوستان اون چند دستور اخر که قرمز و بولد کردم رو اگه توضیح بدن ممنون می شم تا بشه
این مسئله رو دقیق درک کرد.( یه هفتس که موندم و نتونستم درک کنم :ناراحت: )

برای راحتی کار سورس رو هم پیوست همین نامه گذاشتم .

adaman
دوشنبه 06 فروردین 1386, 02:49 صبح
سری فیبوناچیه این نه ؟ یادش بخیر

دستور Sum :=Sum + Help یکی از خواسته های مسئله رو بهمون نشون می ده ، همون مجموع جملات سری رو
متغیر Help در هر بار تکرار با استفاده از دستور Help:=Current+Next یکایک جمله های سری رو تولید می کنه تا زمانی که حلقه تموم بشه.
متغیر Current جمله ی ما قبل جمله ی آخر سری رو در تکرار فعلی نشون می ده که همون میشه مقدار Help در تکرار قبلی ، که مقدارش در تکرار فعلی در متغیر Next قرار داره و با دستور Current:=next اینکار انجام میشه.
متغیر Next جمله ی آخر سری رو در تکرار فعلی نشون میده که جمله ی آخر فعلی همون Help هستش رو درش قرار می دیم ، همون دستور Next:=Help

در حقیقت در این سری جمله ی جدید (Help) از مجموع جمله ی آخر (Next) با جمله ماقبل آخر (Current) بدست می آد.
مثلا از مجموع 8 (جمله آخر فعلی) با 5 (جمله ی ماقبل) جمله ی جدید همون 13 بدست می آد. بهمین ترتیب جمله ی بعدی میشه 21 و ...

توضیح بیشتر در مورد سری فیبوناچی (http://www.senmerv.com/archives/000082.php)