PDA

View Full Version : سوال: تجزیه ی یک عدد به اعداد اول



ahmads
جمعه 28 خرداد 1389, 00:47 صبح
سلام دوستان

یه سوال دیدم برام جالب بود که حلش کنم، برنامه رو نوشتم که میتونید از لینک زیر دانلود کنید .
کاره برنامه اینه که عدد ورودی رو به اعداد اول تجزیه میکنه .


Download (http://ahmads.persiangig.com/Programming/tajziye%20be%20adade%20aval.zip)


برنامه ای که نوشتم دوتا عیب داره ، یکی اینکه عدد یک رو تجزیه نمیکنه، طبیعیه البته اما میخواستم بدونم چطوری میشه رفعش کنم . و دوم اینکه یک علامت ضرب اضافه آخر عبارت تجزیه شده قرار میگیره .

ممنون میشم اگه دوستان توی حل دوتا مشکل بالا کمکم کنن

ASedJavad
شنبه 29 خرداد 1389, 20:44 عصر
Private Sub Command1_Click()
Text1.Text = ""
Dim i, j, s, a, f As Double
a = Fix(Text2.Text)
If a > 1 Then
For i = 1 To a
s = 0
For j = 1 To i
If i Mod j = 0 Then
s = s + 1
End If
Next j
If s = 2 Then
f = 0
While ((a / i) = Int(a / i))
a = (a / i)
f = f + 1
Wend
If f <> 0 Then
Text1.Text = Text1.Text + Str(i) + "^" + Str(f) + Space(1) + "*" + Space(1)
End If
End If
Next i
Text1=Left(Text1,Len(Text1)-2)
Else
Text1=a
End If
End Sub

a_mohammadi_m
دوشنبه 31 خرداد 1389, 12:35 عصر
در مورد مشكل اول :
قبل از اينكه يك عدد رو تجزيه كني كنترل كن كه خودش عدد اول نباشه ، اگه عدد اوله با يك پيغام به كاربر اطلاع بده و برنامه رو تموم كن
خود عدد 1 هم در همين چك كردن جزو اعداد اول محسوب ميشه يعني مي توني در اولين if اگر عدد گرفته شده 1 بود برنامه تموم كني

در ضمن مثل اينكه مثال بيان شده در پست شماره 2 كلا اشكال داشته باشه
در اين مثال همين كه يك عددي 2 تا مقسوم عليه داشت شروع به كارهاي ديگه اي مي كنه و بقيه اعداد رو چك نميكنه

mahdi1373
دوشنبه 31 خرداد 1389, 17:33 عصر
سلام،
من یه برنامه نوشتم که تجزیه هم می کنه، اینم سورسش:

ASedJavad
دوشنبه 31 خرداد 1389, 20:45 عصر
در مورد مشكل اول :
مثل اينكه مثال بيان شده در پست شماره 2 كلا اشكال داشته باشه
در اين مثال همين كه يك عددي 2 تا مقسوم عليه داشت شروع به كارهاي ديگه اي مي كنه و بقيه اعداد رو چك نميكنه

سلام
شاید حق با شما باشه
من وقتی اون کد رو گذاشتم فرض کردم که کدی که دوستمون گذشته درسته و فقط همون دو تا مشکل رو داره رو همین حساب تو notepad بازش کردم دو تا تغییر دادم توش و گذاشتمش اینجا
اگه مشکلی بوده تو کد اصلی بوده

ahmads
سه شنبه 01 تیر 1389, 04:06 صبح
در مورد مشكل اول :
قبل از اينكه يك عدد رو تجزيه كني كنترل كن كه خودش عدد اول نباشه ، اگه عدد اوله با يك پيغام به كاربر اطلاع بده و برنامه رو تموم كن
خود عدد 1 هم در همين چك كردن جزو اعداد اول محسوب ميشه يعني مي توني در اولين if اگر عدد گرفته شده 1 بود برنامه تموم كني

در ضمن مثل اينكه مثال بيان شده در پست شماره 2 كلا اشكال داشته باشه
در اين مثال همين كه يك عددي 2 تا مقسوم عليه داشت شروع به كارهاي ديگه اي مي كنه و بقيه اعداد رو چك نميكنه
ممنون از راهنماییتون دوست عزیز، اما عدد 1 اول نیست، بنابراین نباید به اعداد اول تجزیه بشه پس برنامه رو صحیح نوشته بودم، اما دلیل اینکه اون سوال رو پرسیده بودم این بودش که حین تست برنامه بیشتر روی تجزیه عدد تمرکز کرده بودم و نه اینکه تجزیه اون به عوامل اول که میشد خیلی راحت مسئله رو حل کرد،پس سوالم اشتباه بوده، بازم ممنون :)

