PDA

View Full Version : شبیه سازی جذر فقط با استفاده از دو عملگر جمع و تفریق



my_programmer
جمعه 27 بهمن 1391, 22:47 عصر
سلام و درود

الگوریتمی میخواستم برای شبیه سازی جذر با استفاده از دوعملگر جمع و تفریق بدون تقسیم و سایر چیز ها با هر زبانی که باشه مهم الگوریتمش هست ممنون اگر کمکی کنید

the king
جمعه 27 بهمن 1391, 22:58 عصر
سلام و درود

الگوریتمی میخواستم برای شبیه سازی جذر با استفاده از دوعملگر جمع و تفریق بدون تقسیم و سایر چیز ها با هر زبانی که باشه مهم الگوریتمش هست ممنون اگر کمکی کنید

جذر اعشاری یا جذر صحیح بدون اعشار؟ فرضا جذر 12 رو 3 بدست بیاره یا 3.4641

my_programmer
شنبه 28 بهمن 1391, 08:58 صبح
جذر اعشاری یا جذر صحیح بدون اعشار؟ فرضا جذر 12 رو 3 بدست بیاره یا 3.4641


نه جذر معمولي!
مثلا ما ضرب رو كه با عملگر جمع مي سازيم ميخوايم جذر رو هم با دو عملگر جمع و تفريق بسازيم همون بدون اعشارش مهمه!

the king
شنبه 28 بهمن 1391, 16:41 عصر
این روش جذر بابلی است، البته بدون اعشار و بدون عملگر تقسیم.
فرض می کنیم که ورودی متغیر 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 بدست آمده است.

my_programmer
یک شنبه 29 بهمن 1391, 09:42 صبح
ممنون ولي مشخص نكردين كه كدوم از متغير هايي كه گذاشتين خارج قسمته كدوم مقسومه كدوم باقيموندس!

من كه گيج شدم!

اگه مثال كدي با هر زبوني كه ميشه بدين ممنون ميشم

the king
یک شنبه 29 بهمن 1391, 15:27 عصر
ممنون ولي مشخص نكردين كه كدوم از متغير هايي كه گذاشتين خارج قسمته كدوم مقسومه كدوم باقيموندس!

من كه گيج شدم!

اگه مثال كدي با هر زبوني كه ميشه بدين ممنون ميشم

باقیمانده در این الگوریتم کاربردی نداره. وقتی می نویسم "مقدار 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

my_programmer
سه شنبه 01 اسفند 1391, 00:47 صبح
تشکر فراوان و دستتون درد نکنه

این رو اگه بخوایم اعشارش رو حساب کنیم کلا کد تغییر میکنه یا نه میشه کاریش کرد؟

فقط اگه زخمتتون نیست راهنمایی کنین خیلی نمیخوام دیگه پرو باشم و اذیتتون کنم

the king
سه شنبه 01 اسفند 1391, 02:19 صبح
تشکر فراوان و دستتون درد نکنه

این رو اگه بخوایم اعشارش رو حساب کنیم کلا کد تغییر میکنه یا نه میشه کاریش کرد؟

فقط اگه زخمتتون نیست راهنمایی کنین خیلی نمیخوام دیگه پرو باشم و اذیتتون کنم


#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;
}