Моделирование. Задачи на оптимизацию

Содержание

Слайд 2

ВЛОЖЕННЫЕ ЦИКЛЫ

Старинная задача.
Сколько можно купить быков, коров и телят, при

ВЛОЖЕННЫЕ ЦИКЛЫ Старинная задача. Сколько можно купить быков, коров и телят, при
условии, что плата за быка 10 рублей, за корову – 5 рублей, за телёнка – полтинник (0,5 руб.). На 100 рублей надо купить 100 голов скота.

Слайд 3

Решение.
Обозначим через
b - количество быков;
k - количество коров;

Решение. Обозначим через b - количество быков; k - количество коров; t

t - количество телят.
После этого можно записать два уравнения: 10b + 5k + 0,5t = 100 и
b + k + t = 100.

Слайд 4

Преобразуем их:
20b + 10k + t = 200 и
b

Преобразуем их: 20b + 10k + t = 200 и b +
+ k + t = 100
Из условия задачи следует, что на 100 рублей можно купить:
не более 100/10 = 10 быков, т. е. 0 ≤ b ≤ 10,
не более 10/5 = 20 коров, т. е. 0 ≤ k ≤ 20,
не более 100/0,5 = 200 телят, т. е. 0 ≤ t ≤ 200.

Слайд 5

Таким образом, получаем:
program old_task;
var b,k,t:integer;
begin
for b:=0 to 10

Таким образом, получаем: program old_task; var b,k,t:integer; begin for b:=0 to 10
do
for k:=0 to 20 do
for t:=0 to 200 do
if(20*b+10*k+t)=200 and (b+k+t=100)then
writeln (‘Быков ‘,b,‘коров ‘,k, ‘телят ‘,t);
end.

Результат: Быков 1 коров 9 телят 90

Слайд 6

Сколько раз будет проверяться условие в данной программе (оператор If)?
Значение переменной

Сколько раз будет проверяться условие в данной программе (оператор If)? Значение переменной
b изменяется 11 раз (от 0 до 10),
для каждого её значения
переменная k изменяется 21 раз ( от 0 до 20),
а для каждого значения переменной k
переменная t изменяется 201 раз (от 0 до 200).
Таким образом, условие будет проверяться
11 • 21 • 201 = 46431 раз.

Слайд 7

Но если известно количество быков и коров, то количество телят можно вычислить

Но если известно количество быков и коров, то количество телят можно вычислить
по формуле t = 100 - (b + k) и цикл по переменной t исключается.
program old_task;
var b,k,t:integer;
begin
for b:=0 to 10 do
for k:=0 to 20 do
begin
t:=100–(b+k);
if(20*b+10*k+t=200) then
begin
writeln ('Быков ',b);
writeln ('коров ',k);
writeln ('телят ',t);
end;
end;
end.

Условие будет проверяться 11 *21 = 231 раз

Слайд 8

ДОМАШНЕЕ ЗАДАНИЕ

Задача про сдачу:
В кассе есть монеты по 2, 5 и

ДОМАШНЕЕ ЗАДАНИЕ Задача про сдачу: В кассе есть монеты по 2, 5
10 копеек. Сколькими способами можно выдать сдачу на некоторую сумму Sum? 
СТО, СОТ и ТОС – трёхзначные числа, такие что СТО=СОТ + ТОС
Определить цифры С, Т и О и вывести их на экран
(заметим, что, СТО = С*100+Т*10+О).

Слайд 9

"Задача про сдачу"

В кассе есть монеты по 2, 5 и 10

"Задача про сдачу" В кассе есть монеты по 2, 5 и 10
копеек. Сколькими способами можно выдать сдачу на некоторую сумму Sum?

Слайд 10

program Sdacha;
Var Sum, x, y, z, p: integer;
begin
Writeln('введите сумму сдачи');

program Sdacha; Var Sum, x, y, z, p: integer; begin Writeln('введите сумму
Readln(Sum);
p := 0;
Writeln(' 2 5 10 всего монет');
for x := 0 to Sum div 2 do
for y := 0 to Sum div 5 do
for z := 0 to Sum div 10 do
if 2 * x + 5 * y + 10 * z = Sum then
begin
writeln(x:3, y:3, z:3, (x + y + z):8);
p := p + 1;
end;
if p = 0 then writeln('вариантов нет')
else writeln('всего вариантов: ', p);
end.

Слайд 11

cto + cot = toc

СТО, СОТ и ТОС – трехзначные числа.
Определить

cto + cot = toc СТО, СОТ и ТОС – трехзначные числа.
цифры С, Т и О и вывести их на экран
СТО =С*100+Т*10+О