Завдання.
Визначити скільки треба взяти купюр номіналом 1грн., 2 грн., 5 грн., щоб в сумі було 25 грн. Визначити всі можливі варіанти.
Спочатку створимо форму для даного проекту. На формі розмістимо компонент Мемо для виводу можливих варіантів, кнопку Butoon для виводу результатів, текстове поле Label та та поле редагування Edit. Для того, щоб проект виглядав гарніше можна розмістити зображення купюр, використавши компонент Image.
Для компонента Memo виберемо властивість Srollbars і задамо значення ssVertical. Це означає, що для цього компонента має бути вертикальна смуга прокручування. Якщо результатів задачі буде багато і їх всіх не буде видно в Мемо, то за допомогою смуги прокручування їх можна всіх переглянути.
Тепер створимо подію для кнопки Результат і будемо писати код програми.
Спочатку опишемо всі змінні, які будуть використовуватись в програмі.
Suma - сума, яка буде вводитись в поле Edit. Для даного проекту вона буде дорівнювати 25. (можна ввести і іншу суму);
Xmax - максимальна кількість купюр номіналом 1 гривня, яка може бути для того, щоб сума = 25;
Ymax - максимальна кількість купюр номіналом 2 гривні, яка може бути для того, щоб сума = 25;
Zmax - максимальна кількість купюр номіналом 5 гривень, яка може бути для того, щоб сума = 25;
Для визначення Xmax, Ymax, Zmax слід використати операцію div - визначення цілої частини від ділення суми (Suma).
Наприклад : Ymax:=Suma div 2, якщо Suma=25, то вийде 12. Тобто найбільшу кількість купюр номіналом 2 гривні можна взяти 12.( 12*2=24, більше бути не може).
x,y,z - змінні для лічильників циклу, які будуть здійснювати перебір від 0 до максимальної кількості купюр.
Після цього організовуємо три цикли для(for) і визначаємо методом перебору кількість купюр і за допомогою команди if перевіряємо чи дана комбінація 1*x+2*y+z*5 буде дорівнювати 25.
Якщо так, то переводимо x,y,z в текстові величини xs,ys,zs і виводимо цей результат в поле Мемо.
procedure TForm1.Button1Click(Sender: TObject);
var Suma,Xmax,Ymax,Zmax,x,y,z:integer;
xs,ys,zs:string;
begin
Suma:=StrToInt(Edit1.Text);
Xmax:=Suma div 1;
Ymax:=Suma div 2;
Zmax:=Suma div 5;
for x:=0 to Xmax do
for y:=0 to Ymax do
for z:=0 to Zmax do
if 1*x+2*y+z*5=Suma then
begin
xs:=IntTostr(x);
ys:=IntTostr(y);
zs:=IntTostr(z);
Memo1.Lines.Add(xs+' '+ys+' '+zs);
end;
end;
Після виконання програми отримаємо такий результат: