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

נושא: שפת C - מימוש שורש

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

הצטרף / הצטרפה: 09 September 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 10
נשלח בתאריך: 14 September 2007 בשעה 17:20 | IP רשוּם
ציטוט levig

איך ממשים את פעולת השורש בשפת C
למשל אם המשתמש הכניס את המספר השלם 49
איך אני מגיע לזה שהורש של 49 הוא 7 ?
חזרה לתחילת העמוד הצג את כרטיס החבר של levig חפש הודעות אחרות של levig
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 14 September 2007 בשעה 19:48 | IP רשוּם
ציטוט shoshan

כאילו נתנו לך שאלה ספציפית לממש או שאתה צריך שורש ולא מצאת את הפעולה ?

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

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

קוד:
private static double Sqrt(double p)
{
    double curr = p;
    double step = p / 2;
    while ( Math.Abs(curr * curr - p) > 0.000001 )
    {
        double sqr = curr * curr;
        if ( sqr > p )
        {
            curr -= step;
            if ( ( curr - step ) * ( curr - step ) < p )
                step /= 2;
        }
        else
        {
            curr += step;
            if ( ( curr - step ) * ( curr - step ) > p )
                step /= 2;
        }
    }
    return curr;
}



__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
לוק
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 14 September 2007 בשעה 22:00 | IP רשוּם
ציטוט לוק

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

דוגמה לניוטון רפסון וחציה בשפת C:


 

float F(float x, float m ){ // המשוואה ההומוגנית: x^2 - m = 0.

       return x*x - m;

}

 

 

float NR(float m){ // שימוש בניוטון רפסון 

   float x0;

   x0 = m/2;

   int j = 0;

   while((abs(m - x0*x0) >= 0.0000001) && (j < 10))

               //        ריצה 10 איטרציות או עד שימצא 

               //       (שורש מספיק טוב (שגיאה 0.0000001 

   {

      x0 = x0 - (F(x0,m)/(2*x0));

         j++;

   }

   return x0;

}

 

float BM(float m){ //  שימוש בשיטת החציה עד שגיאה של 0.0000001 

      

       float Rx;

       float Lx = 0;

       if (m < 1) Rx = 1; else Rx = m;

       while (Rx - Lx > 0.0000001)

       {

              float mid = (Rx + Lx) /2;

              if (mid == Rx || mid == Lx)

              {

                     if ((m - Rx*Rx) < (m - Lx*Lx))

                            return Rx;

                     else return Lx;

              }

              if (F(mid,m) *F(Lx,m) > 0)

                     Lx = mid;

              else

                     Rx = mid;

       }

       return Rx;

}

 

void main()

{

       float num;

       cout<<"Enter Number:"<<endl;

       cin>>num;    

       cout<<"Newton Rafson method found:"<<NR(num)<<endl;   

       cout<<"Bisection method found:"<<BM(num)<<endl;

       cout<<"The sqrt function found:"<<sqrt(num)<<endl;   

}

 



 

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

הצטרף / הצטרפה: 09 September 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 10
נשלח בתאריך: 15 September 2007 בשעה 14:41 | IP רשוּם
ציטוט levig

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 15 September 2007 בשעה 15:19 | IP רשוּם
ציטוט לוק

ציטוט:
איך ממשים את פעולת השורש בשפת C


זה מה שקורה שלא יודעים להסביר מה רוצים...

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

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


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 15 September 2007 בשעה 17:00 | IP רשוּם
ציטוט צחי@

ובתשובה לשאלתך - נכון - יש פונק' כזאת שנקראת sqrt.
צריך לעשות include ל-math.h או cmath (ב-C++).

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

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 15 September 2007 בשעה 19:37 | IP רשוּם
ציטוט shoshan



__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
לוי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 16 September 2007 בשעה 03:19 | IP רשוּם
ציטוט לוי

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

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

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

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