PDA

View Full Version : مقاله: شبیه سازی حلقه For



pcdownload.bloghaa.com
جمعه 10 دی 1389, 01:40 صبح
سلام به همه.

برخی دستورات در یک زبان وجود دارد که در همه زبان ها یافت می شود.
مانند همین حلقه for. آیا بدون استفاده از حلقه for و حلقه های تعریف شده
دیگر میتوان کار حلقه for را انجام داد.
جواب این سوال مثبت است است.حلقه زیر را در نظر بگیرید.

For i = 1 To 4
Text1 = Text1 + "12"
Next i
به کد زیر توجه کنید دقیقا همین کار را انجام میدهد اما با آزادی بیشتر
در کد نویسی قسمت های مختلف حلقه:

GoTo hh:
Exit Sub
hh:
Text1 = Text1 + "12"
i = i + 1
If i <> 4 Then
GoTo hh:
End If

یا روال زیر هم از عهده این کار به خوبی بر می آید:


Private Sub tfor(i, n)
Text1 = Text1 + "12"
i = i + 1
If i <> n + 1 Then
Call tfor(i, n)
End If
End Sub

که در ان i مقداز اولیه و n مقدار نهایی است.

Felony
جمعه 10 دی 1389, 06:16 صبح
مورد اولی که از goto استفاده کردید توسط خود مایکروسافت منسوخ شده اعلام شده ، پس ازش استفاده نکنید و مورد دوم هم یک تابع بازگشتی هست که تا برقرار شدن یک شرط خاص خودش رو صدا میزنه ، توابع بازگشتی سرعت پائین تری نسبت به توابع معمول دارند که البته این مورد تو توابع بزرگ به چشم میاد ، پس هرجایی ازشون استفاده نکنید .

BlackPawn
شنبه 11 دی 1389, 10:45 صبح
تا goto هست میشه ازش استفاده کرد! و هیچ وقت هم منسوخ نمیشه ! حداقل برای همیشه با basic , vb , ... می مونه

pcdownload.bloghaa.com
یک شنبه 12 دی 1389, 10:26 صبح
در مورد سرعت کم کد های پست اول حق با دوست خوب من آقای تاجیک است.
البته کد های قرار داده شده در این تاپیک بیشتر جنبه آموزشی و حل مساله داره تا عملیاتی.
اما برای برنامه های عادی میشه ازشون استفاده کرد.
اما در مورد goto منسوخ بودن دستور زمانی برای ما مهم خواهد بود که بخواهیم یک زبان برنامه نویسی جدید طراحی کنیم.
و چون مثلا دستور goto منسوخ شده بهتره در زبان جدید این رو قرار ندیم.
اما در زبانی که این دستور وجود دارد استفاده از آن نه تنها هیچ اشکالی ندارد بلکه در برخی موارد ضروری است(مانند کنترل خطا)
یعنی در زبان هایی که از این دستور استفاده نشده جایگزینی برای آن ارایه کرده(مثل try در وی بی . نت).اما وقتی در یک زبان از آن استفاده شده جایگزینی
برای آن نیست.و استفاده نکردن از آن یعنی قرار دادن محدودیت برای خود.
--------------------------------------------------------------------------------------------------
یه مسا له
آیا امکان ساخت حلقه for توسط while و برعکس وجود داره؟
اگه کسی جواب نداد خودم جوابشو می زارم.

Felony
یک شنبه 12 دی 1389, 23:26 عصر
اما در مورد goto منسوخ بودن دستور زمانی برای ما مهم خواهد بود که بخواهیم یک زبان برنامه نویسی جدید طراحی کنیم.
و چون مثلا دستور goto منسوخ شده بهتره در زبان جدید این رو قرار ندیم.
اما در زبانی که این دستور وجود دارد استفاده از آن نه تنها هیچ اشکالی ندارد بلکه در برخی موارد ضروری است(مانند کنترل خطا)
یعنی در زبان هایی که از این دستور استفاده نشده جایگزینی برای آن ارایه کرده(مثل try در وی بی . نت).اما وقتی در یک زبان از آن استفاده شده جایگزینی
برای آن نیست.و استفاده نکردن از آن یعنی قرار دادن محدودیت برای خود.
خیر ، ربطی به این موضوع نداره ، دلیل وجود دستور goto برای Backward capability هست ، یعنی زبان برنامه نویسی از کدهای قدیمی که نوشته شده پشتیبانی میکنه و اجراشون میکنه ولی از طرف شرکت سازنده هشدار داده میشه که این تابع منسوخ شده هست و نباید در برنامه های جدید ازش استفاده بشه ، برای کنترل خطا هم راه های متعددی ارائه میشه ( try catch در ویژوال بیسیک ، Try Except در دلفی و ... ) ، یا مثال عمومی تر تابع WinExec که ازش برای اجرای یک برنامه استفاده میشه ولی مایکروسافت سالهاست اون رو منسوخ اعلام کرده و گفته به جاش از ShellExecute استفاده کنید ولی با این حال هنوز هم در ویندوز 7 شاهد وجود تابع منسوخ شده WinExec هستیم اون هم فقط و فقط به خاطر پشتیبانی از اجرای کدهای قدیمی ؛ ربطی هم به ساخت زبان برنامه نویسی نداره !

pcdownload.bloghaa.com
دوشنبه 13 دی 1389, 01:29 صبح
سلام
-------------------------------------------------------------------------------------
توضیحات شما هم در این زمینه درسته اما فعلا تا وقتی با وی بی 6 هستیم
دستور goto را لا اقل برای کنترل خطا هم که شده باید تحمل کنیم.
یه سوال: به نظر شما چه اشکالی در Backward capability هست که مایکروسافت اون رو منسوخ کرده
با این که آزادی بیشتری برای کد نویسی دارد و یک قابلیت برای زبان محسوب می شود.
-----------------------------------------------------------------------------------------------------------------
ساخت حلقه for توسط while :
این کار اصلا سخت نیست شاید همه از کد زیر آگاهی داشته باشند.
برای مثال حلقه پست اول را شبیه سازی میکنیم.


i = 1
Do While i <= 4
i = i + 1
Text1 = Text1 + "12"
Loop

اما هدف از طرح این مساله بیان کد زیر بود.
شاید به نظر خیلی ها ساخت حلقه while توسط حلقه for کاری غر ممکن باشد و حلقه while ضروری برای یک زبان و منحصر به فرد باشد اما اینطور نیست.
برای مثال حلقه while زیر را :


Do While Text1 <> "hello"
DoEvents
Text2 = "hi"
Loop

با for شبیه سازی میکنیم:


For i = 0 To 1
i = 0
Text2 = "hi"
If Text1 = "hello" Then
i = 1
End If
Next i
----------------------------------------
موفق باشید.