سلام،
اگر تابع FloatToStr را برای تبدیل نوع اعداد حقیقی به رشته حرفی داشته باشی شاید برنامه زیر کمکت کند:
ایده این است که از میان تمامی زیرمجموعه های مجموعه اعداد داده شده، آنهایی را که مجموع اعضاشان برابر عدد دلخواه است چاپ می کند. این همان توضیح آقا/خانم Seyedof است.
const
CMAX_NUMBERS=5;
function GetBit(N:Cardinal;n:Integer):I nteger;
begin
GetBit:=(N shr n) and 1;
end
var
Number:array[1..CMAX_NUMBERS] of Extended;
DesiredSum:Extended;
function CalcSum(N:Cardinal):Extended;
var
i:Integer;
Sum:Extended;
begin
Sum:=0;
for i:=0 to CMAX_NUMBERS-1 do
Sum:=Sum+GetBit(N,i)*Number[i+1	 3;;
CalcSum:=Sum;
end;
procedure PrintEqu(N:Cardinal);
var
i:Integer;
Sum:Extended;
AStr:String;
begin
AStr:=FloatToStr(DesiredSum)+'=';
for i:=0 to CMAX_NUMBERS-1 do
if GetBit(N,i)<>0 then
AStr:=AStr+FloatToStr(Number[i+1]& #41;+'+';
if AStr[Length(AStr)]='+' then
Delete(AStr,Length(AStr),1);
writeln(AStr);
end;
var
i:Cardinal;
begin
for i:=1 to (1 shl CMAX_NUMBERS)-1 do
begin
if CalcSum(i)=DesiredSum then
PrintEqu(i);
end;
end;