פורסם 2006 באוקטובר 2719 שנים קיבלתי את התרגיל הבא לשיעורי בית במדעי המחשב(פסקל): "כתוב תוכנית הקולטת מספר טבעי כלשהו, שאינו כולל אפסים. על התוכנית ליצור שני מספרים חדשים, מהמספר שנקלט, ולחשב את סכומם. מספר אחד נוצר ע"י כתיבת כל הספרות הזוגיות, המופיעות במספר, ע"פ סדר הופעתן, והמספר השני נוצר ע"י כל הספרות האי - זוגיות, המופיעות במספר ע"פ סדר הופעתן. דוגמא: אם המספר הוא 3421765, אזי שני המספרים הם: 3175 ו426 וסכומם הוא 3601." תודה מראש לעוזרים
פורסם 2006 באוקטובר 2719 שנים אתה יודע להפריד ספרות במספר (משהו פשוט שמלמדים בדר"כ)?הפתרון הוא לקחת כל ספרה, לבדוק לאיזה מספר היא מתאימה (לזה של הזוגיים או לזה של האיזוגיים) ולהוסיף אותה בצד השמאלי של המספר המתאים.
פורסם 2006 באוקטובר 2719 שנים מחבר שמדובר במספר ספרות מוגדר מראש אני יודע להפריד, אבל פה אינני יודע את מספר הספרות.אני יודע איך אני יכול לספור כמה ספרות יש במספר אבל אח"כ אני לא יודע איך להפריד אותן... ואיך בדיוק אני "מצמיד" מספר לימין המספר השני? נגיד יש לי את המספר 31724 ויוצא לי כמובן ש 3 1 ו-7 הם המספרים האי זוגיים שלי - שאני מחבר אותם התוצאה תהיה לא 317 אלא 11...
פורסם 2006 באוקטובר 2719 שנים יש לך כאן קטע תכנית ב- C# (אני לא יודע פסקלית) שאמור להוות חלק מהפתרון שלך הרעיון הוא לחשב שארית חלוקה ב- 10 של המספר הנתון ולשמור התוצאה בצדאחרי כן לחלק את המספר עצמו ב- 10לחזור שוב ושוב על שני הצעדים הללו בלולאה עד שהמספר שווה ל-0זו הדרך להפריד ספרה אחר ספרה ממספר נתון ומבלי לדעת מראש מה אורכו long n1 = 310819; long x2 = 0; while (n1 > 0) { x2 = n1 % 10; n1 = n1 / 10; }
פורסם 2006 באוקטובר 2719 שנים מחבר יש לך כאן קטע תכנית ב- C# (אני לא יודע פסקלית) שאמור להוות חלק מהפתרון שלך הרעיון הוא לחשב שארית חלוקה ב- 10 של המספר הנתון ולשמור התוצאה בצדאחרי כן לחלק את המספר עצמו ב- 10לחזור שוב ושוב על שני הצעדים הללו בלולאה עד שהמספר שווה ל-0זו הדרך להפריד ספרה אחר ספרה ממספר נתון ומבלי לדעת מראש מה אורכו long n1 = 310819; long x2 = 0; while (n1 > 0) { x2 = n1 % 10; n1 = n1 / 10; }תודה על העזרה אבל לפרק את הספרות הצלחתי, הבעיה שלי כרגע היא איך אני "מצמיד" ספרות כי הרי אם אני אעשה חיבור אז הוא יעשה חיבור..חשבתי להפוך את הספרות לchar ואז לשרשר אותם אחת לשנייה ליצירת מחרוזת ולהפוך חזרה למספר, הבעיה היא שעוד לא למדנו מחרוזת בפסקל ואני לא כ"כ יודע איך לעשות את כל זה בפסקל(בjavascript אני יכול לעשות את זה..).
פורסם 2006 באוקטובר 2719 שנים הבעיה שלך היא שאתה צריך לסרוק את המספר מימין לשמאלכי אז אתה לא צריך לדעת מחרוזות אז אתה יודע בוודאות שהספרה הראשונה תתווסף לספרת האחדותהשניה לספרת העשרות וכו'במקרה כזה מתאים רקורסיה מפרידה את המספר המקורי private static void ExtractDigits(long n) { if (n > 0) { ExtractDigits(n / 10); long x1 = n % 10; } }את ה- x1 בדוגמא אתה בודק אם הוא זוגי או אי זוגי , זה בטח לא בעיה בשבילךואז מוסיף למונה המתאים באופן הבא:עבור כל מונה אתה שומר משתנה מכפיל , שמכפיל עצמו פי 10 בכל פעם שאתה מוסיף ספרה למונה המתאיםנוסחת ההוספה היא x1 מהדוגמה למעלה כפול המכפיל + המונה את התוצאה שומר במונה, מיד אחרי כן את מכפיל את המכפיל ב- 10
פורסם 2006 באוקטובר 2819 שנים תעשה 2 משתני עזר של מספרים שסופרים כמה ספרות יש כבר. למשל, אם זה המספר השלישי, אז צריך לעשות לולאה (עם עוד משתנה עזר) שגדל פי 10 כל ספירה. במקרה שזה המספר השלישי: x=100 (בכלליות, x=x*10).
פורסם 2006 באוקטובר 2819 שנים מחבר תודה Freeze אבל כבר הגעתי לפיתרון בעזרתו האדיבה של NJorl - תודה סתם אם זה מעניין מישהו(בעיקר בשביל חיפוש עתידי או משהו כזה), הנה הפיתרון: program quiz1;var num: integer; digit: integer; diver_even : integer; diver_odd : integer; even: integer; odd : integer; sum: integer;begin diver_even:= 1; diver_odd:= 1; odd := 0; even:= 0; writeln('enter a number without zeroes'); readln(num); while (num mod 10) > 0 do begin digit := num mod 10; num := num div 10; if (digit mod 2) = 0 then begin even := even + (digit * diver_even) ; diver_even := diver_even *10 ; end else begin odd := odd + (digit * diver_odd) ; diver_odd := diver_odd * 10; end;end;sum := odd + even;writeln(odd,"+",even,"=",sum);end.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.