שאלה בפסקל...

Black Hawk

New member
שאלה בפסקל...

פתח וישם אלגוריתם אשר הקלט שלו הוא מספר חיובי שלם והפלט שלו הוא החזקה הקטנה ביותר של 2 אשר גדולה מנתון הקלט. למשל: עבור הקלט 7 יהיה הפלט 8 (8=2*2*2).
 

DCoder

New member
There´s nothing like doing someones

...Homework... 1,answer = pow(2, ceil( log(x)/log(2) ) ); or 2. answer = 1; while ( answer < x ) answer *= 2; Feel free to translate those to Pascal.​
 

IdanR

New member
תראה...

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

Black Hawk

New member
וכיצד...

מהי הפעולה שעליי לבצע על מנת להעלות בכל לופ של הלולאה את החזקה הכופלת?
 

*איתי*

New member
פשוט מאוד

אתה פשוט לוקח את המשתנה, TEMP לצורך העניין, וכותב בגוף הלולאה TEMP=TEMP*2. (כמובן שאתה צריך לאתחל את המשתנה TEMP ל-2 לפני הכניסה ללולאה
 

*איתי*

New member
תיקון קטן

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

darkstar

New member
נו באמת

כזאת שאלה לפורום? אני בטוח דאם תתאמץ מספיק תמצא פיתרון
 

t1234567

New member
קבל תשובה לשאלה

תגדיר משתנים x:integer y:integer misparkelet:integer x:=1; y:=0; readln(misparkelet); while x<=misparkelet do begin x:=2*x; y:=y+1; end; writeln(y,´mispar hhezka´); writeln(x,´the pelet that is biger then the kelet´);
 
למעלה