29-10-2012, 20:50
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,775
|
|
ג'אווה אני לא יודע, אז פתרון כללי...
1. הגדרת וקטור של int-ים, משתנה זמני לאחסון המספר הגדול (או הקטן) ביותר עד כה, ומונה כדי לספור כמה פעמים כבר עלית מספר (שאותו תאתחל ל 0)
2. לולאה שרצה כל עוד הקלט שונה מ 0
3. הכנסת הקלט לוקטור אם הוא גדול מ 0 (ושלם? אני משער שתצטרך לבדוק, או שלא, תלוי בהנחיותיך)
4. אחרי הלולאה - מיין את הוקטור מגדול לקטן או קטן לגדול (לא יודע אם רביעי בגודלו הכוונה מלמטה או מלמעלה)
5. הכנס במשתנה הזמני לאחסון המספר הגדול (או הקטן) מסעיף 1 את הערך הראשון בוקטור
6. תתחיל לרוץ בלולאה על הוקטור הממויין, בכל פעם שהערך גדול יותר (או קטן יותר) מהערך השמור, אחסן את הערך הזה במשתנה הזמני (סעיף 5), וקדם את המונה שסופר כמה פעמים כבר עלית מספר (סעיף 1) - ב 1. תנאי הלולאה צריך להיות שלא הגעת לסוף הוקטור וגם שהמונה הזה - קטן מ 3 (כי אחרי שעברת 3 מספרים גדולים יותר מהמספר הראשון, אתה במספר הרביעי בגודלו) - ואז הגענו למספר הרצוי, ואפשר לצאת מהלולאה
7. תדפיס את הערך שבמשתנה שבסעיף 5
שים לב למקרה שבו אין 4 מספרים שגדולים אחד מהשני בקלט שהוכנס מהמשתמש. במקרה זה, הוקטור יגמר, ויהיה לך את המספר הגבוה ביותר ברשימה שהוחזרה על ידי המשתמש, אך הוא לא יהיה הרביעי בגודלו [כי אין כזה], אלא הערך של המונה ועוד 1 בגודלו. ייתכן שתרצה לעשות בדיקה על כך (שבסוף הלולאה אכן המונה שווה ל 3), ובהתאם להציג הודעה שמראה שהבחנת בכך. כנ"ל במידה ולא הוכנס אף נתון חוקי (ואז אין טעם בכלל לנסות למיין ולרוץ על ערכים...)
עד כאן שיעורי בית. מקווה שאין לי פספוס של off-by-one (או שגיאה חמורה יותר), כי אני מת מעייפות, וזה לא מצב טוב לפתור בו שאלות שיעורי בית
כתבתי ב PHP ונראה לי שעובד
קוד PHP:
<?php
$arr = array();
echo "Please enter many numbers, ENTER after each number, and 0 when you're done. ";
while (($input = trim(fgets(STDIN))) != 0)
if ($input > 0)
$arr[] = (int) $input;
if (empty($arr))
die("No valid numbers were entered, quitting! \n");
sort($arr, SORT_NUMERIC);
$biggest_so_far = reset($arr);
$count = 0;
foreach($arr as $number)
{
if ($number > $biggest_so_far)
{
$biggest_so_far = $number;
$count++;
}
if ($count == 3)
break;
}
if ($count == 3)
echo 'The 4th value is ' . $biggest_so_far;
else
echo 'There are no 4 different values in the user input, only ' . ($count+1) . '. Largest one being ' . $biggest_so_far;
echo "\n";
?>
ריצה:
קוד:
$ php 4th.php
Please enter many numbers, ENTER after each number, and 0 when you're done. 6
4
9
36
76
36
9
8
6
20
0
The 4th value is 9
$ php 4th.php
Please enter many numbers, ENTER after each number, and 0 when you're done. 5
8
5
8
5
8
3
0
There are no 4 different values in the user input, only 3. Largest one being 8
|