در ضمن مثل اينكه مثال بيان شده در پست شماره 2 كلا اشكال داشته باشه
در اين مثال همين كه يك عددي 2 تا مقسوم عليه داشت شروع به كارهاي ديگه اي مي كنه و بقيه اعداد رو چك نميكنه
اگه مشکلی بوده تو کد اصلی بوده نه دوست عزیز مشکلی تو کد اصلی نبود، تغییر اساسی که شما تو برنامه داده بودید این کد بود :


Else
Text1=aجای نامناسبش باعث میشه شرط اولیه رو دیگه رعایت نکنه . اما خیلی ممنون بابت حذف علامت اضافه :)

فکر کنم دوستان برنامه رو مطالعه نکرده بودند، به این روش عمل کردم

1- عدد رو از کاربر میگیرم
2- عوامل اول رو تا اون عدد استخراج میکنم
3- بخش پذیری عدد رو نسبت به اعداد اول بدست اومده تا خوده اون عدد رو بررسی میکنم،
4- بعد از پیدا کردن اعداد اول دارای شرایط بالا، عدد رو تا وقتی که خارج قسمت تقسیم عدد به اعداد اول مرحله ی قبل ، صحیح باشه به عوامل اولش تجزیه میکنم
5- عوامل اولی که شامل حلقه بودن رو وارد خروجی میکنم به اضافه تعداد دفعاتی که عدد بر اون ها قابل تقسیم بوده ( به عنوان توان )


اینم کد نهایی بعد از اصلاح، تنها تغییرش حذف علامت توان اضافه بعد از رقم آخر هستش ( ممنون از دوست عزیز بابت کد )

text1 عدد رو از میگیره، text2 خروجی رو نشون میده و command1 هم عملیات رو .


Private Sub Command1_Click()
Text2.Text = ""
Dim i, j, s, a, f As Integer
If Text1.Text > 1 And Text1.Text <> "" Then
a = Fix(Text1.Text)
For i = 1 To a
s = 0
For j = 1 To i
If i Mod j = 0 Then
s = s + 1
End If
Next j
If s = 2 Then
f = 0
While ((a / i) = Int(a / i))
a = (a / i)
f = f + 1
Wend
If f <> 0 Then
Text2.Text = Text2.Text + Str(i) + "^" + Str(f) + Space(1) + "*" + Space(1)
End If
End If
Next i
Text2.Text = Left(Text2.Text, Len(Text2.Text) - 2)
End If
End Subکه الگوریتم کلی همینه :


For i = 1 To a
s = 0
For j = 1 To i
If i Mod j = 0 Then
s = s + 1
End If
Next j
If s = 2 Then
f = 0
While ((a / i) = Int(a / i))
a = (a / i)
f = f + 1
Wend
If f <> 0 Then Print i & "^" & f
End If
Next i
و ممنون از جناب mahdi1373 بابت معرفی برنامشون :) روشی که استفاده کردید باعث شده برنامه شما خیلی سریعتر عمل کنه

m.4.r.m
چهارشنبه 29 خرداد 1392, 13:47 عصر
تاریخ پست ها رو نگاه کن دوست عزیز

sepide75
جمعه 15 آبان 1394, 23:24 عصر
slmmishe code in barname ro bezarin inja? ?mamnOon

زیبااا
شنبه 24 مهر 1395, 23:10 عصر
سلام امکانش هست این کدو به زبان جاوا اسکریپت بنویسید ممنون میشم

www.pc3enter.tk
پنج شنبه 13 آبان 1395, 05:04 صبح
سلام امکانش هست این کدو به زبان جاوا اسکریپت بنویسید ممنون میشم
اگر بخواهید میتوانم برایتان بنویسم فقط پیام خصوصی بدهید تا سریع برایتان ارسال کنم

helious
یک شنبه 05 فروردین 1397, 22:26 عصر
سلام
وقت بخیر
امکان داره کد در قالب smallbasic نوشته بشه

zeynab.q85
شنبه 03 اسفند 1398, 15:59 عصر
سلام
لینکایی که دادید دانلود نمیشن:افسرده:
چیکار کنم
عجله دارم

zeynab.q85
شنبه 03 اسفند 1398, 16:11 عصر
منم میخوام برای منم بفرستین
اگر بخواهید میتوانم برایتان بنویسم فقط پیام خصوصی بدهید تا سریع برایتان ارسال کنم