עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

שאלה בפסקל/מתמטיקה

Featured Replies

פורסם

איך אני יכול ליעל את הקוד הבא:

program find_ny_naturals;

function IsEqualSums(m,n:longint):boolean;

begin

IsEqualSums:=((((1+m-1)*(m-1)) div 2)=(((m+1+n)*(n-m) div 2)));

end;

procedure FindPairs;

var

i,j,n:longint;

flag:boolean;

begin

n:=1;

for j:=n to maxlongint do

for i:=n to j do

if IsEqualSums(i,j) then

begin

n:=2*(j+i);

writeln(i,' ',j);

end;

end;

begin

FindPairs;

readln;

end.

התוכנית עובדת אבל מאוד איטי אחרי שהיא מוצאת את ה 6 זוגות הראשונים של המספרים היא חושבת המון המון המון זמן.

אני מנסה לעלות על החוקיות (אם יש בכלל) ולא מצליח למצוא פיתרון יעיל יותר.

עד כמה שידוע לי אמורות ליהיות לתוכנית 7 דרכים שונות לכתוב את התוכנית כך שהיא תמצא לי את המספרים.

הודה לעזרתכם הנדיבה בנידון.

פורסם

אין לי כוח לנסות להבין מה היא עושה

אם תסביר מה היא עושה אני אנסה לעזור לך

פורסם
  • מחבר

אין לי כוח לנסות להבין מה היא עושה

אם תסביר מה היא עושה אני אנסה לעזור לך

היא מוצאת כל זוגות המספרים השלמים (m,n) אשר מקיימים את התנאי שסכום האיברים מ 1 עד ל m-1 שווה לסכום האיברים מ m+1 עד n

כפי שניתן לראות מדובר בחישוב סכום סדרות חשבוניות לצורך בדיקת קיום התנאי לזוג מספרים מתבקש.

התוכנית מוצאת איזה 12 זוגות מספרים כאלו כדוגמא:

1,1

6,8

35,49

204,288

1189,1681וכ"ד.

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

;D ;)נ.ב. עם מישהו רוצה לבדוק עד כמה מהיר המחשב שלו או שמע לבדוק עם ה OC שלו יציב אז אני מציע לו לנסות להריץ תוכנית כזאת ולראות את התוצאות.

פורסם

(1+m-1)(m-1)div 2

בשביל מה להוסיף ולחסר אחד ?

גם אין צורך לחלק ב 2, כל עוד כל הזמן לא תחלק בשניים (אם הסכומים שווים אז גם פעמיים הסכומים שווים)

האלגוריתם עצמו די כבד. עדיף לעבור מספר מספר ולחשב את הסכום של המספרים מ 1 עד M-1

עכשיו תיקח את הנוסחא לחישוב הסכום של המספרים בין M+1 עד N:

(m+n+1)(n-m) - השמטתי שוב את החילוק ב 2 כאמור

ובא נהפוך את הנוסחא:

(m+n+1)(n-m)=SUM(m)

mn-m2+n2-mn+n-m=SUM(m)

n2+n-(m2+m+SUM(m))

n=[-1+sqrt(1+4(m2+m+SUM(m))]/2

אם זה יוצא מספר שלם סימן שיש לך פיתרון ומצאת את הזוג של m, אחרת אין ל m זוג ואתה מתקדם לבדוק את m+1.

פורסם

אני לא מבין למה לא השתמשת בנוסחאות של סכום סידרה על מנת לפשט את כל הדרך..

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

0=n^2 - 2m^2 +n

או אם יותר נוח לך לראות את זה ככה:

n(n+1) = 2m^2

כל שעליך לעשות הוא ליישם את הנוסחא בפסקל ולמצוא פתרונות שמקיימים את המשוואה, כל M ו N שיקיימו את המשוואה הם זוג מספרים שעונה על התנאים שלך.

נ.ב. יכול להיות שלזה התכוון אמירם למרות שלא כל כך הצלחתי לעקוב אחריו, (השעה כבר די מאוחרת ואני קם ממש מוקדם מחר ;) אז אולי מאוחר יותר אני אציץ בה שוב..)

לילה טוב...

פורסם

זה באמת יותר פשוט, אבל זה לא טריויאלי למצוא לזה פתרונות.

השלב הבא בפיתוח הנוסחא הוא בידוד של m

m=sqrt(n(n+1)/2)

עכשיו צריך לעבור על ה n אחד אחד ולמצוא מקרים שבהם התוצאה יוצאת שלמה.

מבחינת סיבוכיות זה אותו הדבר כמו הפיתרון שלי, רק הרבה יותר פשוט להבנה.

רק לצורך הדגמה:

m=sqrt(8(8+1)/2)

m=6

וקיבלנו את הצמד 6,8

m=sqrt(288(288+1)/2)

m=204

וקיבלנו 204,288

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.