חישוב ממוצע עם משתנה אחד בלבד - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

חישוב ממוצע עם משתנה אחד בלבד


PhoenixBoy

Recommended Posts

שלום,

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

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

הנחת יסוד: הקלט הוא מספרים טבעיים.

לפי מה שהבנתי אפשר לעשות את זה איכשהו עם מספרים ראשוניים.

קישור לתוכן
שתף באתרים אחרים

נניח שקוראים למשתנה הזה: "$average".

אתה לוקח את המספר הראשון ומכניס אותו ל $average

אח"כ אתה עובר מספר-מספר, ומפעיל עליו:

$average = ($average + $number) / 2;

כאשר $number זה כל פעם המספר הנוכחי בלולאה, כמובן.

בסופו של דבר יתקבל הממוצע של כל המספרים.

קישור לתוכן
שתף באתרים אחרים

נניח שקוראים למשתנה הזה: "$average".

אתה לוקח את המספר הראשון ומכניס אותו ל $average

אח"כ אתה עובר מספר-מספר, ומפעיל עליו:

$average = ($average + $number) / 2;

כאשר $number זה כל פעם המספר הנוכחי בלולאה, כמובן.

בסופו של דבר יתקבל הממוצע של כל המספרים.

זה לא חישוב נכון.

החישוב הזה נותן משקל גבוה יותר למספרים שמגיעים אחרונים

לדוגמא 100-> 100 -> 2

לפי החישוב שלך יוצא 51

כאשר הממוצע הוא 67.3

[br]פורסם בתאריך: 1.10.2007 בשעה 22:13:46


פתרון אפשרי:

אם יודעים מה מספר האיברים המקסימלי ובגלל שיודעים שהקלט הוא מספרים טבעיים , ניתן להגדיר גודל מסויים שישמש כאינדקס

לדוגמא עד 1000 איברים ניתן להוסיף עם כל איבר 0.001 ובסוף הלולאה לבדוק כמה איברים היו ע"י המספר שישנו מימין לנקודה העשרונית

$

 

[left] $sum= ($sum+ $number+0.001) ;[/left]

קישור לתוכן
שתף באתרים אחרים

נניח שקוראים למשתנה הזה: "$average".

אתה לוקח את המספר הראשון ומכניס אותו ל $average

אח"כ אתה עובר מספר-מספר, ומפעיל עליו:

$average = ($average + $number) / 2;

כאשר $number זה כל פעם המספר הנוכחי בלולאה, כמובן.

בסופו של דבר יתקבל הממוצע של כל המספרים.

כמו ש-cheeseman אמר, הפיתרון הזה לא נכון. אתה יכול לבדוק אותו על כל מספר שאתה רוצה, לדוגמא: 4,5,6.

אני אסביר את החידה עוד פעם.

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

קישור לתוכן
שתף באתרים אחרים

אתה יכול לשמור את כל המספרים בתוך מספר אחד ע"י שימוש במספר גדל(וכמובן שגם לפענח אותם לאחר מכן)

54946f5e584bb864ca756e7455951ce8.png

http://en.wikipedia.org/wiki/G%C3%B6del_number

העניין הוא שאני עדיין חושב שבשביל חישוב הממוצע עצמו צריך יותר ממשתנה אחד

קישור לתוכן
שתף באתרים אחרים

אתה יכול לשמור את כל המספרים בתוך מספר אחד ע"י שימוש במספר גדל(וכמובן שגם לפענח אותם לאחר מכן)

54946f5e584bb864ca756e7455951ce8.png

http://en.wikipedia.org/wiki/G%C3%B6del_number

העניין הוא שאני עדיין חושב שבשביל חישוב הממוצע עצמו צריך יותר ממשתנה אחד

תודה רבה זה בדיוק מה שחיפשתי!

ואז כדי לפענח את המספר שמקבלים צריך לחלק בהתחלה ב-2, n פעמים עד שמתקבל מספר לא שלם. המספר הראשון בסדרה הוא n-1.

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

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

קישור לתוכן
שתף באתרים אחרים

הייתי בטוח שרשמתי כאן הודעה...

בכל מקרה, זה יעבוד בתיאוריה. במציאות יש מספר סופי של ביטים שאתה יכול לשמור בהם מידע, ולכן הפתרון הזה לא יעבוד ברוב המקרים(תעשה ממוצע בין 64 ל 60 ותראה).

בקשר לזה עם השבר - צריך לבדוק מה המגבלה של הFLOAT וDOUBLE בדיוק עבור סכום של מספיק מספרים, ומתי זה מפסיק לדייק באלפית.

פתרון דומה(מאוד) לחזקות הוא להשתמש בבסיסים 2 ו- 3 בלבד, כאשר 3 עבור ספירת המספרים, ו- 2 עבור הסכום. אבל שוב, מספיק שהסכום יהייה גדול מ- 64 או 32(תלוי אם הגדרת LONG או INT, ותלוי במערכת עצמה).

קישור לתוכן
שתף באתרים אחרים

הייתי בטוח שרשמתי כאן הודעה...

בכל מקרה, זה יעבוד בתיאוריה. במציאות יש מספר סופי של ביטים שאתה יכול לשמור בהם מידע, ולכן הפתרון הזה לא יעבוד ברוב המקרים(תעשה ממוצע בין 64 ל 60 ותראה).

בקשר לזה עם השבר - צריך לבדוק מה המגבלה של הFLOAT וDOUBLE בדיוק עבור סכום של מספיק מספרים, ומתי זה מפסיק לדייק באלפית.

פתרון דומה(מאוד) לחזקות הוא להשתמש בבסיסים 2 ו- 3 בלבד, כאשר 3 עבור ספירת המספרים, ו- 2 עבור הסכום. אבל שוב, מספיק שהסכום יהייה גדול מ- 64 או 32(תלוי אם הגדרת LONG או INT, ותלוי במערכת עצמה).

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

ד"א, האם ניתן ב-CPP לאכסן בצורה כלשהי ערך מספרי שלם בעל 20 ספרות בערך?

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...