Другие языки программирования и технологии

Помогите пожалуйста с программированием

Дано натуральное число Н. Найти максимальное и минимальное число, которое состоит с тех самых цифр и в том же каличестве, что и Н. Входные данные: целое число Н. Исходные данные: в одной строчке должно выводится минимальное и через пробел максимальное число.
Например: Вводится 7051
Выводится 1057 7510.
Мне нужно либо программа в Паскале либо обяснение, чтобы я её сама написала. Помогите пожалуйста
В разных задачах, при отладке и работе с программой могут возникать ошибки, связанные с вводом числовых значений.
К ним относятся следующие возможные ограничения:
− значение не должно превышать максимального значения типа числа
− значение должно быть только целочисленным
− значение должно быть только положительным
− значение должно содержать только цифры

Если эти условия не соблюдаются, то возникает ошибка ввода значения.

Конкретно для данной задачи можно воспользоваться вводом набора цифр в строковую переменную и работать с ней:

1) введём значение в строковую переменную

2) проверить на допустимость символа — только символы цифр от '0' до '9'

3) проверить на ведущий '0' — нормальное число обычно начинается с любой цифры оличной от 0

Со строкой и работать проще…
Просто нужно выяснить сколько раз какой символ входит в введённое значение.

4) посчитаем сколько раз какая цифра входит в число и соответствующим образом заполним массив

5) простым перебором значений от '0' до '9' соберём минимальное и максимальное число исходя из полученных значений массива

Просто для минимального числа, цифры с более большим значением будем добавлять в конец, а для максимального − в начало…

6) т. к. стока, относящаяся к минимальному числу, может начинаться с 0, мы должны найти первое вхождение в строку значения отличного от 0 и поменять его с первым символом строки.

Вот всё решение задачи:

var S, Min, Max : String; N : Byte; Ch : Char; A : array ['0'..'9'] of Byte;
begin
Write('Введите натуральное число: '); ReadLn(S);

{ Проверим на правильность ввода числа }
for N := 1 to Length(S) do if Not (S[N] in ['0'..'9']) then begin WriteLn('Число должно состоять только из цифр. '); Halt; end;
if S[1] = '0' then begin WriteLn('Натуральное число не должно начинаться с 0.'); Halt; end;

{ Выясним сколько раз какая цифра входит в число }
for Ch := '0' to '9' do A[Ch] := 0;
for N := 1 to Length(S) do Inc(A[S[N]]);

{ Соберём максимальное число и минимальное число }
Max := ''; Min := '';
for Ch := '0' to '9' do for N := 1 to A[Ch] do begin Max := Ch + Max; Min := Min + Ch; end;

{ В минимальном числе первая цифра должна быть отлична от 0 }
if Min[1] = '0' then
begin
{ Поменяем первую слева цифру отличную от 0 и ведущий ноль }
N := 1; repeat Inc(N); until Min[N] <> '0';
Min[1] := Min[N]; Min[N] := '0';
end;

WriteLn(Min, #32, Max);
end.

Вот результат работы программы:

Введите натуральное число: 7051
1057 7510

Введите натуральное число: 951023654789
102345567899 998765543210

Видите как всё просто!
При этом мы не ограничиваем пользователя вводом значения числа… ну разве что 255 символов ;-)
Мухамед Дуйсенбаев
Мухамед Дуйсенбаев
61 887
Лучший ответ
Вот мой подход:
разбить число на цифры, записать их в переменные
цифры поставить по возрастанию и составить из этого наименьшее число
цифры поставить по убыванию и составить из этого наибольшее число
вывести на экран

H - 185
8 5 1 наибольшее
1 5 8 наименьшее