
Объявить класс РАЙОН ГОРОДА, имеющий название, площадь, численность населения и позволяющий
переименовывать район, а также изменять численность его населения и вычислять плотность населения. Объявить класс ГОРОД, представляющий собой набор районов и позволяющий вычислить среднюю площадь и среднюю численность населения районов города, а также самый плотно населенный район. Продемонстрировать работу всех методов.*/

Ответы на вопрос

// 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.





В общем, код получился довольно-таки объемным, поэтому сюда выкладывать его не буду, а приложу в файле.
Язык программирования: C++
Входные значения:
Введите имя района: Новоильинский
Введите площадь(в кв. км): 56
Введите численность населения: 200000
Введите имя района: Запсиб
Введите площадь(в кв. км): 643
Введите численность населения: 454545
Введите имя района: Куйбышевский
Введите площадь(в кв. км): 45
Введите численность населения: 655433
Введите имя района: Заводской
Введите площадь(в кв. км): 7785
Введите численность населения: 6776
Введите имя района: Центральный
Введите площадь(в кв. км): 864
Введите численность населения: 88546
Средняя площадь районов = 1878.6
Самый плотнонаселенный район: Куйбышевский
Название 2-го района = Куйбышевский
Работа методов класса District хорошо просматривается в вызове методов класса City, ибо они там же и выполняются.
Количество районов - динамическое. Вы можете ввести с клавиатуры количество районов, а потом инициализировать их посредством метода init().
Оценивайте. А от продвинутых жду критику.





Для начала, давайте создадим класс "Район Города" (District), а затем класс "Город" (City), который будет содержать набор районов. Вот как это можно сделать на языке Python:
pythonclass District:
def __init__(self, name, area, population):
self.name = name
self.area = area
self.population = population
def rename_district(self, new_name):
self.name = new_name
def change_population(self, new_population):
self.population = new_population
def population_density(self):
return self.population / self.area
class City:
def __init__(self, name):
self.name = name
self.districts = []
def add_district(self, district):
self.districts.append(district)
def average_area(self):
total_area = sum(district.area for district in self.districts)
return total_area / len(self.districts)
def average_population(self):
total_population = sum(district.population for district in self.districts)
return total_population / len(self.districts)
def most_densely_populated_district(self):
return max(self.districts, key=lambda district: district.population_density())
# Продемонстрируем работу всех методов:
# Создаем районы города
district1 = District("Район 1", 50, 10000)
district2 = District("Район 2", 30, 8000)
district3 = District("Район 3", 40, 12000)
# Создаем город и добавляем в него районы
city = City("Мегаполис")
city.add_district(district1)
city.add_district(district2)
city.add_district(district3)
# Выводим информацию о районах
for district in city.districts:
print(f"Название района: {district.name}, Площадь: {district.area} км^2, Население: {district.population}, Плотность населения: {district.population_density()} чел/км^2")
# Изменяем название района
district1.rename_district("Новый Район 1")
print("Измененное название района:", district1.name)
# Изменяем численность населения района
district2.change_population(9000)
print("Измененная численность населения района 2:", district2.population)
# Выводим информацию о средней площади и средней численности населения районов города
print("Средняя площадь районов:", city.average_area(), "км^2")
print("Средняя численность населения районов:", city.average_population())
# Выводим информацию о самом плотно населенном районе
most_densely_populated = city.most_densely_populated_district()
print(f"Самый плотно населенный район: {most_densely_populated.name}, Плотность населения: {most_densely_populated.population_density()} чел/км^2")
Обратите внимание, что приведенный код предполагает, что ввод данных происходит согласованно, без проверки на ошибки и неправильные значения, что в реальных приложениях следует учесть и обработать дополнительным кодом для обеспечения корректной работы программы.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili