НВ
Наталья Ведищева

Помогите решить задачу в Паскале. Дано 3-ех значное число x, какое наибольшее число можно составить из цифр числа x.



Нужна программа в Pascal. Число должно быть random-но.

Нужна программа с циклом for.

Са
Сангерим

Разбиваете на разряды, потом сортируете их так, что самый большой - слева, по меньше следующий и самый маленький справа.

Артур
Артур

procedure swap(var x, y: integer);
var
t: integer;
begin
t := x;
x := y;
y := t;
end;

var
n, c: integer;
a: array [1..3] of integer;
begin
randomize;
n := random(900) + 100;
writeln('число: ', n);

for c := 1 to 3 do begin
a[c] := n mod 10;
n := n div 10;
end;

if a[1] < a[2] then swap(a[1], a[2]);
if a[2] < a[3] then swap(a[2], a[3]);
if a[1] < a[2] then swap(a[1], a[2]);

n := 0;
for c := 1 to 3 do n := n * 10 + a[c];
writeln('результат: ', n);
end.

НЛ
Наталья Любова

придумал два способа. первый способ пригодиться если можно использовать внутренние классы среды Delphi, так как использует тип TStringList, который имеет подпрограмму сортировки. То есть самому не надо мучаться с реализацией этой функции. Второй способ наверное более универсален читай классический, хотя использует функции IntToStr и StrToInt, но у них есть эквиваленты, которые наверное присутствовали еще во времена Turbo Pascal - точно не знаю, гугли одним словом насчет этого или смотри их исходный код, либо читай справку. Обе функции универсальны, то есть позволяют работать не только с трехзначными числами, а с любыми 4, 5-тизначными и тд.

1 способ:
function TheBiggest(const S : string) : Integer;
var
SL : TStringList;
I, M : Integer;
Temp : string;
Y : Integer;
begin
Result := -1;

SL := TStringList.Create;
with SL do
try
try
// Определяем длину исходной строки, добавляем каждый отдельный символ
// этой строки в качестве новой строки в список SL. Производим сортировку
// списка. Нумерация символов в строке в Delphi идет от 1.
M := Length(S);
for I := 1 to M do
Add(S[ I ]);
Sorted := True;

// Задаем значение временной переменной Temp каждую отдельную строку, но в
// обратном порядке, так как применение команды Sorted := True привело к
// тому, что в списке SL содержатся числа от меньшего к большему в каждой
// строке; нам же необходимо произвести обратное действие. Нумерация строк
// в SL идет от 0.
Dec(M);
Temp := '';
for I := M downto 0 do
Temp := Temp + Strings[ I ] + sLineBreak;

// Определяем длину символов переноса строки (значение Y), первую позицию
// символов переноса строки во временной переменной Temp (значение I) и
// пока этот символ (символы для ОС Windows) присутствуют в Temp удаляем
// их из этой строки. Удаление производится с помощью цикла while.
Y := Length(sLineBreak);
I := Pos(sLineBreak, Temp);
while ( I > 0 ) do
begin
System.Delete(Temp, I, Y);
I := Pos(sLineBreak, Temp);
end; // while

// Готовый результат преобразовываем из строчного типа в тип Integer.
Result := StrToInt(Temp);
except
end; // try..except
finally
Free;
end; // with..try..finally
end;

-----------
2 способ:
function TheBiggest2(S : string) : Integer;
type
TBiggestArray = array of Integer;
var
I, J, N, L : Integer;
ba : TBiggestArray;
begin
Result := -1;

// Определяем длину исходной строки, а также устанавливаем размер массива ba.
// Заполняем массив ba таким образом, чтобы каждый отдельный символ строки S
// был отдельным элементом массива. Чтобы осуществить стандартную нумерацию
// элементов массива (то есть от нуля) используем присваивание очередного
// символа элементу массива под номером I - 1.
L := Length(S);
SetLength(ba, L);
for I := 1 to L do
ba[ I - 1 ] := StrToInt(S[ I ]);

// Осуществляем пузурьковую сортировку. Источник ©Drkb::04144. Код
// адаптирован.
Dec(L);
for J := 0 to L do
begin
for I := 1 to L - J do
begin
if ( ba[ I - 1 ] < ba[ I ] ) then
begin
N := ba[ I - 1 ];
ba[ I - 1 ] := ba[ I ];
ba[ I ] := N;
end; // if
end; // for
end; // for

// Преобразовываем элементы массива вначале в строку S, а затем эту строку в
// тип Integer.
S := '';
for I := 0 to L do
S := S + IntToStr(ba[ I ]);
Result := StrToInt(S);
end;

2 способ - это реализация идеи предложенной алексеем
цветов не надо)) ) глупый мэйл-ответы может удалять S[ I ], если что пиши на мыло кину. рандомное число сам уж сгенерируешь

Похожие вопросы
Дано число х. Определите к какому 3-значному числу надо прибавить х что бы получилось наименьшее 4 значное. Помогиите реш
Решить задачу через Паскаль. Дано трёхзначное число. Составить программу для нахождения произведения цыфр этого числа.
Дано 3 значное число найти сумму 1 и посл. числа. Паскаль
Помогите составить задачу на Паскале
Помогите решить задачу в паскале: Найти все 2-х значные числа сумма которых кратна 3
дано натуральное 5 значное число n.Сколько раз в данном числе встречаются цифры 4 или 8?
решить задачу в паскале случайным числом!
Помогите составить задачу по паскалю.
Необходимо решить задачу в Паскале: 1.Дано натуральное число. Определить: сумму его первой и последней цифр.
Паскаль Как обозначить число>=x>число в паскале?