Advertisement
AlexPshkov

TravelLine task

May 24th, 2022
776
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Task for TravelLine
  2. // Author: Alex Krasheninnikov
  3. // Date 24.05.2022
  4.  
  5. PROGRAM NumberConverter(INPUT, OUTPUT);
  6. TYPE
  7.   AbstractNumber = RECORD
  8.     Value: INTEGER;
  9.     Digits: ARRAY [1 .. 10] OF INTEGER;
  10.     Length: INTEGER;
  11.     NumberSytemBase: INTEGER;
  12.   END;
  13. VAR
  14.   Number: AbstractNumber;
  15.  
  16. PROCEDURE MakeDigitsInSuchNumberSystemBase(VAR LocalNumber: AbstractNumber);
  17. {Получаем цифры числа в заданной системе счисления и записываем их в объект числа}
  18. VAR
  19.   Counter, Value: INTEGER;
  20. BEGIN {MakeDigitsInSuchNumberSystemBase}
  21.   Counter := 1;
  22.   Value := LocalNumber.Value;
  23.   WHILE Value <> 0
  24.   DO
  25.     BEGIN
  26.       LocalNumber.Digits[Counter] := Value MOD LocalNumber.NumberSytemBase;
  27.       Value := Value DIV LocalNumber.NumberSytemBase;
  28.       Counter := Counter + 1
  29.     END;
  30.   LocalNumber.Length := Counter - 1
  31. END; {MakeDigitsInSuchNumberSystemBase}
  32.  
  33. FUNCTION ReadAbstractNumber(VAR InputFile: TEXT): AbstractNumber;
  34. {Получаем объект числа}
  35. VAR
  36.   LocalNumber: AbstractNumber;
  37. BEGIN {ReadAbstractNumber}
  38.   READLN(InputFile, LocalNumber.Value, LocalNumber.NumberSytemBase);
  39.   MakeDigitsInSuchNumberSystemBase(LocalNumber);
  40.   ReadAbstractNumber := LocalNumber
  41. END; {ReadAbstractNumber}
  42.  
  43. FUNCTION MultiplyDigits(LocalNumber: AbstractNumber): INTEGER;
  44. {Получаем результат перемножения цифр числа}
  45. VAR
  46.   Counter, Result: INTEGER;
  47. BEGIN {MultiplyDigits}
  48.   Result := 1;
  49.   FOR Counter := 1 TO LocalNumber.Length
  50.   DO
  51.     Result := Result * LocalNumber.Digits[Counter];
  52.   MultiplyDigits := Result
  53. END; {MultiplyDigits}
  54.  
  55. FUNCTION SumDigits(LocalNumber: AbstractNumber): INTEGER;
  56. {Получаем результат сложения цифр числа}
  57. VAR
  58.   Counter, Result: INTEGER;
  59. BEGIN {SumDigits}
  60.   Result := 0;
  61.   FOR Counter := 1 TO LocalNumber.Length
  62.   DO
  63.     Result := Result + LocalNumber.Digits[Counter];
  64.   SumDigits := Result
  65. END; {SumDigits}
  66.  
  67. BEGIN {NumberConverter}
  68.   Number := ReadAbstractNumber(INPUT);
  69.   WRITELN(OUTPUT, (MultiplyDigits(Number) - SumDigits(Number)))
  70. END. {NumberConverter}
Advertisement
RAW Paste Data Copied
Advertisement