Помогите решить задачу в Паскале. Дано 3-ех значное число x, какое наибольшее число можно составить из цифр числа x.
Нужна программа в Pascal. Число должно быть random-но.
Нужна программа с циклом for.
Нужна программа в 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 ], если что пиши на мыло кину. рандомное число сам уж сгенерируешь