![]() |
|
|
|
|
#1
|
||||
|
||||
|
Добрый день.У меня такая проблема :
мне нужно число разложить на цифры т е например число 432 на 4 на 3 и на 2 да еще и в возрастающем порядке я бы сделал сам с помощью массивов а нужно с помощью множеств я вообще не представляю с какой стороны подойти . Подскажите пожалуйста. |
|
#2
|
|||
|
|||
|
А что должно быть в случае числа, например, 995?
вообще, можно, наверное, тк: Код:
TDigit = (1,2,3,4,5,6,7,8,9,0);
TDigits = Set Of TDigit;
function ParceDigit(A :Integer) : TDigits;
begin
Result := [];
While A > 0 Do
Begin
Result := Result + [A mod 10];
A := A div 10;
End;
end;PS. Не пробовал запускать ![]() По логике - понятно что делается. |
|
#3
|
||||
|
||||
|
нельзя в качесте типа функции указывать сет
|
|
#4
|
||||
|
||||
|
Лучше, сделать в процедуре
Код:
procedure ParceDigit(A :Integer; var d: TDigits); |
|
#5
|
|||
|
|||
|
Цитата:
Исходя из результата функции, которую написал lmikle, я бы отсортировала так: Код:
var
DigitSet: TDigits;
i: TDigit;
ExpandedStr: string;
begin
DigitSet := ParceDigit(StrToInt(Edit1.Text)); // например, в поле Edit написано разлагаемое на цифры число
ExpandedStr := '';
for i := 0 to 9 do
if (i in DigitSet) then ExpandedStr := ExpandedStr + IntToStr(i) + #13#10;
ShowMessage(ExpandedStr);
end;Цитата:
|
|
#6
|
||||
|
||||
|
Строки спасут гиганта мысли.
|
|
#7
|
||||
|
||||
|
Цитата:
1 но рекурсия представленная выше будет бесконечна т к она не дайдет до A := A div 10; )) но смысл понятен спс |
|
#8
|
|||
|
|||
|
Здрасьте, тут нет рекурсии, тут просто цикл. Так что все дойдет.
Не путай специальную ПЕРЕМЕННУЮ result и имя функции. Как раз для того, что бы не надо было делать рекурсию эту переменную и ввели. |
|
#9
|
||||
|
||||
|
вообщем все я сделал. Может кому нибудь пригодиться вот код :
Код:
program qwert;
uses
crt;
type
TDigit= 0..9;
TDigits = Set Of Tdigit;
var
digitSet:Tdigits;
i:Tdigit;
ExpandedStr,s:string;
edit:longint;
procedure F (A:longint; var d :Tdigits);
var
result:Tdigits;
begin
result:=[];
While A > 0 Do
Begin
result:= result + [A mod 10];
A := A div 10;
End;
d:=result;
end;
function IntToStr(i:longint):String;
var
s:string;
begin
str(i,s);
IntToStr:=s;
end;
begin
clrscr;
Writeln('Введите число для разложения');
readLn(edit);
F(edit,Digitset);
ExpandedStr :='';
for i:= 0 to 9 do
if (i in DigitSet)
then
ExpandedStr := ExpandedStr + IntTostr(i) + #13#10;
Write(ExpandedStr,' ');
end. |