נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: כיצד אני עושה חזקה ושורש בשפת C?

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
אורחח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 01 February 2005 בשעה 21:34 | IP רשוּם
ציטוט אורחח

שלום לכם! האתר מאוד יפה, העיצוב, והתוכן אך הלכתי לאיבוד בחלק של מתמטיקה - כללי

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

ואיך אני עושה שורשים בשפת C אז בבקשה תעזרו לי....

בתודה

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 02 February 2005 בשעה 01:22 | IP רשוּם
ציטוט ניר

אתה צריך להשתמש בפונקציות pow, sqrt שנמצאות בספריה math.h

מידע ופונקציות מתמטיות נוספות תמצא במסמך הבא, בעמוד 35:
http://underwar.livedns.co.il/document-details.asp?id=8

חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 02 February 2005 בשעה 23:07 | IP רשוּם
ציטוט SBD

או שתבנה פונקציה משלך זה לא כזה ביג דיל אחי :)

אתה עושה פונקציה של העלאה בחזקה ושורש זה חזקה של חצי :)

חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 02 February 2005 בשעה 23:46 | IP רשוּם
ציטוט ניר

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

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 03 February 2005 בשעה 06:58 | IP רשוּם
ציטוט SBD

מממ...את האמת אחי שלא חשבתי על דרך אחרת....

אני ינסה לחשוב על דרך אחרת...



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
RPG2kiLL
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 376
נשלח בתאריך: 04 February 2005 בשעה 00:20 | IP רשוּם
ציטוט RPG2kiLL

מעבר לזה, שים לב למה שאמרת קודם:
    תבנה פונקציה משלך - אתה עושה פונקציה של העלאה בחזקה ושורש זה חזקה של חצי .

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

חזרה לתחילת העמוד הצג את כרטיס החבר של RPG2kiLL חפש הודעות אחרות של RPG2kiLL בקר בדף הבית של RPG2kiLL
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 04 February 2005 בשעה 00:22 | IP רשוּם
ציטוט ניר

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 376
נשלח בתאריך: 04 February 2005 בשעה 00:33 | IP רשוּם
ציטוט RPG2kiLL

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

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 04 February 2005 בשעה 10:50 | IP רשוּם
ציטוט SBD

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

וצודק לא חשבתי בנוגע לשורש...



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
RPG2kiLL
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 376
נשלח בתאריך: 04 February 2005 בשעה 11:30 | IP רשוּם
ציטוט RPG2kiLL

טוב, אם אני לא אהרוס ל SBD, אז אני אכתוב בפירוט את הרעיון שלי.

הרעיון הוא להשתמש בחוק החיבור מחוקי החזקות:
x^(w1+w2) = x^w1*x^w2

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

מניח שדוגמא תבהיר יותר את העניין:
אם אני רוצה לחשב 3 בחזקת 12, אני אתחיל כך:
3*3 (שווה לשלוש בריבוע)
9*9 (שווה לשלוש ברביעית)
81*81 (שווה לשלוש בשמינית)
וכאן אני אעצור מכיוון שלא יעזור לי לחשב שלוש בחזקת 16.
עכשיו יש לי כמה שווה שלוש בשמינית, כאשר המטרה שלי להגיע לשלוש בחזקת 12, לכן בעצם אני צריך לחשב כמה זה שלוש בחזקת 4 ולכפול בתוצאה האחרונה (כי 12-8=4) ומכיוון ששמרתי כמה שלוש ברביעית שווה נשאר לי רק לשלוף את הנתון מהזיכרון וזהו.

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

חזרה לתחילת העמוד הצג את כרטיס החבר של RPG2kiLL חפש הודעות אחרות של RPG2kiLL בקר בדף הבית של RPG2kiLL
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 04 February 2005 בשעה 12:27 | IP רשוּם
ציטוט SBD

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

בכל מקרה דרך נחמדה, את האמת לא הייתי חושב עליה....:|



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
RPG2kiLL
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 376
נשלח בתאריך: 04 February 2005 בשעה 14:06 | IP רשוּם
ציטוט RPG2kiLL

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

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

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

חזרה לתחילת העמוד הצג את כרטיס החבר של RPG2kiLL חפש הודעות אחרות של RPG2kiLL בקר בדף הבית של RPG2kiLL
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 04 February 2005 בשעה 14:56 | IP רשוּם
ציטוט SBD

אז משהו ידוע איך מורכבות הפונקציה של החזקה בספריה של ה-MATH ?

למה שם אם אני לא טועה אפשר לעשות בחזקת חצי....[אז מן הסתם זה לא לפי מה שאתה אמרת אחי....]



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 04 February 2005 בשעה 15:02 | IP רשוּם
ציטוט ניר

רותם: הנה פתרון שפועל בדרך שהצעת פחות או יותר. זו הדרך הכי יעילה שאני מכיר:
קוד:
long power(int a, int b)
{
    if (b == 1) return a; if (b == 0) return 1;

    if (b % 2 == 0) return power(a*a, b/2);
    return a*power(a*a, b/2);
}

חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 04 February 2005 בשעה 15:17 | IP רשוּם
ציטוט SBD

זה עם רקורסיה לא? [קראיה לפוקנציה מתוכה?]

 

בכל מקרה עכשיו לא הבנתי בכלל מה עשית פה :(

אבל אני כבר יבין [אל תסביר...] נבדוק את זה על הנייר :)



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 04 February 2005 בשעה 15:22 | IP רשוּם
ציטוט ניר

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

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 04 February 2005 בשעה 16:11 | IP רשוּם
ציטוט SBD

על הנייר יוצתר קל לנסות בלי אז אם תוכל להביא לפה בלי יהיה טוב :)

__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 05 February 2005 בשעה 03:01 | IP רשוּם
ציטוט ניר

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

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

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

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