פונקציה מותאמת ב-Excel - VBA

mm1978

New member
פונקציה מותאמת ב-Excel - VBA

איך אני יכול לבדוק אם מספר מסויים הוא ראשוני? אני רוצה שיופיע לי X בתא שמשמאלו אם המספר הוא ראשוני ו-y אם הוא לא. יש למישהו מושג איך עושים את זה? תודה
 

atir46

New member
הנה הקישור

http://mathforum.org/library/drmath/sets/select/dm_primality.html
 

mm1978

New member
תודה ../images/Emo13.gif לא ראיתי שם התייחסות לפונקציה בתוכנה

רק הסברים על מספרים ראשוניים... סליחה אם שאלה טפשית, אני פשוט לא מכיר VBA ו-Excel תודה בכל מקרה!
 

atir46

New member
אם קראת במקצת את המאמרים אזי:

הבנת בודאי שאין בנמצא פונקציה שמסוגלת (מבחינה מתמתית) לאשר שמספר הוא מספר ראשוני!! יותר מזה, אין אפילו פונקציה שיכולה לוודא שמספר הוא לא-ראשוני. מלבד ,כמובן, "פתרון בית-ספר", והיא לבדוק את כל המספרים האפשריים עד למספר עצמו. על-פי ההסבר (שבוודאי קראת) יש רק פתרונות מקורבים בצורות שונות. ולכן: דבר ראשון, אתה צריך להגדיר לעצמך מהם דרישות הפתרון. אח"כ אתה צריך להגדיר לעצמך דרישות נוספות, כגון הזמן לפתרון, משאבי מחשב וכו. עכשיו לעצם האלגוריתם עצמו - אין שום חשיבות לשפת התכנות, אתה לא צריך לדעת VBA או EXCEL. כל שפת תכנות מספיקה. את האלגוריתם עצמו יש לחפש באתרים שעוסקים במתמתיקה שימושית (כן, זהו המקצוע שעוסק בשאלה שלך). רוב הדוגמאות שתמצא יהיו ממילא בשפות תכנות אחרות, כך שתצטרך להסב אותם משפת התכנות המצויה לרצויה. ועכשיו, שסקרנו את השלבים הנדרשים, האם אתה עדיין מעונין בתשובה? אגב, שאלות אשר עוסקות במספרים ראשוניים התחילו בימי קדם (יוונים) ונחקרים בצורה מסיבית עד ימנו אנו. (שמעת על משפט פרמה?)
 

mm1978

New member
אוקיי, מצאתי את הקוד שאני צריך למספר ראשוני:

Option Explicit 'Very basic function for finding is a number is prime. Just go through all numbers 'From 2 to 1/2 of the number and divide. If the number is divisible by any of those 'numbers, then it is not a prime number. Check for divisibility by 2 or 3 first to 'Try to speed things up just a little Function isPrime(n As Long) As Boolean Dim counter As Long 'ignore the values of 1, 2, and 3 and answer appropriately If (n = 1) Then Exit Function If (n = 2) Or (n = 3) Then isPrime = True Exit Function End If 'If number is divisible by 2 or 3, it is not prime If (n Mod 2 = 0) Then Exit Function If (n Mod 3 = 0) Then Exit Function 'Go through remaining numbers, if divisible by any of them, it is 'not prime For counter = 5 To (n / 2) If (n Mod counter = 0) Then Exit Function Next 'If we got this far, it must be a prime number isPrime = True End Function​
עברתי ל-Visual Basic Editor והכנסתי את הקוד הנ"ל. עכשיו איפה אני קובע שאם המספר מתקבל כראשוני, שייכתב בתא X ואם לא, אז Y?
 

atir46

New member
התכנית לפניך

