Обработка данных различных типов. - Pascal

Узнай цену своей работы

Формулировка задачи:

На вход программе подается набор символов, заканчивающийся символом 0 (в программе на языке Бейсик символы можно вводить по одному в строке, пока не будет введен ноль, или считывать данные из файла). Ноль в этом наборе единственный. Среди этих символов обязательно присутствуют другие десятичные цифры. Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет составлять из имеющихся цифр число максимальной длины, которое читается одинаково как слева направо, так и справа налево. Нулей в числе быть не должно (ноль является признаком окончания ввода, а не одним из символов). Если таких чисел несколько, то надо вывести минимальное из них. Все имеющиеся в наборе цифры использовать не обязательно, но количество цифр в ответе должно быть максимально возможным. Например, пусть на вход подаются следующие символы: for i:=9991 downto 10 В данном случае программа должна вывести 19991

Помогите, пожалуйста, решить задачу

Решение задачи: «Обработка данных различных типов.»

textual
Листинг программы
var n : array [#49..#57] of Integer; c, x : Char; i : Byte;
begin
  for c := #49 to #57 do n[c] := 0;
  c := #0; x := #48;
  while Not EOLN and (c <> #48) do
    begin
      Read(c);
      if c in [#49..#57] then
        begin
          inc(n[c]);
          if c > x then x := c;
        end;
    end;
  if x > #48 then
    begin
      for c := #49 to Pred(x) do
        begin
          n[c] := n[c] div 2;
          for i := 1 to n[c] do Write(c);
        end;
      for i := 1 to n[x] do Write(x);
      for c := Pred(x) downto #49 do
        for i := 1 to n[c] do Write(c);
    end;
end.

Объяснение кода листинга программы

  1. Объявлены три переменные: массив n, переменная c и переменная x. Значения массива n инициализированы нулями. Переменная c инициализируется значением #49, а переменная x - значением #48.
  2. Запускается цикл while, который будет выполняться до тех пор, пока не будет достигнут конец строки (EOLN) и значение переменной c не станет равным #48.
  3. Внутри цикла while выполняется еще один цикл for, который перебирает все допустимые значения переменной c (от #49 до #57). Если значение переменной c входит в этот диапазон, то к элементу массива n[c] прибавляется единица. Если значение переменной c больше, чем значение переменной x, то значение переменной x присваивается значение переменной c.
  4. После окончания цикла while проверяется значение переменной x. Если оно больше #48, то выполняется еще один цикл for, который перебирает все значения переменной c от #49 до значения переменной x (включительно). Для каждого значения переменной c из этого диапазона выполняется деление значения элемента массива n[c] на два и выводится на экран значение переменной c.
  5. Затем значение переменной x уменьшается на единицу, и для всех значений переменной c от #49 до значения переменной x (включительно) выводится на экран значение элемента массива n[c].
  6. Затем значение переменной x уменьшается на единицу, и для всех значений переменной c от значения переменной x (включительно) до #49 выводится на экран значение элемента массива n[c].

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы