לכתוב תוכנית שקולטת 10 מספרים ומחשבת את ההפרש בין השאלית לימנית

נתונה השאלה:
כתוב תוכנה אשר קולטת עשרה מספרים ומחשבת את ההפרש בין הספרה השמאלית ביותר לימנית ומדפיסה באיזה מספר ההפרש בין הספרה השמאלית ביותר לבין הימנית ביותר הוא הגדול ביותר.

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

ניסיתי לעשות ככה:

int x, sum=0, g;
x=int.Parse(Console.ReadLine());
while(x != 0) {
    x = int.Parse(Console.ReadLine());
    int y = (x % 10);
    y = int.Parse(Console.ReadLine());
    string s = x.ToString();
    int z = s[0];
    g = z-y;
    sum = sum+g;
    x++;
    x = int.Parse(Console.ReadLine());
}
Console.WriteLine(sum);

לא יצא לי הפלט שציפיתי.

קשה להבין מה התוכנית אמורה לעשות, אבל אני מניח שזאת התוצאה המצופה:

Input: 10 20 30 40 50 60 70 80 90 100
Output: 90

התוצאה היא 90 שכן ההפרש 9-0=9 הוא הגדול ביותר. כמו כן, לא מובן מה התוכנית אמורה לעשות במצב שהיא מקבלת מספר חד ספרתי כמו 5 (האם ההפרש הוא 5 או 0?).

בכל מקרה, התוכנית הבאה בשפת C# אמורה לעזור לך:

using System;

class GetMaxNumber {
  static void Main() {
    int counter = 0, max_diff = -10, max_number = -10;
    while (true) {
      if (counter == 10) {
        break;
      }
      int current = int.Parse(Console.ReadLine());
      int left_digit = getLeftDigit(current);
      int right_digit = getRightDigit(current);
      if (left_digit - right_digit > max_diff) {
        max_diff = left_digit - right_digit;
        max_number = current;
      }
      counter++;
    }
    Console.WriteLine(max_number);
  }
  
  private static int getLeftDigit(int number) {
    int result = Math.Abs(number);
    while(result >= 10) {
      result /= 10;
    }
    return result;
  }

  private static int getRightDigit(int number) {
    return number % 10;
  }
}

הפלט עבור הסדרה למעלה הוא 90. נעבור בקצרה על התוכנית. אנו מגדירים משתנה count שיספור כמה מספרים הכנסו וברגע שהגענו לעשרה, ניצא מהלולאה. כמו כן, המשתנה max_diff יכיל את ההפרש המירבי בין הספרה השמאלית ביותר לימנית ביותר ואילו המשמתנה max_number יכיל את המספר שמקיים תנאי זה. נרוץ בלולאה ובכל פעם נקבל את הקלט של המשתמש. הפונקציה getLeftDigit(int) מחזירה את הספרה השמאלית ביותר של מספר ואילו הפונקציה getRightDigit(int) מחזירה את הספרה הימנית ביותר של מספר. ברגע שחישבנו אותם, נבדוק האם ההפרש בין השמאלי לימני גדול יותר מה-max_diff שחישבנו. אם כן, אז נשמור את ההפרש ואת המספר שמקיים את התנאי. כך נמשיך עד שנעבור על עשרת המספרים, ניצא מהלולאה ונדפיס את התוצאה.

התוכנית אמורה לרוץ באופן כללי עבור כל מספר שיכניסו עד שמגיעים ל10 מספרים- מפסיקים ובמקרה של מספר אחד המספר הימני הוא גם השמאלי נאמר אבל אני לא יודע עד כמה יש צורך לבדוק את תקינות הפלט
ויש לי שאלה למה max_diff ו max_counter שווה -1?

שיניתי את הערך ההתחלתי ל--10 של שני המשתנים max_diff ו-max_counter. בתוך התנאי המותנה שנמצא בתוך הלולאה אתה בודק אם left_digit - right_digit > max_diff ולכן בשביל האיטרציה הראשונה אתה צריך ערך התחלתי (עבור max_diff). לא קיים מספר ככה שההפרש בין הספרה השמאלית לספרה הימנית שווה למינוס עשר ולכן זהו הערך ההתחלתי ששמתי. שים לב כי אתה לא חייב ערך התחלתי בשביל max_number.