سلام و درود
الگوریتمی میخواستم برای شبیه سازی جذر با استفاده از دوعملگر جمع و تفریق بدون تقسیم و سایر چیز ها با هر زبانی که باشه مهم الگوریتمش هست ممنون اگر کمکی کنید
سلام و درود
الگوریتمی میخواستم برای شبیه سازی جذر با استفاده از دوعملگر جمع و تفریق بدون تقسیم و سایر چیز ها با هر زبانی که باشه مهم الگوریتمش هست ممنون اگر کمکی کنید
این روش جذر بابلی است، البته بدون اعشار و بدون عملگر تقسیم.
فرض می کنیم که ورودی متغیر n و خروجی (جذر n) متغیر x باشد :
1) در متغیر x مقدار 1 را قرار می دهیم.
2) در متغیر های m و a مقدار 0 را قرار می دهیم.
3) اگر تفریق n - a کوچکتر از x باشد به مرحله 7 می رویم.
4) مقدار a را x واحد افزایش می دهیم.
5) مقدار m را یک واحد افزایش می دهیم.
6) به مرحله 3 باز می گردیم.
مراحل 2 الی 6 برای این بودند که مقدار n را بر x تقسیم کرده و حاصل را در
m بدست بیاوریم.
7) اگر x برابر m + 1 باشد، در متغیر x مقدار m را قرار داده و به مرحله 17 می رویم.
8) اگر x برابر m باشد یا x برابر m - 1 باشد، به مرحله 17 می رویم.
مراحل 7 و 8 برای این هستند که اگر به جذر دقیق x رسیدیم یا اختلاف x و m
آنقدر کم است (کمتر از 2) که در محاسبه صحیح بدون اعشار تخمین بهتری وجود ندارد
روال را خاتمه بدهیم.
9) مقدار x را با m جمع کرده و حاصل را در x قرار می دهیم.
10) در متغیر m مقدار 0 را قرار می دهیم.
11)اگر مقدار x کمتر از 2 است به مرحله می رویم.
12) مقدار x را دو واحد کاهش می دهیم.
13) مقدار m را یک واحد افزایش می دهیم.
14) به مرحله 11 باز می گردیم.
مراحل 10 الی 14 برای این بودند که مقدار x را بر دو تقسیم کرده و حاصل را در
m بدست بیاوریم.
15) در متغیر x مقدار m را قرار می دهیم.
16) به مرحله 2 باز می گردیم.
17) حاصل جذر بدون اعشار در متغیر x بدست آمده است.
ممنون ولي مشخص نكردين كه كدوم از متغير هايي كه گذاشتين خارج قسمته كدوم مقسومه كدوم باقيموندس!
من كه گيج شدم!
اگه مثال كدي با هر زبوني كه ميشه بدين ممنون ميشم
باقیمانده در این الگوریتم کاربردی نداره. وقتی می نویسم "مقدار n را بر x تقسیم کرده و حاصل را در m بدست بیاوریم" یعنی n مقسوم ئه،
x مقسوم علیه ئه و m خارج قسمت.
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int n, x, a, m;
cin >> n;
x = 1;
for(;;)
{
a = 0;
m = 0;
while (n - a >= x)
{
a += x;
m++;
}
if (x == m + 1)
{
x = m;
break;
}
if ((x == m) || (x == m - 1))
break;
x += m;
m = 0;
while (x >= 2)
{
x -= 2;
m++;
}
x = m;
}
cout << x << endl;
getch();
return 0;
}
Dim n As Integer, x As Integer, a As Integer, m As Integer
n = Val(InputBox(""))
x = 1
Do
a = 0
m = 0
Do While n - a >= x
a = a + x
m = m + 1
Loop
If x = m + 1 Then
x = m
Exit Do
End If
If (x = m) Or (x = m - 1) Then Exit Do
x = x + m
m = 0
Do While x >= 2
x = x - 2
m = m + 1
Loop
x = m
Loop
MsgBox x
End
آخرین ویرایش به وسیله the king : دوشنبه 30 بهمن 1391 در 01:06 صبح
تشکر فراوان و دستتون درد نکنه
این رو اگه بخوایم اعشارش رو حساب کنیم کلا کد تغییر میکنه یا نه میشه کاریش کرد؟
فقط اگه زخمتتون نیست راهنمایی کنین خیلی نمیخوام دیگه پرو باشم و اذیتتون کنم
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
double n, x, y, a, m;
int i;
cin >> n;
x = 1;
for(;;)
{
a = 0;
m = 0;
while (n - a >= x)
{
a += x;
m++;
}
y = 0;
for (i = 0; i < x; i++)
y += 0.0001;
while (n - a >= y)
{
a += y;
m += 0.0001;
}
if ((x > m - 0.001) && (x < m + 0.001))
break;
x += m;
m = 0;
while (x >= 2)
{
x -= 2;
m += 1;
}
while (x >= 0.0002)
{
x -= 0.0002;
m += 0.0001;
}
x = m;
}
cout << x << endl;
getch();
return 0;
}