עבור לתוכן

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

Featured Replies

פורסם

שלום,

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

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

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

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

פורסם

נניח שקוראים למשתנה הזה: "$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]

פורסם

לדעתי זו רמאות :) אתה בעצם ממציא לך כאן משתנה נוסף.

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

פורסם

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

פורסם

באותה דרך אפשר לשחק עם הביטים.

אם מדברים על מספר של 32 ביט, סביר להניח שהבודק לא יכניס יותר מ 256 מספרים או שסכומם יהייה גדול ממספר 24 ביט.

פורסם
  • מחבר

נניח שקוראים למשתנה הזה: "$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 ספרות בערך?

פורסם

בעזרת DOUBLE אתה יכול לייצג עד 2^10 ספרות בערך(בייצוג בינארי). הבעיה היא הדיוק(לדוגמא, אתה יכול לייצג את המספר 4, אך לא את המספר 3).

פורסם

מספר של 64 ביט יכול להכיל עד כ-20 ספרות.

זה נתמך גם ע"י מעבדים של 32 ביט, באמצעות long long.

פורסם

Actually, I just wrote a BigInteger class in cpp that lets you store and manipulate natural numbers as large as you want.

פורסם
  • מחבר

Actually, I just wrote a BigInteger class in cpp that lets you store and manipulate natural numbers as large as you want.

אתה יכול בבקשה להעלות אותה?

ארכיון

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

דיונים חדשים