![]() |
|
|
#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); Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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. |