אפשר ומותר לשאול שאלות: הטקסט הפוך( צריך להיות משמאל לימין) Option Explicit 'Very basic function for finding is a number is prime. Just go through all numbers 'From 2 to 1/2 of the number and divide. If the number is divisible by any of those 'numbers, then it is not a prime number. Check for divisibility by 2 or 3 first to 'Try to speed things up just a little Sub CheckIsPrime() Const X_Col = 2 ' The Prime Column Const Y_Col = 3 ' The Non Prime Column Dim RowCounter As Integer Dim C As Variant RowCounter = 1 For Each C In ActiveCell.CurrentRegion.Cells If isPrime(C.Value) Then Cells(RowCounter, X_Col) = 1 Else Cells(RowCounter, Y_Col) = 1 End If RowCounter = RowCounter + 1 Next End Sub Function isPrime(n As Long) As Boolean Dim counter As Long 'ignore the values of 1, 2, and 3 and answer appropriately If (n = 1) Then Exit Function If (n = 2) Or (n = 3) Then isPrime = True Exit Function End If 'If number is divisible by 2 or 3, it is not prime If (n Mod 2 = 0) Then Exit Function If (n Mod 3 = 0) Then Exit Function 'Go through remaining numbers, if divisible by any of them, it is 'not prime For counter = 5 To (n / 2) If (n Mod counter = 0) Then Exit Function Next 'If we got this far, it must be a prime number isPrime = True End Function
 

atir46

New member
מספר מילות הסבר

1. יש לסמן (לצבוע) את עמודת המספרים הנבחנים. 2. יש להריץ מתוך VBA editor את הסברוטינה . 3. התוצאות מתקבלות בעמודות 2 ו 3 ( ניתן לשנות את מספרי העמודות בקוד) 4. בהצלחה.
 

mm1978

New member
שוב תודה ושתי שאלות ../images/Emo13.gif

סימנתי את עמודה A, עברתי לvba editor והרצתי את הקוד ששלחת לי. שיניתי את מספרי העמודות ל-3 ו-4, כי עמודה 2 בקובץ כבר עסוקה
התוצאה - בעמודות 3 ו-4 הופיע המספר 1 לסירוגין (לפעמים באותה שורה - שזה לא אומר שהמספר מיוצג גם כראשוני וגם כלא ראשוני?...). רציתי לצרף קובץ, אבל משהו השתבש פה באתר ואין לי אפשרות. בכל אופן, השאלות שלי הולכות ככה: 1. איך אפשר להחליף את ה-1 כך שיופיע yes אם המספר ראשוני ו-no אם הוא לא? 2. איך אפשר לקבוע שה"תשובות" יגיעו לעמודה 3 בלבד (כלומר yes-no-no-yes ברצף אחד תחת השני) ולא בשתי עמודות נפרדות? מקווה שלא יותר מדי שאלות ותודה רבה על העזרה!
 

atir46

New member
להלן התשובות

1. החליפי את הספרה 1 הראשונה ב "yes" 2. החליפי את הספרה 1 השניה ב "no" 3. לא יכולה להיות אפשרות שבאותה שורה מופיעות שתי תשובות. 4. אנסה לצרף קובץ דוגמה.
 

atir46

New member
הופס, שכחתי

כדי שהתשובות יבהיו באותה עמודה, פשוט תקבעי את מספרי העמודות לאותו מספר ( לדוגמה 3 לשתי העמודות)
 

atir46

New member
התכנית נבנתה לעמודת נתונים אחת בלבד

1. מצ"ב תכנית עובדת! 2. אני מציע, כדי שהעבודה של שנינו תהיה יעילה יותר, שתגדירי בדייקנות את דרישות הקלט והפלט של התכנית, אחרת נבלה ביחד את כל סוף השבוע (לפחות) מול המחשב. רצוי לצרף את טבלת הקלט שלך!
 

mm1978

New member
סחתיין עליך ../images/Emo45.gif

כמה סבלנות, תודה
סוף סוף הצלחתי להגיע למה שרציתי... הייתי רוצה להחזיר טובה, אז אם אתה צריך עזרה בענייני אינטרנט, עיצוב, אפיון ותוכן (שאני אעז להציע - תכנות?..
), תרגיש חופשי לנצל חזרה... שיהיה שבוע טוב.
 
למעלה