הערה: בתרגילים הבאים נדרש לבצע פעולות על נתונים עוקבים (תווים או מספרים). כדי להשוות בין ערכים סמוכים, נשתמש בגִּלְגוּל (שמירת היסטוריה)
שאלה 4.5.1
כתבו תוכנית הקולטת 30 תווים ובודקת כמה תווים עוקבים יש בקלט.
(טיפוס תווי הוא טיפוס סדרתי שניתן להשוואה ולבדיקה גדול/קטן – המערכת מבצעת השוואה אוטומטית מול קוד ה- ASCII של התו).
לדוג’ עבור 8 התווים הבאים:
t, a, d, c, d, c, s, t
הפלט יהיה:
2
שאלה 4.5.2
כתבו תוכנית הקולטת 50 מספרים ובודקת כמה שלשות סמוכות בהן המספר האמצעי גדול משני המספרים הסמוכים לו.
לדוג’ עבור 8 המספרים הבאים:
25, 40, 30, 9, 80, 40, 45, 42
הפלט יהיה:
3
פתרון
נסרוק כל שלשה סמוכה במערך, ונספור כמה פעמים המספר האמצעי גדול משני המספרים הסמוכים.
1
2
3
4
5
6
7
8
9
10
11
12
int[] arr = new int[] {25, 40, 30, 9, 80, 40, 45, 42};
int count = 0;
for (int i = 1; i < arr.Length - 1; i++)
{
if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1])
{
count++;
}
}
Console.WriteLine(count); // פלט: 3
שאלה 4.5.3
כתבו תוכנית הקולטת 40 תווים ובודקת כמה שלשות סמוכות בהן האמצעי שונה משני התווים הסמוכים והם שווים ביניהם.
לדוג’ עבור 10 התווים הבאים:
s, r, t, r, t, a, b, b, b, a
הפלט יהיה:
2
שאלה 4.5.4
עקבו אחרי הקוד הבא עבור צמדי הקלטים
- (90,100),
- (200,300),
- (150,100)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void Main()
{
// קליטה של זוג ראשון
Console.WriteLine("Enter 2 int numbers");
int prev1 = int.Parse(Console.ReadLine()); // storing history in prev1 (previous1)
int prev2 = int.Parse(Console.ReadLine()); // for storing history.
for (int i = 0; i < 108; i++)
{
Console.WriteLine("Enter 2 int numbers");
int current1 = int.Parse(Console.ReadLine());
int current2 = int.Parse(Console.ReadLine());
if (current1 + current2 < prev1 + prev2)
{
Console.WriteLine("smaller");
}
// למה צריך לשים כאן ולא להתאפק לסיבוב הבא?
prev1 = current1; // החלק החשוב בפעולה
prev2 = current2;
}
}
פתרון
טבלת מעקב
# (שורות) | prev1 | prev2 | current1 | current2 | i | i<108 | if | פלט |
---|---|---|---|---|---|---|---|---|
1-4 | Enter 2 int numbers | |||||||
5,6 | 90 | 110 | ||||||
8 | 0 | true | ||||||
9 | Enter 2 int numbers | |||||||
11-13 | 200 | 300 | false | |||||
18-19 | 200 | 300 | ||||||
8-10 | 1 | true | Enter 2 int numbers | |||||
11-13 | 150 | 100 | true | |||||
15 | smaller | |||||||
18-19 | 150 | 100 | ||||||
8-10 | 2 | true | Enter 2 int numbers | |||||
… | … | … | … | |||||
8 | 108 | false | ← יציאה מהלולאה | |||||
סיום התוכנית |