// PascalABC.NET 3.4.2, сборка 1790 от 15.09.2018 // Внимание! Если программа не работает, обновите версию! type РайонГорода = class private Naim: string; S: real; Kol: integer; procedure SetNaim(NewName: string); begin if NewName.Length > 0 then Naim := NewName end; procedure SetKol(NewKol: integer); begin if NewKol > 0 then Kol := NewKol end; public property Название: string read Naim write SetNaim; property Площадь: real read S; property ЧисленностьНаселения: integer read Kol write SetKol; constructor(НаимРайона: string; Площадь: real; Население: integer); begin Naim := НаимРайона; S := Площадь; Kol := Население end; function ПлотностьНаселения := Round(Kol / S, 2); procedure ЗадатьИмя(НаимРайона: string); begin SetNaim(НаимРайона) end; procedure ЗадатьЧисленность(Население: integer); begin SetKol(Население) end; end; Город = class private City: string; Districts: List<РайонГорода>; public constructor(Город: string); begin Districts := new List<РайонГорода>; City := Город end; property НаселенныйПункт: string read City; procedure ДобавитьРайон(Район: string; Площадь: real; Проживает: integer); begin var R := new РайонГорода(Район, Площадь, Проживает); Districts.Add(R) end; function СредняяПлощадь := Districts.Select(d -> d.Площадь).Average; function СредняяЧисленность := Districts.Select(d -> d.ЧисленностьНаселения).Average; function ГустонаселенныйРайон := Districts.Select(d -> (d.Название, d.ПлотностьНаселения)).MaxBy(r -> r[1]); procedure ИзменитьНаименованиеРайона(s1, s2: string); begin var i := Districts.FindIndex(d -> d.Название = s1); if i >= 0 then Districts[i].ЗадатьИмя(s2) end; procedure ИзменитьЧисленностьРайона(s: string; n: integer); begin var i := Districts.FindIndex(d -> d.Название = s); if i >= 0 then Districts[i].ЗадатьЧисленность(n) end; procedure Вывод; begin Println('Сведения по городу', City); foreach var d in Districts do Println(d.Название, d.Площадь, d.ЧисленностьНаселения); Println('-' * 60) end; end; begin var GG := new Город('Просто город'); GG.ДобавитьРайон('Ворошиловский', 30, 218439); GG.ДобавитьРайон('Железнодорошный', 69, 104339); GG.ДобавитьРайон('Кировский', 18.6, 63499); GG.ДобавитьРайон('Ленинский', 13, 821730); GG.Вывод; GG.ИзменитьНаименованиеРайона('Железнодорошный', 'Железнодорожный'); GG.ИзменитьЧисленностьРайона('Ленинский', 82173); GG.Вывод; Println('Средняя площадь', GG.СредняяПлощадь); Println('СредняяЧисленность', GG.СредняяЧисленность); var (Район, Плотность) := GG.ГустонаселенныйРайон; Println('Наиболее густонаселен', Район, Плотность) end.