עבור לתוכן

(חושב ש)צריך עזרה בשיעורי בית בפסקל - round to trunc.

Featured Replies

פורסם

"נתונה הפונקציה הבאה אשר מטרתה היא קיצוץ השבר של מספר ממשי חיובי תוך שימוש בפונקציה התקנית round:"


function TruncPositive (Num: real) :integer;
{טענת כניסה: Num מקבל מספר ממשי חיובי}
{טענת יציאה: הפונקציה מחזירה את החלק השלם של המספר, כמו הפונקציה התקנית trunc}
begin
TruncPositive := round(Num - ___)
end;

המשימה:

השלם את החלק הביצועי של הפונקציה.

*הערה: אם ה"קוד" משבש את טענת הכניסה ויציאה:

טענת כניסה: Num מקבל מספר ממשי חיובי

טענת יציאה: הפונקציה מחזירה את החלק השלם של המספר, כמו הפונקציה התקנית trunc

אני חושב שאפשר לעשות את זה כך:


TruncPositive := round(Num -(num / 10)

אבל יש עם הפיתרון הזה בעיה - הוא תקף רק לגבי מספרים דו ספרתיים(או שזה נקרא חד ספרתיים?) כגון 3.2 ו 4.6 , אבל הוא לא יעבוד לדברים כגון 46.3 או 120.56.

למישהו יש הצעות יותר טובות?

תודה מראש לעוזרים.

פורסם

הפתרון שלך שגוי.

תנסה אותו עם 1.9.

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

פורסם
  • מחבר

כרגע כתבתי תוכנית וקימפלתי אותה, ניסיתי עם 1.9 והפלא ופלא - הפלט הוא 1, בדיוק כמו שרציתי... מה לא נכון בפיתרון שלי?

פורסם

ROUND מעגל למספר הקרוב ביותר, או למספר ללא שארית?

אם זה הראשון, אז:

1.9-0.19=1.71

וזה יעגל למספר הקרוב ביותר- 2.

אני לא יודע למה אצלך קיבלת 1.

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

תחשוב על מה שהצעתי לך בתגובה הקודמת שלי.

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

פורסם
  • מחבר

אוקיי, הגעתי לפיתרון ואכן צדקת - הפיתרון שלי לא היה נכון לגבי 1.9, הוא הראה לי שהפיתרון נכון מכיוון שבטעות קלטתי בתוך התוכנית(מה שאני מעביר לפרמטר) כinteger, כך שאת 1.9 הוא קלט כ... 1 :x

אגב, הפיתרון הוא:

TruncPositive := round(Num - 0.5);

תודה על העזרה :)

ארכיון

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

דיונים חדשים