احتمالا مشکل شما این است که میخواهید از حلقهٔ for استفاده کنید و برای همین میخواهید تعداد گامهایی که حلقه تکرار شود را میخواهید بدانید تا در بازهٔ for قرار دهید. اما فراموش کردهاید که ساختار حلقهای دیگری هم داریم، while. پرسش اصلی را ننوشتهاید پس خودمان اینجا حدس میزنیم که تمرینی که گرفته بودید و متنش را ننوشتهاید چه بودهاست.
هدف: کاربر یک مقدار برای a و دو عدد برای شروع x_start و پایان x_end وارد میکند. سپس برنامه باید جملههای دنبالهٔ $x_n=x_{n-1}+\frac{a}{x_{n-1}}$ را با فرضِ $x_0=\text{x_start}$ بر روی خروجی (ترمینال) به ترتیب نمایش دهد تا از x_end بگذرد، در این هنگام برنامه متوقف شود.
زبان برنامهنویسیتان را هم مشخص نکردهاید لذا اینجا با پایتون برایتان مینویسیم. روش نخست، بکارگیری while.
# receiving the input values for the parameters of the task.
a = int(input("insert the value for a:"))
x_start = int(input("insert the starting value:"))
x_end = int(input("insert the ending value:"))
# initializing the value of x to x_start
x = x_start
# asking a while loop to print x, then update it and then coming back and check if new x has passed x_end or not yet. If not, continue the two actios.
while x < x_end:
print( x )
x = x + a / x
# end of the program
اکنون اگر میخواهید شمارهٔ جملهها را هم ببینید، کافیست یک شمارنده counter نیز بیفزائيد.
a = int(input("insert the value for a:"))
x_start = int(input("insert the starting value:"))
x_end = int(input("insert the ending value:"))
x = x_start
# initializing a counter
i = 1
while x < x_end:
print( f"element {i} is {x}." )
x = x + a / x
i += 1 # adding one unit to i
# end of the program
روش دوم استفاده از for با یک کران بالای بزرگ برای شمارندهاش و استفاده از یک شرط if و دستورِ break.
a = int(input("insert the value for a:"))
x_start = int(input("insert the starting value:"))
x_end = int(input("insert the ending value:"))
x = x_start
for i in range(1000000):
print( f"element {i+1} is {x}." )
x = x + a / x
# checking if x is passing x_end, if so breaking the for-loop to stop it.
if x > x_end:
break
# end of the program
علت گذاشتن بعلاوهٔ یک در خط print در بالا این است که پایتون به صورت خودکار اندیسهایش را از صفر شروع میکند پس range(1000000) از صفر شروع و به ۹۹۹۹۹۹ پایان مییابد (اگر دستور break زودتر اجرا نشود). اگر میخواهید از ۱ شروع کند و بعلاوه را بعدا ننویسید باید در بازهٔ for از range(1,1000001) استفاده کنید.
در این روش استفاده از for فرض کردهایم که اگر تعداد جملهها از یکمیلیون بگذرد دیگر شما علاقهای ندارید که بدانید در جملهٔ چندم از مقدار پایانی عبور میکند. برای نمونه این میتواند به دلیل محدودیت زمانی باشد. مسلما نمیخواهید برنامهتان محاسبهای انجام دهد که ساعتها یا روزها طول میکشد، نه؟ بنابراین حتی اگر فرمول جادوییتان را پیدا کردید و مشخص شد که بعد از ۱۰ میلیون گام از مقدار پایانی میگذرد ولی انجام این ۱۰ میلیون گام یک سال زمان میبرد، بهتر است حلقه اصلا شروع به کار نکند یا اینکه بعد از یک تعداد معقولی گام متوقف شود. پس این کران بالا در واقع با توجه به محدودیتهای استفاده از رایانه میتواند تعیین شود.