צריך עזרה בשיעורי בית - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

צריך עזרה בשיעורי בית


Judas Iscariot

Recommended Posts

קיבלתי את התרגיל הבא לשיעורי בית במדעי המחשב(פסקל):

"כתוב תוכנית הקולטת מספר טבעי כלשהו, שאינו כולל אפסים.

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

מספר אחד נוצר ע"י כתיבת כל הספרות הזוגיות, המופיעות במספר, ע"פ סדר הופעתן, והמספר השני נוצר ע"י כל הספרות האי - זוגיות, המופיעות במספר ע"פ סדר הופעתן.

דוגמא: אם המספר הוא 3421765, אזי שני המספרים הם: 3175 ו426 וסכומם הוא 3601."

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

קישור לתוכן
שתף באתרים אחרים

אתה יודע להפריד ספרות במספר (משהו פשוט שמלמדים בדר"כ)?

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

קישור לתוכן
שתף באתרים אחרים

שמדובר במספר ספרות מוגדר מראש אני יודע להפריד, אבל פה אינני יודע את מספר הספרות.

אני יודע איך אני יכול לספור כמה ספרות יש במספר אבל אח"כ אני לא יודע איך להפריד אותן... ואיך בדיוק אני "מצמיד" מספר לימין המספר השני? נגיד יש לי את המספר 31724 ויוצא לי כמובן ש 3 1 ו-7 הם המספרים האי זוגיים שלי - שאני מחבר אותם התוצאה תהיה לא 317 אלא 11...

קישור לתוכן
שתף באתרים אחרים

יש לך כאן קטע תכנית ב- C# (אני לא יודע פסקלית) שאמור להוות חלק מהפתרון שלך

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

אחרי כן לחלק את המספר עצמו ב- 10

לחזור שוב ושוב על שני הצעדים הללו בלולאה עד שהמספר שווה ל-0

זו הדרך להפריד ספרה אחר ספרה ממספר נתון ומבלי לדעת מראש מה אורכו

      long n1 = 310819;
long x2 = 0;

while (n1 > 0)
{
x2 = n1 % 10;
n1 = n1 / 10;
}

קישור לתוכן
שתף באתרים אחרים

יש לך כאן קטע תכנית ב- C# (אני לא יודע פסקלית) שאמור להוות חלק מהפתרון שלך

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

אחרי כן לחלק את המספר עצמו ב- 10

לחזור שוב ושוב על שני הצעדים הללו בלולאה עד שהמספר שווה ל-0

זו הדרך להפריד ספרה אחר ספרה ממספר נתון ומבלי לדעת מראש מה אורכו

      long n1 = 310819;
long x2 = 0;

while (n1 > 0)
{
x2 = n1 % 10;
n1 = n1 / 10;
}

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

חשבתי להפוך את הספרות לchar ואז לשרשר אותם אחת לשנייה ליצירת מחרוזת ולהפוך חזרה למספר, הבעיה היא שעוד לא למדנו מחרוזת בפסקל ואני לא כ"כ יודע איך לעשות את כל זה בפסקל(בjavascript אני יכול לעשות את זה..).

קישור לתוכן
שתף באתרים אחרים

הבעיה שלך היא שאתה צריך לסרוק את המספר מימין לשמאל

כי אז אתה לא צריך לדעת מחרוזות

אז אתה יודע בוודאות שהספרה הראשונה תתווסף לספרת האחדות

השניה לספרת העשרות וכו'

במקרה כזה מתאים רקורסיה מפרידה את המספר המקורי

    private static void ExtractDigits(long n)
{
if (n > 0)
{
ExtractDigits(n / 10);
long x1 = n % 10;
}
}

את ה- x1 בדוגמא אתה בודק אם הוא זוגי או אי זוגי , זה בטח לא בעיה בשבילך

ואז מוסיף למונה המתאים באופן הבא:

עבור כל מונה אתה שומר משתנה מכפיל , שמכפיל עצמו פי 10 בכל פעם שאתה מוסיף ספרה למונה המתאים

נוסחת ההוספה היא x1 מהדוגמה למעלה כפול המכפיל + המונה את התוצאה שומר במונה, מיד אחרי כן את מכפיל את המכפיל ב- 10

קישור לתוכן
שתף באתרים אחרים

תעשה 2 משתני עזר של מספרים שסופרים כמה ספרות יש כבר. למשל, אם זה המספר השלישי, אז צריך לעשות לולאה (עם עוד משתנה עזר) שגדל פי 10 כל ספירה. במקרה שזה המספר השלישי: x=100 (בכלליות, x=x*10).

קישור לתוכן
שתף באתרים אחרים

תודה 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.



קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...