עבור לתוכן

שאלה ב Scheme

Featured Replies

פורסם

איך אני עושה תוכנה שתחשב

1/2*2/3*3/4

וכו...

כאילו שיעלה כל פעם או את התחתון או את העליון ב 2....

בערך...100 מיליון פעם...

?

פורסם

באלגוריתם מילולי:

X=1

W=1

Y=2

עבור כל I מ1 עד N בצע:

{

אם I/2 mod 10 = 0 אזי

X=X+2

אחרת Y=Y+2

W=W*X/Y

}

הדפס W

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

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

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

לאחר מכן נכניס את התוצאה למשתנה הסוכם, ובכדי שתיהיה בו את התוצאה של מכפלת השברים אז נכפול את השבר X/Y במשתנה הסוכם.

לאחר שכל הלולאה נגמרה, נגפיס את W.

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

הלולאה היא לולאת IF רגילה.

פורסם
  • מחבר

האלגוריתם זה לא בעינ אפילו כתבתי כזאת תוכנה בC

רק אני מתקשה לכתוב אותה בסקיים

פורסם

במחשבה שניה אני לא בטוח שהבנתי מה בדיוק זה אמור לחשב.

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

ואז בכל פעם שהשבר משתנה, לכפול אותו בשבר הקודם, כאשר השבר ההתחלתי הוא 1/2.

ואני לא בדיוק מבין מה רצית בהודעה השניה שלך.

פורסם

סקים! אני לא מאמין! פעם ראשונה שמישהו שואל על סקים! :smile1:

אורורה - סקים היא שפת LISP. היא לא ממש דומה לשפות פרוצדורליות כמו C. התחביר שלה הוא שורות של ביטויים. זה נראה מוזר בהתחלה, אבל מתרגלים.

נחמיה - התסכלתי בשיעורי בית ישנים ונזכרתי ממש ממש טיפונת. כתבתי משהו, שיכול להיות שהוא עובד, ועוד יותר יכול להיות שלא. לא ניסיתי. הנה:

(define (myfunc i)
(if (< i 1) 1
(* (/ i (+ i 1)) (myfunc (- i 1)))))

כמו שאתה רואה זו פונקציה רקורסיבית. אם תכניס לה 1 תקבל 1/2, אם תכניס לה 2 תקבל 1/2 * 2/3 וכן הלאה...

פורסם

(define (myfunc i accum)
(if (zero? i)
accum
(myfunc (- i 1) (* accum (/ i (+ i 1))))))

למקרה ואתה רוצה ב tail position...אגב scheme זו אחת השפות שאני יותר נהנה לתכנת בהן.

מטי.

פורסם

אני מרגיש דיי מטופש.

oh well....

פורסם

זה בסדר.

לומדים אותה באוניברסיטה באיזה קורס מבוא כי מכריחים אותך, ואח"כ אתה שוכח ממנה לנצח, כל השאר בכלל לא יודעים על קיומה ;D

פורסם
  • מחבר

תודה על העזרה...

אבל זה לא ממש עבד...

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

פורסם

היא עושה מה שביקשת

1/2*2/3*3/4*4/5...

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

איך אומרים ? -- garbage in - garbage out .

מטי.

ארכיון

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

דיונים חדשים