PascalABC.NET 3.3.5, сборка 1662 от 29.04.2018 Внимание! Если программа не работает, обновите версию!
type Монетка=(Орел,Решетка); КорзинаЯблок = List<integer>;
function БросокМонетки:=Random(2)=1 ? Орел : Решетка;
function ЗаполнитьКорзину(d:char):КорзинаЯблок; // считаем, что яблоко весит от 100 до 250 г, // и что в корзину вмещается около 8 кг яблок. begin Result:=new КорзинаЯблок; var ВесЯблок:=0; while ВесЯблок<=8000 do begin var Яблоко:=Random(100,250); Result.Add(Яблоко); ВесЯблок+=Яблоко end; if d='1' then begin Write('Яблоки в корзине: '); Result.Println end; end;
procedure ВзятьЯблоко(Корзина:КорзинаЯблок; var Яблоко:integer); begin if БросокМонетки=Орел then begin Яблоко:=Корзина.Last; Корзина.RemoveAt(Корзина.Count-1) end else begin Яблоко:=Корзина.First; Корзина.RemoveAt(0) end end;
procedure ЯблокоМальчику(Корзина,ЯблокиМальчика:КорзинаЯблок); begin var Яблоко:integer; if Корзина.Count>0 then begin ВзятьЯблоко(Корзина,Яблоко); ЯблокиМальчика.Add(Яблоко) end end;
begin Randomize; var ЯблокиСерика:=new КорзинаЯблок; var ЯблокиБерика:=new КорзинаЯблок; var n:=ReadlnInteger('Собрано корзин:'); var d:=ReadlnChar('1 - отладочный вывод, иное - только результат:'); loop n do begin var Корзина:=ЗаполнитьКорзину(d); while Корзина.Count>0 do begin ЯблокоМальчику(Корзина,ЯблокиСерика); ЯблокоМальчику(Корзина,ЯблокиБерика); end; if d='1' then begin Write('Яблоки Серика: '); ЯблокиСерика.Print; Writeln(' Вес: ',ЯблокиСерика.Sum); Write('Яблоки Берика: '); ЯблокиБерика.Print; Writeln(' Вес: ',ЯблокиБерика.Sum) end end; Writeln('Общий вес яблок Серика: ',ЯблокиСерика.Sum, ', общий вес яблок Берика: ',ЯблокиБерика.Sum) end.
Пример без отладочной выдачи Собрано корзин: 5 1 - отладочный вывод, иное - только результат: 0 Общий вес яблок Серика: 20399, общий вес яблок Берика: 19977