type T = record milk: double; // in 1/1000 of gramm coffee: double; end; const cup = 1000 * (1000 div 20); procedure get_cup_from(var curr, _from: T); begin curr.milk := _from.milk * cup / (_from.milk + _from.coffee); curr.coffee := _from.coffee * cup / (_from.milk + _from.coffee); _from.milk := _from.milk - curr.milk; _from.coffee := _from.coffee - curr.coffee; end; procedure put_cup_to(var curr, _to: T); begin _to.milk := _to.milk + curr.milk; _to.coffee := _to.coffee + curr.coffee; curr.milk := 0.0; curr.coffee := 0.0; end; var first, second: T; curr_cup: T; i: integer; begin with first do begin milk := 0; coffee := 2 * 1000 * 1000; end; with second do begin coffee := 0; milk := 1 * 1000 * 1000; end; writeln('#':4, '1.milk':15, '1.coffee':15, '2.milk':15, '2.coffee':15); writeln('0':4, first.milk:15:4, first.coffee:15:4, second.milk:15:4, second.coffee:15:4); for i := 1 to 10 do begin // get from first get_cup_from(curr_cup, first); // put to second put_cup_to(curr_cup, second); // get from second get_cup_from(curr_cup, second); // put to first put_cup_to(curr_cup, first); writeln(i:4, first.milk:15:4, first.coffee:15:4, second.milk:15:4, second.coffee:15:4) end; end.