به محفل ریاضی ایرانیان خوش آمدید! لطفا برای استفاده از تمامی امکانات عضو شوید
0 امتیاز
297 بازدید
در دانشگاه توسط Mohammad_beygi (4 امتیاز)
ویرایش شده توسط AmirHosein

سلام من برای یک برنامه کامپیوتری لازم دارم که برنامه قبل از این که وارد حلقه بشه تعداد تکرارش مشخص باشه! معادله به این شکل که x=x+a/x که a یک مقدار ثابتی هست و x از یک مقدار مشخصی شروع میشه . فرض می کنیم a=50 باشه و x از ۱۰ شروع بشه پرسش من این که این معادله چند بار باید تکرار بشه تا x از ۸۰ عبور کند؟ البته من دنباله معادلش هستم نه یک عدد .

توسط AmirHosein (19,718 امتیاز)
@Mohammad_beygi برچسبِ «حلقه‌ها» برای یک مبحث جبری است. بعلاوه اینطور نیست که هر چیزی یک فرمول جادویی داشته‌باشد. اگر پیرامون task -ِ اصلی‌ای که باید کدتان انجام دهد بنویسید آنگاه می‌توان راهنمایی‌تان کرد که چیزی که واقعا نیاز به یافتنش دارید چیست. اینطور نیست که به شما بگویند یک کد بنویسید که یک محاسبه‌ای را انجام بدهد ولی قبل از انجام دادنش حاصل را از یک راه دیگرا بداند، خب پس چرا اصلا قرار است کدتان بعدش خود محاسبهٔ اصلی را دیگر انجام بدهد؟

1 پاسخ

0 امتیاز
توسط AmirHosein (19,718 امتیاز)

احتمالا مشکل شما این است که می‌خواهید از حلقهٔ 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 فرض کرده‌ایم که اگر تعداد جمله‌ها از یک‌میلیون بگذرد دیگر شما علاقه‌ای ندارید که بدانید در جملهٔ چندم از مقدار پایانی عبور می‌کند. برای نمونه این می‌تواند به دلیل محدودیت زمانی باشد. مسلما نمی‌خواهید برنامه‌تان محاسبه‌ای انجام دهد که ساعت‌ها یا روزها طول می‌کشد، نه؟ بنابراین حتی اگر فرمول جادویی‌تان را پیدا کردید و مشخص شد که بعد از ۱۰ میلیون گام از مقدار پایانی می‌گذرد ولی انجام این ۱۰ میلیون گام یک سال زمان می‌برد، بهتر است حلقه اصلا شروع به کار نکند یا اینکه بعد از یک تعداد معقولی گام متوقف شود. پس این کران بالا در واقع با توجه به محدودیت‌های استفاده از رایانه می‌تواند تعیین شود.

این چرخ فلک که ما در او حیرانیم<br> فانوس خیال از او مثالی دانیم<br> خورشید چراغ دان و عالم فانوس<br> ما چون صوریم کاندرو حیرانیم
...