לולאת WHILE-המשך
דוגמא נוספת למימוש בעזרת פקודת while:
כתוב תוכנית הקולטת מספר ממשי חיובי , ומחשבת את השורש הריבועי שלו.
הנח כי בקלט לא יהיה מספר שלילי.הדיוק הנדרש בשורש הוא ספרה אחת אחרי הנקודה.
פתרון:
program SQUARE_ROOT; { תוכנית למציאת שורש של מספר חיובי כלשהו} var X:real;(*המספר שצריך למצוא את השורש שלו*) A,B:real; (* משתני עזר *) ROOT:real; (* תוצאת השורש *) FLG:real; (* דגל ליציאה מהלולאה *) begin { קלט } write('הקש את המספר שהנך רוצה למצוא את השורש הריבועי שלו'); readln(X); {הצבת ערכים התחלתיים} FLG:=1; (* אפשור כניסה ללולאה *) A:=X; (* נציב ערך עליון לתוצאת השורש *) B:=0; (* נציב ערך תחתון לתוצאת השורש *) ROOT := (A+B)/2; (*נחפש את השורש בין הגבול העליון לתחתון*) (* X יכול להיות שזהו השורש של *) (* ולכן אין צורך להיכנס ללולאה *) if ROOT* ROOT > X- 0.1 then if ROOT*ROOT < X+0.1 then FLG := 0; {הלולאה} while FLG = 1 do (*כל עוד השורש לא בטווח אי הדיוק*) begin if ROOT*ROOT >X then A:=ROOT(*אם גבוה נציבו כערך עליון *) else B:=ROOT (*אחרת נציבו כערך תחתון*) ROOT :=(A+B)/2; (*נחפש שוב את השורש במרכז הגבולות *) if ROOT*ROOT>X-0.1 then if ROOT*ROOT < X+ 0.1 then FLG := 0; end; { פלט} writeln ( ROOT, ' = ' , X, ' השורש של '); end. |
להורדת הדוגמא לחץ כאן
דוגמת ריצה:
עקרון החיפוש אחרי שורש המספר היה למצוא את המספר בין שני גבולות, עליון ותחתון. אם השורש גדול מדי מקטינים את הערך העליון. אם השורש קטן מדי מגדילים את הערך התחתון.